Skip to content

T1 手机与 CLI 通过 WorkOS 登录并建立自己的组织 #2

Open

Description

@DoodleBears

状态:部署、WorkOS 登录/首个管理员、正式 CLI、原生 Hosted AuthKit/PKCE、组织与权限切片已合并;身份事件/撤权、部署中断恢复、真实扫码和剩余平台/Human QA 未完成。 Human 于 2026-10-18 授权合并既有 Draft;不授权 Prod 部署。

Parent

#1

What to build

Human 完成自己的 Cloudflare/WorkOS 账号注册、目标选择和供应商登录/OAuth;部署 Agent 优先通过 CLI/API 或已授权 MCP 配置、部署、初始化,并从已认证控制面独立核验和固定实例配置。只把供应商工具无法完成的必要步骤交给 Human。仅该实例已初始化且 active 的管理员,才可用无 Host 的手机与 CLI 登录业务并建立/访问自己的 Organization。真实 WorkOS、应用映射、独立手机会话和原生回调在同一路径验证。

部署自动化不改变 T1 的 Human admin_only 准入。Agent 群主/管理员与入群审批在首条路径之后的群管理切片交付,验收目标见 spec §8。

T1 不扩展自动实例信任、认证中转、第二套 Human 会话、邀请账本或通用策略/角色编辑器;不支持任意陌生实例即插即用。

所有业务走生产目标 owner、持久存储及公开接口;同时交付所需界面、CLI 与回归证据,不交付隔离的横向层。

真实 WorkOS MCP 核验:2026-10-17

范围是 BotHarness Team 的 TOB 项目、Staging;通过真实 OAuth/MCP 查询。公开记录仅保留脱敏结果,实际资源 ID、账号信息与秘密留在部署者本机。以下是核验时点的观察,不是目标配置已完成的声明。

项目 真实结果 证据等级与剩余验证
身份与目标 MCP OAuth 成功;管理角色 ADMIN;TOB 仅有 Staging,同一 Team 另有默认项目的同名 Staging 读取已验证;每次按项目、environment_id 和 application/Client ID 锁定目标,不能只按环境名或默认上下文
注册与登录开关 allowSignUp=true;密码开启、Magic Auth 关闭 读取及管理合同已验证:authkitSettings / updateAuthkitSettings;关闭注册的持久化更新和读回待验证。T1 仍只要求一种托管登录方式
角色 现有 member/admin,没有 owner;默认 member,multipleRolesEnabled=false 读取及管理合同已验证:roles 返回角色与 roleConfigForEnvironmentV2,createRole / updateRoleConfig 可发现;创建 owner 与写后读回待验证。不能把内置 admin 自动映射为 owner
回调与退出 回调、logout URI、web origins 均为空;环境默认应用及 application 级设置接口可发现 读取及管理合同已验证;全量列表更新须先读合并并保留既有 ID,持久化写入与重跑待验证;具体退出返回 URI 仍需确定
手机回调校验 两条计划中的正式/开发 OAuth URI 经 setAuthkitApplicationRedirectUris(dryRun=true) 返回 RedirectUrisSet;随后重新查询回调仍为空 服务端 dry-run 已验证,未保存;不等于原生回调、PKCE、CLI 登录或任何真实会话已通过
应用用户与事件 AuthKit 应用用户数为 0;Webhook 列表为空 读取已验证;初始应用用户、实例管理员绑定、事件端点和签名投递仍未完成
项目自动创建 createProjectWithNewEnvironments 提供 name 与 includeProductionEnvironment 参数 操作合同已发现,MCP 创建未实测;现有 TOB staging 此前通过 Dashboard 创建,不重复创建

此次 MCP 核验仅执行读取、操作合同发现和一次明确 dryRun=true 的回调校验,没有持久化配置、发邀请、取出秘密或部署。管理角色/操作目录可见不能证明所有写操作有权限且成功;dry-run 返回的候选 ID 不作为真实资源 ID 保存。MCP 真实调用与两条回调输入见 T1 方案。

部署工具以实时发现的操作合同为准,不硬编码旧源码快照中的 userlandSettings/updateUserlandSettings 名称;当前为 authkitSettings/updateAuthkitSettings。更新仅提交必要字段,不能把完整读取对象原样写回:例如 isEmailVerificationRequired 可读不意味着可写,其写入受账户能力限制。未实测的写权限保留待验证。

追加只读核验:2026-10-17

本轮由 Human 完成人工准备后,Agent 在本机受保护进程读取保存的输入,执行官方 API GET 与 MCP 查询;未创建资源、发信、修改云配置或部署。秘密未进入命令参数、输出或公开文档。原始账号/资源 ID 留在本机,公开结果如下。

项目 实际观察 可以证明 / 不能证明
本机保存 profile 目录 0700;deployment.env / secrets.env 为当前用户所有、0600;未发现重复键,秘密文件仅含预期 API key 字段 已验证该次保存与文件权限;Human 报告向导完成,不等于 Agent 观察了完整隐藏输入、中断恢复和全部异常分支
Cloudflare 账号 cf 1.0.0-beta.5 的 auth login 检测到已有登录,复用授权;accounts get 成功,返回 ID 与保存目标一致 已验证当前凭证能读取目标账号;本轮未发生新的 OAuth 授权,未验证部署/Secrets/D1/DO 写权限,也不代表 CI 已有凭证
WorkOS 目标 MCP 按保存的 environment_id 查询,返回 TOB / Staging、sandbox=true;默认 application 的 environmentId 与 Client ID 一致 已验证目标及应用映射;不使用 MCP 默认上下文或仅凭 Staging 名称选择环境
key 有效性 本机读取 WORKOS_API_KEY,仅发往 api.workos.com;GET /user_management/users?limit=1 返回 HTTP 200,用户列表为空 已验证该 key 可读取用户列表;空列表或 HTTP 200 本身不能证明环境归属,也不证明写权限
key 环境归属 请求窗口为 14:34:06.214–14:34:06.749 UTC;随后 TOB Staging 内名为 Tob 的 key 的 lastUsedAt 从 14:31:54.106 更新为 14:34:06.729 UTC;其 applicationId 指向上述已核验应用 使用记录关联证据:时间落在本次请求窗口且应用/环境映射吻合;不是 API 直接返回凭证归属,不是密钥全文比对,也不保证并发使用时可以唯一归因

仍未核验 Worker Secrets 注入、Webhook 签名秘密、云写权限及真实登录/部署。上述关联证据保留原等级,不改写为“归属直接证明”;将来有并发调用、时间未更新或映射不明确时应报告无法确认,不能靠空数据/名称推断。本轮不重查此前所有注册/角色开关,前表仍是此前时间点的观察。

本机 PREPARATION_STATUS 仍为 inputs_saved_unverified:它是离线向导的产物状态,不被这次人工只读核验改写为部署就绪。更换 key、WorkOS 环境/application、Cloudflare 账号或 CI 凭证后需重新核验,不能直接沿用本机这份证据。官方说明确认环境 key 的请求按所属环境隔离,但未提供此次响应中的直接环境证明:API authentication。

UAT / Prod 部署合同

采用两个 GitHub Environments:uat 与 production(界面可称 Prod),同名 Secrets/Variables 按环境隔离;本地开发不等于第三套共享云环境。UAT 计划使用已核验的 TOB WorkOS Staging,Prod 必须独立使用 Production;Cloudflare Worker、D1、DO namespace、实例 ID/origin、Webhook 与运行秘密各自独立。当前仅 UAT Environment、手动流水线和 CI Secret 已配置并部署验证;Prod 尚未配置。

先本地推进 T1,再经放行验证 UAT;Prod 仅晋级已通过 UAT/Human QA 的确切 commit,不随文档/main 推送自动发布。自部署可只启用一套环境,不要求购买/启用生产才能开发。配置字段、凭证交接、发布与拒绝条件见 UAT / Prod 部署约定。

本地开始与远端放行的区别

Human 已同意下一步在本地按 T1 → T2 → T3 → T4 → T5 推进;目前已实施部署与身份/管理员的 UAT 增量,其他交付门槛仍待验证。五项缺口是 T1 的交付门槛,不要求先完成所有云端写入才能开始本地代码。

何时解决 剩余事项
本地首个可运行增量内 锁定 Hono/Drizzle/cf 与 WorkOS 客户端版本;证明 D1/SQLite DO 驱动、迁移及原子初始化可运行;通过同一公开 HTTP 路径验证未初始化拒绝 → 受控 fixture 管理员 → 建组织/CLI 读回。fixture 明确标记,不充当真实 WorkOS 登录;不做独立横向基础票
首次真实 UAT 集成前 固定 UAT origin、退出返回 URI、移动回调及 WorkOS 映射;准备并核验环境级 CI 凭证和写权限;确认安全取得 Webhook signing secret / 注入 Worker Secrets 的实际工具合同。写操作、发邀请与部署届时单独放行,当前不执行
T1 UAT 验收内 WorkOS 注册/角色/回调写后读回及重跑;本人接受邀请、实际 user_id 核验和管理员原子绑定;可信配置扫码/文件导入;真实手机 PKCE、CLI device flow、刷新/切组织/退出/撤权、事件补漏和失败恢复
首次 Prod 发布前 独立 Production WorkOS 与 Cloudflare 资源、生产凭证/环境保护、供应商必要开通;同一候选 commit 的 UAT 证据、生产显式放行及可执行恢复方案。Prod 未开通不阻塞本地 T1 和 UAT 验收

本地增量是 T1 的内部验证步骤,不是已完成 tracer bullet;T1 仍须手机与 CLI 真实闭环及 Human QA 才能释放 T2。首次增量不扩展 Agent 群主或群消息层。暂不改变 ready-for-human 标签或关闭任务;实际领取本地实现时再记录开始状态,不将该标签解释成已经部署。

T1 剩余五项缺口与完成门槛

  1. 配置执行与重跑。 锁定正确项目/环境/application;关闭 signup,明确创建 owner,保持 member 默认和单角色;登记精确回调并确定退出返回地址。写后读回、重复执行不重复创建且不覆盖无关配置;未知角色不获得权限,已有内置 admin 无需删除。注册/角色/回调已有自动化接口,不再默认归为人工步骤。
  2. 首个应用用户到管理员(当前 UAT 路径已验证,完整故障矩阵仍保留)。 已关闭注册并读回、发送无组织邀请、由本人接受;按实际 accepted_user_id 核验目标邮箱、email_verified 与 MCP 未封禁状态。受保护部署工具在真实 UAT 原子写入管理员、策略与固定初始化回执,同目标重试三条记录均不变。并发、失活、失败回滚通过本地 workerd;未以此宣称真实云故障注入完成。完整证据见末尾本轮验收。
  3. 可信配置导入(方案已确认,运行验收待完成)。 部署 Agent 从两个已认证控制面核验后,输出 tob-instance.json 及承载同一配置全文的本地二维码;手机从可信部署电脑扫码,CLI 读取文件,共用校验和 discovery 比对。关键配置变化后停止联网操作,重新核验、导出、导入并登录;具体流程见 T1 §5–6。设计确认不等于导入、扫码或重新核验已实现,不以预置配置替代验收。
  4. 秘密与 Cloudflare 交接(本机准备和部分只读核验已完成,运行交接待完成)。 向导仅采集本机 API key 与目标意图,不核验 key 或注入 Worker。后续受保护取得运行 API key/Webhook secret 并注入 Worker Secrets;记录资源 ID,区分 D1 SQL、DO namespace 生命周期和每个 Org DO 的迁移;配置事件端点 / Cron 并处理中断重跑。初始化前业务关闭,未确认资源不得盲目重建。本机权限、Cloudflare 账号读取和 WorkOS key 可用性已有证据,key 归属仅有使用记录关联;CI 凭证、写权限、Webhook secret、Worker 注入和 UAT 部署均未验证。MCP key metadata 本身不能代替运行秘密交付。
  5. 完整运行验收。 手机登录并建组织 → CLI 独立登录看到同一组织 → 刷新、组织切换、退出与撤权;真实事件签名、补漏/重试、WorkOS/D1/Org DO 中途失败恢复和 Human QA 均须有证据。管理端读取、dry-run、fixture 都不能替代。

五项保留在 T1 内,不另拆横向基础票,不提前启动 T2–T5。必要人工仍是注册、目标/授权选择、OAuth/MFA、首次应用用户认证、产品登录确认和 Human QA;初始秘密交付自动化未证实、团队限制或生产 billing 才属于条件人工。全部实现验收仍未完成。

已确认的可信配置导入方案

  • 可信配置交付固定为一份公开连接配置、两种入口:部署 Agent 核验后生成 tob-instance.json 与包含同一配置全文的本地二维码;手机“添加云服务 → 扫描部署二维码”,CLI tob instance import ./tob-instance.json。配置包含格式版本、实例 ID/显示名称、API HTTPS 地址、WorkOS 公共 Client ID/已核验认证配置及已登记移动回调,不含秘密、用户身份或权限。二维码不通过下载链接取得配置,详细云资源 ID/核验记录留在部署者本机。
  • 首次导入的信任来自用户从自己的可信部署电脑取得配置;手机不能独立证明控制面核验曾发生,也不信任二维码内自称“已核验”的字段。客户端先本地校验、展示域名/环境并确认,再无凭证读取 discovery 比对,通过后保存并单独登录。任意陌生二维码不因此可信;手动输入地址只选择已导入实例。导入不授予实例管理员或群权限。
  • 登录、刷新和重新连接前检查固定配置与 discovery 一致性;不跟随重定向把凭证送到新地址。关键配置不匹配即停止该实例联网操作,部署 Agent 重新核验两个控制面并生成文件/二维码;客户端展示差异、确认替换后使本机旧登录事务与会话绑定失效,再重新登录。旧 token 不转交新目标,其他设备分别更新,不自动迁移旧缓存或待发送内容。
  • 名称仅更新展示;Worker 升级或服务端密钥轮换且公开配置不变,不要求重新导入。API 地址、Client ID、issuer、认证端点或回调变化必须重新核验;实例 ID 变化当作新实例。网络故障保留原配置并显示暂时无法核验,配置不匹配显示需要重新导入,没有忽略后继续入口。T1 不增加配置签名、信任注册中心、自动更新订阅或配对服务器。全部为已确认设计,尚未实现。

已确认的首次管理员初始化方案

  • 首个应用用户由部署者指定目标邮箱,在 WorkOS 关闭公开注册并读回后,取得无 Organization/角色的应用邀请。本人接受并认证后,部署 Agent 按 invitation_id 查询 accepted_user_id,再查询同一环境的实际用户,核对邮箱、email_verified=true 且未禁用/封禁。应用邀请可能由其他邮箱接受,邀请收件地址或 Dashboard 管理身份不能替代实际用户核验;不匹配即停止,不自动改绑。已有目标应用用户可经相同身份核验复用。
  • 首次管理员绑定仅由部署者 Cloudflare 管理权限下的受保护部署命令完成:再次核对实例、D1、WorkOS 环境和用户,在同一 D1 原子操作中写入 active instance_admin 与固定首次初始化 management_operation 回执。固定键每实例唯一,同键不同目标冲突;无匿名认领接口或新 bootstrap token,不增加用户/邀请表。
  • 中断重试以 WorkOS/D1 权威状态为准:有效待接受邀请复用,发送结果未知先查询,不盲目重发;过期需明确替换/重发,撤销不自动恢复。已接受则重新核验;绑定结果未知则读回回执与管理员。相同用户且 active 返回成功,不同用户或已撤销/失活则停止并转独立授权恢复。首次回执须在管理员撤销后保留,不能因 active 管理员为空重新开放初始化。
  • 接受邀请只建立应用身份,不授予 TOB 管理权限,也不完成手机登录。管理员绑定后,手机/CLI 另行启动正常登录,服务端核对 active instance_admin;无组织管理员可进入并创建自己的组织。无匹配本机登录事务的邀请回调不能完成 PKCE 登录。账号恢复交给 WorkOS,管理员恢复单独授权,不由普通初始化重试执行。

本机记录仅保存环境、选定邮箱、invitation_id 和进度等必要信息;不保存邀请 token/accept URL、密码或会话凭证,不发布账号数据。权威状态仍为 WorkOS/D1。详细中断恢复表及证据边界见 T1 §4。本方案已确认,邀请接受、实际用户核验和原子绑定均待运行验证。

已交付的首次部署人工准备向导

入口:bash scripts/prepare-first-deploy.sh tob-staging;脚本、使用说明。这是一份可运行的本机准备工具,不是安装器,也不标志 T1 部署或登录路径完成。

  1. 展示 Cloudflare / WorkOS 注册、登录及 API key 说明 URL;仅打印文本,不打开浏览器,不收集账号密码或 OAuth token。
  2. Human 复制 Cloudflare Account ID(提供控制台查找路径与 URL 示例)和 WorkOS Environment ID(在目标项目 Staging 的 Dashboard URL 中复制 environment_… 段),不再填写 Team / Project 名称;写入本机 deployment.env。Cloudflare ID 校验为 32 位十六进制并统一小写,WorkOS ID 做 environment_ 前缀及字母数字基本检查并保留大小写。格式不能证明归属、权限或 WorkOS 环境类型;后续 Agent 查询展示 Team / Project / Staging 类型及 application/Client ID 后核验。旧名称仅保留作参考,明确确认原目标后补 ID;已保存 ID 不允许换绑,不修改已有秘密。
  3. Human 在目标环境取得服务器 API key,通过终端隐藏输入保存到仓库外 secrets.env;只包含 WORKOS_API_KEY,不含 Webhook secret。两份文件位于 ~/.config/tob/first-deploy//,目录 0700、文件 0600,不进入公共连接配置或二维码。
  4. 输出同机部署 Agent 的交接路径与待办;状态为 inputs_saved_unverified。向导不进行网络请求、工具 OAuth、发邀请、创建 Webhook、注入 Worker Secrets、迁移或部署;不会调用尚未实现的自动部署命令。

中断后同 profile 重跑:普通字段显示已保存值,Enter 保留并继续;API key 只提示已保存,Enter 复用,无需 y 或再次粘贴,不同 key 输入被拒绝。相同值不重复写入,不替换/轮换 key;已保存目标字段不可改绑,换目标用新 profile。秘密存在而目标记录不完整则停止。脚本拒绝符号链接、Git 仓库内秘密存储及非交互输入,避免两个同 profile 进程同时写入;意外强制终止遗留锁需先确认旧进程已退出再处理。

本次发布证据限于 Bash 语法、--help、非交互拒绝及静态检查(模板库不变、四步、不调用开网页/云写入)。 另已增加并验证 Stage 3 路径提示的 Bash 3.2 回归:使用假路径与公开测试标识,覆盖默认/C locale 和非 ASCII 标点变量边界,不访问秘密。随后 Human 报告向导已完成,Agent 只读验证保存权限、目标账号/环境及 API key 可用性,归属证据等级见追加核验表;未由 Agent 观察完整交互,也未验证全部中断/异常分支。shellcheck 当前未安装。Webhook 签名秘密交接、Worker 注入及真实部署仍待验证。向导结束不关闭“秘密与 Cloudflare 交接”缺口,不释放 T2。

Acceptance criteria

  • 只读核验分别记录本机权限、Cloudflare 目标账号读取、WorkOS 环境/application 映射、key 的 HTTP 200 及使用记录关联证据;不把它们升级为写权限、CI 就绪或完整部署证明。换 key/目标/CI 凭证重新核验;无法唯一关联时明确待确认,不输出秘密。
  • UAT / Prod 使用独立环境配置与 GitHub Environment 凭证;变量缺失、环境/WorkOS 类型或资源映射不符即在任何云写入前拒绝,不回退其他环境。PR/fork 检查不使用部署秘密;Prod 只晋级经 UAT/Human QA 的确切 commit,并验证实际环境保护。
  • 部署按目标串行,迁移途中不因新提交自动取消;重复运行先读回资源/版本/迁移状态,部署后核对实际版本和目标。代码回退不能声称自动回退 D1/DO 数据;未完成恢复检查不可标记发布可恢复。

以下是完整 T1 的组合验收项,未完整覆盖的项目仍保持未完成;本轮已验证的窄路径单列在末尾,不能替代手机/CLI 与恢复门槛。

  • 验证重跑默认值:普通字段显示已有值并支持 Enter;API key 内容隐藏,Enter 直接复用,不出现额外 y/N 提示;相同值不重复写文件,输入不同 key 不覆盖旧秘密。账号/目标选择的确认不被跳过。

  • 验证 WorkOS Environment ID 输入:可从环境 Dashboard URL 找到 environment_…;名称、其他 ID 前缀与完整 URL 均拒绝,不改写有效 ID 大小写;同 profile 换 ID 拒绝。旧 Team / Project 名称经明确确认原 Staging 后补 ID;格式及本机 staging 标记不替代环境类型/归属/权限核验。

  • 验证 Cloudflare Account ID 输入:查找路径与 URL 示例清楚,非法格式和完整 URL 不写入目标字段;有效 ID 规范为小写,已保存 ID 不可改绑;旧名称 profile 需明确确认同一账号后补 ID并保留秘密。格式检查不作为控制面核验成功。

  • 人工准备向导在交互终端完成四步,URL 只打印且不会自动开浏览器或执行网络/云动作;输入不包含供应商账号密码、OAuth token 或 Cloudflare 部署凭证。

  • 目标选择和 API key 分开保存在仓库外受限文件;密钥隐藏输入、不回显或进入日志/参数/公共配置;同 profile 中断重跑可复用,换目标拒绝复用旧 key,目标记录缺失时停止。当前样本的文件权限已只读验证;完整交互观察、中断/异常分支与跨环境重跑仍待验证。

  • 向导保存 inputs_saved_unverified 状态,并在末尾明确提示尚未核验或部署;没有 Webhook secret,不执行部署。独立报告“本机准备工具已交付”与“控制面/凭证证据分项记录、部署未验证”,不得把向导退出码或 README 示例当作 T1 完成。

  • 自部署默认走 Agent 可执行的路径:Cloudflare 优先 cf,WorkOS 优先 CLI/API 或已授权 MCP;记录实际工具版本、目标账号/环境、权限和步骤结果。Human 不需要逐项在控制台创建资源或抄录配置;cf beta 与各操作覆盖须实测,不从文档支持推断已集成通过。

  • 清楚区分必要人工步骤:注册、目标/管理员身份选择、OAuth/MFA、首个应用用户认证、产品登录确认与 Human QA。注册/角色/回调管理接口已发现,不再默认列成人工;初始秘密交付或团队权限限制仍需实际确认。必要项未完成不能报成功。

  • WorkOS MCP 不被当作获取/创建环境 API key 的路径;必要秘密通过本机受限文件/凭证存储交给部署工具注入 Worker Secrets,不进入模型上下文、普通输出或诊断。部署控制面授权与产品运行秘密、Human 会话分离,不传给群内 Agent。

  • 部署/初始化可重复运行;中断后先核对资源与操作状态,不能误建、误授予或覆盖无关环境配置。身份/环境不匹配、权限不足及工具未支持均提供明确结果;不用临时 unclaimed 环境或未公开接口绕过。

  • 自部署使用自己的 WorkOS 环境/Client ID/API key;服务器秘密不进入 App。完成最小实例配置和部署者受保护的超级管理员初始化/恢复说明,不允许首个公网访问者抢占。

  • 部署者或其已授权的部署 Agent 从已认证 Cloudflare 与 WorkOS 管理端独立核对 API HTTPS origin、Client ID、issuer/认证端点和精确移动回调,导出同一 tob-instance.json 和包含配置全文的本地二维码。手机从可信部署电脑扫码,CLI 读文件导入并固定组合;首次信任来自受控交付,手机不能独立证明控制面核验曾发生。目标站点 discovery、陌生二维码或仅确认域名不能充当核验证据。未知实例、冒用其他实例 Client ID 或核验后配置漂移,均在开始认证或发送 token 前拒绝;变更须重新核验。

  • registration_mode 与 org_creation_mode 固定为 admin_only,WorkOS 关闭公开注册。仅 instance_admin 中 active 的已初始化用户可进入业务或建组织;有效 token、WorkOS 邀请记录、组织 owner/member 均不能单独准入。未初始化、缺少/非法政策、管理员资格被移除或无法确认时拒绝,缓存不能继续放行。

  • 在 WorkOS 明确创建/核验固定单角色 owner/member,member 保持默认;doctor 发现 owner 缺失、模式/映射不符时阻止建组织,不静默降级或把默认 member 升权。组织创建显式赋予创建者 active owner membership。

  • 实例管理员仍只能列出/访问自己有 active membership 的组织,组织管理另须 owner;无 membership 的其他组织拒绝访问,member 不能管理组织。实例权限不自动授予 Agent 工作权限。

  • OAuth 精确登记 ai.botharness.deepseekbot:/oauth2redirect(正式)与 ai.botharness.deepseekbot.dev:/oauth2redirect(开发),不使用 wildcard 或旧导航 scheme。PKCE/state 与已核验实例、回调绑定为一次性事务;错误、过期、重放或切换实例后的旧回调均拒绝。以真实原生构建验证,不以 Expo Go/网页预览替代。

  • 手机与 CLI 各完成受支持的登录流程,显示当前用户/组织;已初始化管理员的手机无 Host 也能进入云入口。首片固定一种托管登录方式,不要求完整 OTP/Google 或企业 SSO。

  • 创建 Organization 经过实例政策检查,稳定操作 ID 覆盖 WorkOS 创建、成员资格与应用映射;中途失败重试不生成重复组织或错误权限。验证实际 API 幂等机制,不假设跨系统事务。

  • 真实获授权 staging 验证登录、原生回调、令牌刷新、组织切换/越权拒绝、退出和会话/成员撤销;记录令牌有效期与外部变更失效窗口。没有环境时保持未验证,不以 fixture 代替。

  • 凭证、缓存、待发送状态按服务与用户隔离;切换或关闭 Host 不注销云会话,跨域回调不得把令牌送到任意地址。

  • 实例政策、组织映射、必要身份事件接收/去重/补漏进度使用 canonical owner;重启仍能列出本人组织,组织成员的真实权威只有 WorkOS。

  • API、手机和 CLI 共用权限命令。服务器 API key 不能变成无条件代用户执行 WorkOS 管理操作的通道。

  • 公开合同回归与真实手机/CLI 证据齐全,通过 Human QA 后再释放 T2。源码与诊断不含私密账号、token、邮件或环境配置。

剩余五项缺口的专项验收

  • **配置执行与重跑:**项目/环境/application 精确匹配;allowSignUp=false、owner 存在、member 默认和单角色写后读回;回调保留既有 ID,明确退出地址;重复执行不误建或覆盖无关配置。内置 admin 不自动获得 TOB owner 权限。
  • 从零应用用户开始,关闭注册后经无组织邀请建立实际身份;读取 accepted_user_id 并核验用户。错邮箱、未验证邮箱、禁用/封禁、错误环境或无法确认状态均不得授予管理员;已有目标用户可核验复用,无需重复邀请。
  • 公开 HTTP 无法认领管理员;首次固定操作键与 instance_admin 同一 D1 原子提交,并发不同目标最多一个成功;写入响应丢失后读回判断。相同用户且 active 重试成功,不同用户或已撤销/失活拒绝,撤权后首次回执仍存在,不重新开放初始化。
  • 覆盖有效邀请复用、发送结果未知先查询、过期需明确重发、撤销不自动恢复、接受后中断重新核验,以及本机记录丢失时从权威状态恢复或停下报告歧义。普通重跑不重复发信;日志/回执不含邀请 token、accept URL、密码或会话凭证。
  • 接受邀请不能直接进入 TOB 业务或完成无本机事务的手机回调;绑定后手机与 CLI 分别正常登录,无组织的 active 管理员可建组织。Dashboard 身份、邀请目标邮箱和组织角色均不能替代该资格。
  • **可信配置导入:**部署 Agent 从两个已认证控制面核验后输出同一公开配置文件和全文二维码;全新手机扫码、CLI tob instance import ./tob-instance.json 读文件,经过相同本地校验和无凭证 discovery 比对再保存登录。二维码不经下载链接获取配置,不含秘密/身份/权限;重复导入幂等,不能用预置配置绕过。
  • **导入拒绝与信任边界:**不支持的格式、非 HTTPS API 地址、任意认证端点/移动回调或关键配置不匹配均拒绝;不覆盖原配置,手输未知地址不能绕过。不凭二维码自称已核验建立信任;核验报告与云资源 ID 留在部署者本机。
  • **配置变化恢复:**登录/刷新/重连前比对配置,变化后停止该实例联网,不把凭证随重定向发送到新地址;Agent 重新核验/导出,客户端展示差异并确认导入后作废旧本机事务和会话绑定,重新登录恢复。旧 token、缓存/待发送内容不迁移,其他设备分别更新。
  • **非关键变化与故障:**名称更新不重登;公开配置未变的升级/服务端密钥轮换不重导入;实例 ID 变化另建实例。网络故障保留配置/凭证并显示暂时无法核验;配置不匹配显示需要重新导入且不能忽略继续。
  • **秘密与 Cloudflare 交接:**安全取得运行凭证并注入 Secrets;记录真实资源 ID,分别验证 D1 SQL、DO namespace 与对象 schema 迁移;初始化前关闭业务,中断重跑不盲目重建,事件签名/补漏通过。
  • **完整运行:**手机登录建组织 → CLI 独立登录看见同一组织 → 刷新、切换、退出与撤权;跨 WorkOS/D1/Org DO 失败恢复及 Human QA 有证据。读取/dry-run/fixture 不替代这些结果。

Current increment and remaining gates

首个部署增量当时仅授权本地/UAT 部署;随后 Human 追加授权本轮 UAT 邀请、登录和首个管理员初始化。Prod 与 T2–T5 仍未放行。

PR: #7 。当前本地类型/构建、4 条 workerd 集成测试、2 条目标配置测试与 2 条向导测试通过。CI/UAT 运行证据后续单独记录,不把数据库准备或 Secret 名称存在视为部署通过。

  • 本地 Hono Worker → D1 / SQLite Org DO 可运行;未初始化及伪造身份请求关闭业务。
  • D1 重放迁移、Org DO 淘汰后持久化/隔离在本地 workerd 验证。
  • UAT CI token 通过隐藏输入保存、只读验证并用 stdin 上传;账号级权限如实记录,未宣称仅单一 Worker 的权限隔离。
  • UAT Environment 限定 main 分支;五项公开目标变量与 CI Secret 独立配置,Prod 未配置。
  • 确切 main SHA 的 GitHub 检查及 UAT 部署成功;回读版本、D1/Org DO、未初始化拒绝。
  • 同 SHA 重跑部署确认迁移不重复应用;中断/破坏性迁移恢复不以此替代。

这是 T1 内部准备增量,不是完整 tracer bullet。WorkOS 配置写入、运行秘密及签名事件、可信配置导入、首个用户/管理员原子绑定、手机 PKCE、CLI device flow、组织与撤权、Human QA 均保留为未完成门槛。WorkOS key 环境归属仍为此前使用记录关联证据。

已确认的细化设计:T1 仓库、自部署与登录方案。手机采用系统浏览器 PKCE,CLI 采用设备授权;仍需真实环境和真机证据,不代表已实现。

Increment handoff — 2026-10-18 JST

Claim issuecomment-6235245332 的首个部署增量已完成。PR #7 merged;UAT SHA a5990f5b3925d05c0f4eb12b9aa0820e981a99e9;部署及同 SHA 重跑 attempt 1/2 成功。独立 CLI health/ready 通过;控制面读回 D1/Org binding,SQL migration=1、admin=0、policy=0。工作流验证 POST organizations 返回 503 INSTANCE_NOT_INITIALIZED。秘密未输出;GitHub 仅 uat 环境保存 CI token,未注入 WorkOS 运行秘密;Prod 未触碰。

下一步是 T1 内部的可信实例与 WorkOS 认证/初始化路径,不开启 T2。完整运行与 Human QA 未验收,任务保持开放。公开记录不包含本机密钥或凭证内容,详见 运行记录。

2026-10-18 JST:WorkOS 登录与首个管理员 UAT 验收

Claim #2 (comment) 的窄路径已完成。代码 PR #8、issuer 修复 PR #9 已合并;证据文档 PR #10。准确部署 SHA 3e1eb9eb0ce7364a51a4707fc6367bd8b1de380f,CI / UAT 部署与 smoke 成功。文档提交不代表新版本部署。

  • 真实 WorkOS 邀请接受;实际用户、所选已验证邮箱及未封禁状态匹配;公开注册关闭。
  • 首次真实授权暴露 generic issuer 配置错误,管理员尚未绑定;随后依固定 client 的官方 discovery 与签名核验修正为 application issuer,加入部署前核对及回归测试,没有放松验签。
  • 已授权身份初始化前 /api/me 返回 503 INSTANCE_NOT_INITIALIZED;受保护工具原子初始化后,同一身份返回 200、实例匹配、角色 admin。
  • 同目标初始化重跑,管理员/策略/回执各一条且内容和原始授权信息不变;匿名访问 401,组织创建仍为 503 FEATURE_NOT_AVAILABLE。
  • 两条测试会话已发起撤销,权威列表回读无剩余会话;本机测试令牌文件已删除,无秘密进入输出/GitHub。未宣称已签发 access token 立即失效。
  • 精确代码 CI:typecheck/build、8 workerd + 4 Node + 2 wizard 测试通过。竞争初始化、失活、回滚和其他用户拒绝是本地运行证据,未伪称真实云故障注入。
  • 下一完整门槛:手机可信配置扫码/原生 PKCE、组织操作与跨端一致性、事件/撤权与 Human QA;CLI 结果见本页最新验收,不释放 T2。

WorkOS key 环境归属仍为此前使用记录关联证据。此次 JWKS-only Worker 未注入 WorkOS API key / Webhook secret,Prod 未触碰。详细运行记录。

2026-10-18 JST:正式 CLI 会话 UAT 验收

  • 部署者核验后导出公开配置;实际 CLI 文件导入及 Human 设备授权登录通过,身份为已初始化管理员。
  • 正式 whoami / refresh 通过;刷新令牌轮换,验证后身份与会话保持一致。
  • 正式 logout 返回本机清理与远程撤销成功;独立 WorkOS 读回确认仅当前会话消失,其他会话不变;旧刷新令牌返回 HTTP 400 invalid_grant,退出后 whoami 拒绝,重复退出幂等。
  • 初次退出故障已复现为 workerd 不支持 redirect:error;PR fix(auth): revoke sessions using supported Worker fetch options #13 改用 manual 并拒绝重定向,测试增加原生 Request 验证。诊断副本已清理。
  • 手机二维码导入、原生 PKCE/安全存储、独立手机/CLI 组织路径、owner/member 与建组织重试、签名身份事件和撤权传播、完整 Human QA 仍是 T1 门槛;不能把 CLI 实测等同于全部通过。

源代码 SHA 5c178595c5adf4c4eab65df4dd9fcfb56cd06fbc;UAT 部署与检查。实现 PR #11、诊断 PR #12、修复 PR #13;详细证据及限制。本轮仅 UAT;现有 access JWT 的即时失效未实现/未验证,后续身份事件仍待交付。

T1 real Hosted AuthKit / native PKCE acceptance — 2026-10-18 JST

Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9; mobile Draft PR #2103.

  • Real Hosted AuthKit page sent the email OTP; Human entered the accepted retry in Device Hub. The normal native browser/PKCE/state path returned to the App and created a fresh real WorkOS session. No emulator or injected session on this successful path.
  • Native administrator state and real UAT /api/me matched the accepted bootstrap identity and trusted configuration.
  • Refresh rotation, cold restart saved/unverified → revalidation, App logout, exact remote session revocation/latest refresh rejection, independent formal CLI still admitted, second cold restart signed out.
  • Magic Auth restored disabled; registration remains closed. Private checkpoint credentials removed after confirmed revocation. Simulator driver closed/window released. No Prod/deployment/merge.
  • Fully unattended hosted OTP entry remains unqualified: the hidden-input attempt was rejected, and the Human supplied the successful retry directly. Existing emulator browser regression and real API-prepared session automation remain separate passing layers.

Six inspected screenshots and bounded report; 92-second post-login recording. Credentials/browser callback URLs were not recorded. Evidence commit 459c07d7458f8075ceeec938ab1e28a3eeece44e; product runtime 216963322, retained native source a0b291907, UAT service 1ad3e6605 unchanged. No source retest claimed for this media/docs-only update; prior code/tooling CI39064596308 passed.

This supersedes earlier “real hosted pending” notes for the successful email/native-PKCE path only. T1 remains open for physical QR and remaining platform/accessibility/native failure acceptance; mobile/CLI organization create/list/switch and owner/member/no-membership rules; retry/reconciliation/identity-event/revocation behavior; deployment/configuration interruption recovery; final review and Human acceptance. T2 and Prod are not released.

Organization tracer bullet acceptance — 2026-10-18 JST

TOB Draft #17 · mobile Draft #2121 · bounded native report and recordings.

  • 手机实际创建一个 UAT 组织并成为 owner,描述写入版本2;正式独立 CLI 列出、选择并读回同一准确 ID/内容/版本。
  • 仅该测试组织临时 owner→member:旧 owner 凭证和手机旧界面的写入均返回403,原数据不变;修复并重验 member 只读区的未保存草稿与列表角色显示。
  • 恢复 active owner 并三端读回;手机冷启动重新核验保存的组织选择。手机退出仅撤销自身会话,最新刷新令牌拒绝,原独立 CLI 仍可用。
  • 本地20 workerd +19 Node/CLI +2 wizard、手机28针对性检查;最终手机产品源码 1b39324c5 的完整CI通过。Worker实际部署 e5bc562;之后服务端修改仅测试/文档。
  • 两组织之间切换、真实成员停用:自动审批拒绝这两项额外操作,未执行。当前真实切换证据仅 unscoped→手机创建的同一个组织;失活/故障/重试有本地测试,不冒充云端验证。
  • 签名身份事件/补漏、访问JWT即时撤权、部署/配置中断恢复、剩余真机/平台验收和 Human review 仍待完成。未合并、未关闭T1、未释放T2/Prod。

本轮认证使用独立API准备的真实UAT测试会话,不新增Hosted浏览器证明。注册/Magic Auth保持关闭;测试角色已恢复,撤销后的手机凭证已清理,模拟器窗口已释放。

合并检查点 — 2026-10-18

TOB #17–24 已依次合并,main 44dbb505ae6ba36a82372d7e11f3c356e3651931;DeepSeekBot #2103/#2121/#2131/#2138/#2146/#2150/#2152/#2154 的原始提交由 #2157 整合,main f9ed710b5a718526cc97a30583af80fa14e28424。上述最新 Human 授权取代历史“暂不启动/不合并”描述;未运行的验收仍不算通过。此次没有部署或发布,Prod 未变。

部署、WorkOS 登录/首个管理员、正式 CLI、原生 Hosted AuthKit/PKCE、组织与权限切片已合并;身份事件/撤权、部署中断恢复、真实扫码和剩余平台/Human QA 未完成。 本总任务保持开放。

Activity

  1. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    T1 implementation claim: starting the first internal increment, authorized by the Human. Scope: local Hono Worker + Drizzle D1/SQLite Org DO migrations, version/health readback, fail-closed uninitialized business endpoints, then the first UAT deployment and environment-scoped CI configuration after local checks. Production remains untouched. This is preparation inside T1, not completion of mobile/CLI WorkOS login or release of T2. Branch: codex/t1-first-uat.

  2. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    T1 next-increment claim (Human authorized, UAT only): verify WorkOS invite-only onboarding, implement signed Human token admission and atomic first-administrator initialization with retry, and prove it through a real WorkOS login and UAT /me request. Phone/CLI product integration follows this slice; no Production changes or T2 work. Branch: codex/t1-auth-bootstrap. No emails, credentials or login tokens will be included in public evidence.

  3. 10 remaining items

  4. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    Batch10 native build — 2026-10-18 JST

    Exact source/batch head a0b2919072af8fee62d8bb5fbb402fc52fb0d852, qa/batch-10. Full CI and final mobile regression suite (550 pass / 8 skip) pass. Xcode27 signed iPhone Debug build succeeded using the existing matching development profile; binary identity, registered callback scheme and codesign verification pass. No account/signing-profile creation or Prod change.

    Physical installation then failed with CoreDevice connection invalidated / peer no longer reachable. Human has been asked to reconnect and unlock the phone. This is not an installed-app, QR, login, refresh or logout pass. Preserve app data/Keychain, the built product, existing/rollback binaries and original QA Host.

    SDK58 owner received the released native build/Simulator lane for the same frozen source and generated iOS/Pods, reusing the single Metro. Phone WorkOS authentication remains with this task. Native/Human acceptance remains pending; #2103 stays Draft and T1 stays open.

  5. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    T1 mobile session checkpoint — unattended UAT

    Draft mobile PR #2103 now includes the local-only test driver, native screenshots and a 106-second recording. Detailed evidence and limits.

    Verified on the assigned iOS Simulator without Human login:

    • Real WorkOS Staging API authentication and UAT administrator admission.
    • Native Check session, refresh-token rotation and SecureStore persistence.
    • Cold restart restores the same session, requiring fresh identity verification.
    • Native logout clears memory/storage, revokes only its WorkOS session, and the latest refresh token is rejected.
    • Independent formal CLI whoami remains admitted; another App restart stays signed out while retaining the trusted configuration.

    Product runtime 216963322, retained native source a0b291907, service 1ad3e6605; the driver changes only development tooling. 18 focused driver/client tests and mobile type/style checks pass. Temporary authentication settings were restored and fixture credentials removed; no Prod or merge.

    This is API-prepared authentication + native session lifecycle, not successful Hosted AuthKit/PKCE browser-return acceptance. Physical QR, Android, accessibility/theme matrix and Human product acceptance remain separate. T1 also remains open for organization creation/list/switch, authorization and identity-event/revocation slices. The current PR remains Draft.

    Agent task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9.

  6. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    T1 native browser acceptance — bounded update

    Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9; mobile Draft PR #2103.

    • Passed, local unattended: official WorkOS Emulate 0.15.0 → actual iOS system browser → native custom-scheme return → normal client state validation and S256 code exchange. Wrong state made zero token requests; wrong verifier failed with no session; consumed authorization-code replay was rejected. Fictional identity, memory-only storage and loopback-only requests; no emulator credential reached UAT.
    • Limit: the emulator rejects the app's hostless callback URI, so a test-only HTTP-to-native Location adapter is required. This does not qualify live registered redirect enforcement or real TOB admission. Inspected screenshots, recording and protocol counters.
    • Real hosted gate pending: a bounded live UAT API-code attempt was rejected by Hosted AuthKit as expired. It was canceled; Magic Auth restored disabled, signup remains closed, temporary code removed. A fresh normal login was opened after Human confirmation, but no successful return was observed within the transaction lifetime; it was canceled. App remains signed out with its real config retained; The prior driver was closed. After a late Human reply, readback still showed no session; a fresh normal hosted login is now open with recording off, and the Simulator window is retained pending its result. WorkOS readback confirms no new active application session and the baseline CLI session preserved. No password reset, new user, role/Radar changes or Prod operation.
    • Regression: 22 focused tests, root/mobile typecheck, lint and full formatting check pass locally. Initial evidence-formatting CI failure was fixed; corrected-head CI passed at 027cb08ef: all three test shards, static/build, mobile exports, docs and isolated Host smoke. Product runtime remains 216963322, native source a0b291907, UAT service 1ad3e6605.

    T1 remains open. Remaining delivery gates include successful real hosted native login; mobile/CLI organization create/list/switch with active owner membership; member/no-membership denials and creation retries; signed identity events, reconciliation and revocation windows; interruption/configuration/deployment recovery evidence; and the remaining physical QR/platform/accessibility/Human-QA acceptance. Existing real-UAT API-prepared native session lifecycle and formal CLI proof stay valid as separate evidence. This update does not release T2 or authorize Prod.

  7. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    T1 real Hosted AuthKit / native PKCE acceptance — 2026-10-18 JST

    Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9; mobile Draft PR #2103.

    • Real Hosted AuthKit page sent the email OTP; Human entered the accepted retry in Device Hub. The normal native browser/PKCE/state path returned to the App and created a fresh real WorkOS session. No emulator or injected session on this successful path.
    • Native administrator state and real UAT /api/me matched the accepted bootstrap identity and trusted configuration.
    • Refresh rotation, cold restart saved/unverified → revalidation, App logout, exact remote session revocation/latest refresh rejection, independent formal CLI still admitted, second cold restart signed out.
    • Magic Auth restored disabled; registration remains closed. Private checkpoint credentials removed after confirmed revocation. Simulator driver closed/window released. No Prod/deployment/merge.
    • Fully unattended hosted OTP entry remains unqualified: the hidden-input attempt was rejected, and the Human supplied the successful retry directly. Existing emulator browser regression and real API-prepared session automation remain separate passing layers.

    Six inspected screenshots and bounded report; 92-second post-login recording. Credentials/browser callback URLs were not recorded. Evidence commit 459c07d7458f8075ceeec938ab1e28a3eeece44e; product runtime 216963322, retained native source a0b291907, UAT service 1ad3e6605 unchanged. No source retest claimed for this media/docs-only update; prior code/tooling CI39064596308 passed.

    This supersedes earlier “real hosted pending” notes for the successful email/native-PKCE path only. T1 remains open for physical QR and remaining platform/accessibility/native failure acceptance; mobile/CLI organization create/list/switch and owner/member/no-membership rules; retry/reconciliation/identity-event/revocation behavior; deployment/configuration interruption recovery; final review and Human acceptance. T2 and Prod are not released.

    Final exact-head CI: verify39068186933 passed at 459c07d7458f8075ceeec938ab1e28a3eeece44e: all three test shards, lint/format/typecheck/build, mobile iOS/Android exports, docs and isolated Host smoke. No deployment.

  8. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim

    • Agent: Codex
    • Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9 (not a DSH Session)
    • Issue scope: mobile organization creation → independent TOB CLI list/select → live owner/member/no-membership checks; WorkOS/D1/Org DO recovery and scoped tokens. UAT only, no merge/Prod/T2.
    • Branches: TOB codex/t1-organizations; DeepSeekBot codex/2120-cloud-organizations (stacked on #2103).
    • Started: 2026-10-18 UTC
    • State: active
  9. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    T1 organization tracer bullet is ready for review; no merge, Prod or T2 release.

    • Runtime: mobile create/save 494a20f1e; final role/reselection/restart/logout 1b39324c5; UAT Worker e5bc562. Current PR heads add evidence/tests/docs only.
    • PASS: actual phone creates one organization and saves as owner; independent formal CLI lists/selects/reads the same ID/content/version. Member downgrade rejects stale-owner writes from both clients (403), original version remains 2. Role restored active owner and read back. Cold restart revalidates selected organization; phone logout revokes only its own session, latest refresh rejected, CLI remains admitted.
    • Native finding fixed: member reselect showed an unsaved draft and stale list role. Corrected at 1b39324c5 and repeated in the final video. API-prepared login is separate from the earlier real Hosted AuthKit proof.
    • Tests: 20 workerd + 19 Node/CLI + 2 wizard; 28 focused mobile checks/typecheck. Final product-code CI passed. Latest exact-head CI also passed: mobile 9de7c560e (run), service abc898f (run). Normal Simulator signing resolved the initial Keychain build failure without erasing data.
    • Inspected screenshots, two videos and exact limits. All five images embedded in the PR were confirmed loaded at 402×874. Service/CLI Draft #17 · Mobile Draft #2121.
    • Automatic approval rejected optional second-org creation and real membership deactivation; neither executed. Two-org switching and inactive-member UAT remain unverified. Local failure tests are not cloud-fault proof.
    • Remaining T1: signed identity events/reconciliation/revocation, deployment/config interruption recovery, remaining physical/platform/native failure acceptance, review and Human QA. Simulator/8091 released; original Hosts/phone untouched; test credentials removed after revocation. One UAT test organization retained, active owner restored; registration/Magic Auth remain closed.

    Task codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9: this bounded implementation and acceptance claim is handed off for Human review. Private reconstruction data remains local; no secrets or personal identity in this report. The local architecture HTML is a supplemental review aid, not shared runtime evidence.

  10. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim — expanded multi-user slice

    • Agent: Codex
    • Task: codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9
    • Branch: codex/multi-user-onboarding, stacked on Draft feat: create and select organizations with owner/member boundaries #17; no merge.
    • State: active
    • Scope: authenticated ordinary users receive one durable default organization on first application sign-in, can create additional organizations and switch via mobile/CLI. Administrator bootstrap remains a separate privileged operation. Test with two synthetic UAT users, including isolation and retries.
    • The Human explicitly expanded the prior admin-only scope to multi-user organizations, channels, invitations and cross-Host Agent communication. This first slice changes admission/onboarding; channel and invitation slices follow separately. Only UAT is authorized, never Prod. The earlier second-org/deactivation limits remain historical evidence, not claims of successful tests.
    • Existing PR feat: create and select organizations with owner/member boundaries #17 and mobile #2121 remain unmerged. Channel-to-channel invitation semantics are awaiting clarification; independent onboarding work proceeds.
  11. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    Active goal: first multi-user service/CLI slice

    Task codex/local/01a148ae-ec7f-74b2-8157-961411ce54c9 remains active. Service Draft #18, mobile Draft #2131; both unmerged, stacked on earlier unmerged candidates.

    Real UAT Worker c4c8aa44fd86dcd53650440a8350442c20420938, version cc848bdb-d7cb-44cf-bbea-be1df39d11dc, schema4. Ordinary-user policy explicitly enabled; bootstrap administrator unchanged and WorkOS signup still closed. Two dedicated synthetic users each receive one distinct default workspace; retry returns the same ID. A creates another workspace and switches first → second → first. B can list only its own and cannot select/read A's workspaces. First denial check hit a network failure; same-key repeat passed. No secrets/Prod/merge.

    Local service26 + CLI/contracts20 + wizard2 and mobile/client/driver/style26 tests passed; typechecks/build passed. Native mobile multi-workspace acceptance is queued at 00d9bcc6ca748d0d01993ab29eddc3f66d1ffbb0, JS-only, no new build. Screenshots/video pending. Synthetic authentication is not Hosted AuthKit evidence. Current CI is still running, not yet claimed passed.

    Next: mobile proof, then channels and invitations, then independently credentialed Agents and two isolated Hosts via real Cloudflare UAT. Channel-to-channel invitation meaning is still awaiting clarification. T1 remains open; this is not completion of the overall goal.

  12. DoodleBears commented on Oct 17, 2026

    @DoodleBears
    ContributorAuthor

    UAT ordinary-user workspace slice verified and published in Draft TOB #18 and mobile #2131.

    Actual mobile UI created a third workspace and switched default → third; independent formal CLI listed/selected its exact ID. A sees three workspaces, B sees only its own. Cold restart, refresh rotation, phone-only remote revocation and independent CLI survival passed. Runtime9f71dd3d9; servicec4c8aa44; evidence head d94a95c3364725bf5d95067b3c33ce45cfad9f8c. Synthetic API-prepared login is not new Hosted AuthKit proof. Native lane released; phone secret fixture removed. Existing owner/member downgrade proof remains in #2121.

    Latest CI is tracked separately; no Human acceptance, merge or Prod. T1 remains open (provider revocation/banned handling and remaining gates). Goal continues with channels/invites and two isolated Hosts through UAT; these are not claimed implemented. No private credentials are included.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:activeAn agent task has an active scoped work claimfeature:messagingMessaging module and external providersready-for-humanRequires human implementationscope:tracerHuman-testable implementation slice

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions