Finish provider acceptance and reader handoff [skip ci]

This commit is contained in:
2026-11-07 16:13:22 +08:00
parent 2ab5008a03
commit b54d1c7469
5 changed files with 14 additions and 11 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
- 源数据只读;不复制整库,不从浏览器直连 SQLite 或持有数据库凭据。
- 阅读与文章列表优先,无 KPI 仪表盘。默认 Vignelli;Editorial、Tufte 可切换。UI Craft Editorial 的衬线默认按用户现代简洁偏好及选定主题调整。
- 项目级技能在 .agents/skills;beautiful-article 内含 Vignelli/Tufte authoring profiles,两者不是独立上游 skill。Beautiful Article 只在另行请求单篇 HTML 文章时进入其完整 harness。
- 英文品牌 Thesisly、中文名研迹;远程仓库为 `ssh://git@gitea.entroia.com:22222/Zayden-Jung/Thesisly.git`。用户已在 FOUNDRY_PROJECTS 新增 thesisly 回调,并复用当前正式 Core 二进制完成仅配置重载;新旧项目路由、Google/Slack 跳转和取消回调通过,Google真实首次注册登录及用户侧刷新/新标签保持、退出已确认;Slack与邮件实际链路仍待验收。main 仅允许本次已授权的空初始化提交,其余代码走工作分支与人工 PR 合并。
- 英文品牌 Thesisly、中文名研迹;远程仓库为 `ssh://git@gitea.entroia.com:22222/Zayden-Jung/Thesisly.git`。用户已在 FOUNDRY_PROJECTS 新增 thesisly 回调,并复用当前正式 Core 二进制完成仅配置重载;新旧项目路由、Google/Slack 跳转和取消回调通过,Google/Slack真实授权登录及用户侧刷新、新标签保持、退出均已确认,Google首次授权已完成注册;邮件投递与验证未实测。main 仅允许本次已授权的空初始化提交,其余代码走工作分支与人工 PR 合并。
- 论文库已由「调查云盘占用原因」任务完成 PostgreSQL 迁移、验收与切换;Foundry Core 的只读论文 API 正在按已发布 schema 联调。服务器已配置专用 SELECT 账号,连接串仅保存在服务器受保护文件中。不部署已撤回的 SQLite 方案,也不要求添加 FOUNDRY_RESEARCH_DATABASE。
<!-- BEGIN:nextjs-agent-rules -->
+2 -2
View File
@@ -48,13 +48,13 @@ pnpm test:session
类型检查与16项测试已通过:除了Cookie/样本策略,测试直接调用生产认证代理,覆盖兑换、登录/邮件验证、续期、退出、错误、凭据隔离与请求限制。它们使用进程内模拟的Core响应,不代表真实OAuth成功,也不需要启动Next.js或编译。
12项隔离样本模式桌面/手机浏览器测试已通过,覆盖搜索、分页、空结果、文章摘要与引用复制、三种主题持久化、登录/注册表单和404恢复;截图用于人工核对布局;样本dev运行在17323,不占用17322预览。另有7项浏览器会话测试,使用隔离的实际Next dev副本和生产代理连接模拟Core,验证刷新/新标签恢复、HttpOnly Cookie、跨标签退出、故障重试、失效清理、Google/Slack模拟PKCE和邮箱验证的一次性兑换。测试不复制.env,不访问真实账户,结束后清理副本;新增2项隔离浏览器回归验证搜索错误恢复及异常数据处理,合计9项隔离浏览器测试通过;这些测试的Core响应仍为合成数据。另已在真实库上检查桌面/手机首页、简介、领域和全文搜索、超时后缩小搜索恢复。Google真实注册登录已到达后端,用户已确认刷新、新标签保持及退出正常;Slack和邮件实际链路尚未验收。生产构建按用户要求未执行。前端目录为 `/Users/zzyang/thesisly`,远程已连接 Zayden-Jung/Thesisly,main 仅有用户授权的空初始化提交;论文 HTTP API 已纳入本目标,由代理在 Foundry Core 的 codex/research-api 分支实现。
12项隔离样本模式桌面/手机浏览器测试已通过,覆盖搜索、分页、空结果、文章摘要与引用复制、三种主题持久化、登录/注册表单和404恢复;截图用于人工核对布局;样本dev运行在17323,不占用17322预览。另有7项浏览器会话测试,使用隔离的实际Next dev副本和生产代理连接模拟Core,验证刷新/新标签恢复、HttpOnly Cookie、跨标签退出、故障重试、失效清理、Google/Slack模拟PKCE和邮箱验证的一次性兑换。测试不复制.env,不访问真实账户,结束后清理副本;新增2项隔离浏览器回归验证搜索错误恢复及异常数据处理,合计9项隔离浏览器测试通过;这些测试的Core响应仍为合成数据。另已在真实库上检查桌面/手机首页、简介、领域和全文搜索、超时后缩小搜索恢复。Google和Slack真实登录均已到达后端,用户分别确认刷新、新标签保持及退出正常;邮件实际投递与验证未实测。生产构建按用户要求未执行。前端目录为 `/Users/zzyang/thesisly`,远程已连接 Zayden-Jung/Thesisly,main 仅有用户授权的空初始化提交;论文 HTTP API 已纳入本目标,由代理在 Foundry Core 的 codex/research-api 分支实现。
## 当前后端依赖
论文库已完成 PostgreSQL 迁移及独立验收。当前本地忽略配置通过 SSH 回环隧道连接 ECS 上的临时 Core(真实库已验证3,526,999篇);浏览器不持有数据库连接串。临时 Core 仅启用真实论文只读连接,账户仍访问正式 Core。宽泛全文计数可能超时,页面会保留搜索表单并提示缩小范围,不显示伪造总数或退回样本。
用户已配置 Thesisly 的 FOUNDRY_PROJECTS,正式 Core 已通过仅配置重载生效,原有项目保留;Google/Slack 跳转与取消回调通过,Google真实账户及会话检查已由服务端观察和用户实测确认,Slack和邮件链路仍待验收。研究 API 的新代码尚未合入或部署正式后端。本阶段不触发CI,交付使用Gitea [skip ci]提交与PR标记并核对运行记录;本地build未执行,不采用SQLite sidecar,也不需要FOUNDRY_RESEARCH_DATABASE。
用户已配置 Thesisly 的 FOUNDRY_PROJECTS,正式 Core 已通过仅配置重载生效,原有项目保留;Google/Slack 跳转与取消回调通过,Google/Slack真实身份及会话检查已由服务端观察和用户实测确认;邮件投递未实测。研究 API 的新代码尚未合入或部署正式后端。本阶段不触发CI,交付使用Gitea [skip ci]提交与PR标记并核对运行记录;本地build未执行,不采用SQLite sidecar,也不需要FOUNDRY_RESEARCH_DATABASE。
## Endoleap 参考
+4 -4
View File
@@ -23,9 +23,9 @@
## 真实验收状态
Google 已完成真实首次授权与注册登录:服务端观察到Thesisly的Google身份及有效会话,用户随后明确确认刷新保持、新标签保持、退出后刷新三项均正常。浏览器控制工具连接超时,因此浏览器操作结果以用户实测反馈为据,不冒称自动浏览器验收,也未读取个人浏览器Cookie或token。
Google和Slack均已完成真实授权登录:服务端分别观察到Thesisly的两种提供方身份记录,用户随后分别明确确认刷新保持、新标签保持、退出后刷新三项均正常。Google首次授权还完成了项目账户注册。浏览器控制工具连接超时,因此浏览器操作结果以用户实测反馈为据,不冒称自动浏览器验收,也未读取个人浏览器Cookie或token。
Slack 的授权入口与取消回调已验证,实际授权及会话检查已请求用户完成,尚未收到结果;邮件实际投递与验证仍未实测。HTTP 302、单测或模拟token测试不等于这些真实链路通过。
授权入口与取消回调也已分别验证。邮箱表单及验证回调的接线有自动化覆盖,但邮件实际投递和收件验证未实测;不将该可选链路表述为已完成真实投递验收。
## 代理验收
@@ -33,7 +33,7 @@ App Router 的 route.ts 直接调用 src/lib/auth-gateway.mjs。tests/auth-gatew
## 2026-11-07 配置更新
用户已确认新增 Thesisly 的 FOUNDRY_PROJECTS 回调。FOUNDRY_RESEARCH_DATABASE 为已撤回的 SQLite 路径方案,无需添加。论文库已完成 PostgreSQL 迁移及验收,Core 的论文 API 已通过临时回环服务接入前端。正式 Core 项目注册现已生效,新旧四个项目匿名 auth/me 均返回401;Google/Slack 实际授权地址和取消回调已验证。Google真实授权及用户侧会话保持/退出检查已通过;Slack和邮件实际链路仍待验收。
用户已确认新增 Thesisly 的 FOUNDRY_PROJECTS 回调。FOUNDRY_RESEARCH_DATABASE 为已撤回的 SQLite 路径方案,无需添加。论文库已完成 PostgreSQL 迁移及验收,Core 的论文 API 已通过临时回环服务接入前端。正式 Core 项目注册现已生效,新旧四个项目匿名 auth/me 均返回401;Google/Slack 实际授权地址和取消回调已验证。Google/Slack真实授权及用户侧会话保持、退出检查均已通过;邮件实际投递与验证未实测。
配置重载第一次因公网 TLS 探测超时而回退,已确认旧服务健康;随后按现有部署脚本使用回环 TLS、真实 SNI 与证书验证完成切换。服务器受保护验收记录为 foundry/verification/thesisly-config-foundry-core-1595929e8395.json,包含未变更的发布二进制 SHA256 和旧路由备份位置,不含认证凭据。
@@ -42,4 +42,4 @@ App Router 的 route.ts 直接调用 src/lib/auth-gateway.mjs。tests/auth-gatew
`pnpm test:session` 使用系统 Chrome 和独立端口17323/17324:复制应用源文件到可清理的临时目录,运行真实 Next dev、App Router 代理与浏览器,只有 Core 响应为合成服务。它不会读取项目 .env、占用17322预览、发送真实密码或连接真实 OAuth。其中7项测试验证HttpOnly/SameSite Cookie及客户端无token、刷新/新标签恢复、跨标签退出、暂时故障后重试、失效清理、退出失败保留会话,以及Google/Slack模拟PKCE和邮箱验证的一次性消费。它证明前端会话接线,不证明真实Core数据、邮件投递、提供方授权或生产配置。
另外2项浏览器用例使用同一隔离dev和合成论文API,验证400/429/503/504时保留搜索条件、隐藏未知总数和分页、缩小查询后恢复,以及格式异常响应不会显示成空结果或退回样本。共9项浏览器回归已通过。真实库上也验证了宽泛搜索超时后修改为CartoonGAN可恢复3条结果;宽泛全文计数的性能仍待优化。
另外2项浏览器用例使用同一隔离dev和合成论文API,验证400/429/503/504时保留搜索条件、隐藏未知总数和分页、缩小查询后恢复,以及格式异常响应不会显示成空结果或退回样本。共9项浏览器回归已通过。真实库上也验证了宽泛搜索超时后修改为CartoonGAN可恢复3条结果;宽泛全文精确计数可能超出8秒预算,这是当前已知限制,用户可保留条件直接缩小查询或重试。
+3 -3
View File
@@ -30,9 +30,9 @@ source_records按paper_id关联;作者兼容[family,given,suffix]数组与字
## 读取边界
已核对实际 PostgreSQL schema、编码标记和索引,并在服务器创建专用 SELECT 账号及受保护连接配置。已通过 SSH 回环隧道验证真实全库首页和详情(桌面/手机无页面异常和横向溢出),查询性能仍在调整;临时 Core 不是正式部署。不部署 SQLite sidecar,不复制整库,不从浏览器持有数据库连接串。
已核对实际 PostgreSQL schema、编码标记和索引,并在服务器创建专用 SELECT 账号及受保护连接配置。已通过 SSH 回环隧道验证真实全库首页和详情(桌面/手机无页面异常和横向溢出),非常宽泛查询可能超出8秒预算;临时 Core 不是正式部署。不部署 SQLite sidecar,不复制整库,不从浏览器持有数据库连接串。
最多两个并行查询、8秒查询预算;繁忙返回429,超时/存储异常明确报错。已补建作者和领域索引,并局部关闭 JIT、调整过滤取页顺序。实测作者搜索146条、cs.AR领域9457条、CartoonGAN搜索3条、多词全文检索8653条均返回200;非常宽泛的检索仍可能超出8秒预算,需继续优化。语料库是共享公开数据;账户与未来私有收藏仍须按项目隔离。
最多两个并行查询、8秒查询预算;繁忙返回429,超时/存储异常明确报错。已补建作者和领域索引,并局部关闭 JIT、调整过滤取页顺序。实测作者搜索146条、cs.AR领域9457条、CartoonGAN搜索3条、多词全文检索8653条均返回200;非常宽泛的检索仍可能超出8秒预算,这是当前已知的性能限制。语料库是共享公开数据;账户与未来私有收藏仍须按项目隔离。
## 联调前置
@@ -41,7 +41,7 @@ source_records按paper_id关联;作者兼容[family,given,suffix]数组与字
- 用户已确认新增 FOUNDRY_PROJECTS;无需添加 FOUNDRY_RESEARCH_DATABASE。PostgreSQL 后端连接仅放服务器受保护的 research.env,不放 Gitea Variables 或前端配置。
- 本地忽略文件 PAPER_API_ORIGIN 现指向 127.0.0.1:17325/projects/thesisly/research/,通过 SSH 连接 ECS 临时 Core。隧道和临时服务停止时应显式报错,不退回样本。
- 前端仓库为Zayden-Jung/Thesisly,不配置CI/CD;本地build按用户最新要求暂不执行。
- 正式 Core 已仅重载项目配置,Thesisly 匿名 auth/me 当前返回401,原有项目保留;论文 API 新代码仍未发布正式后端。Google真实首次注册登录和用户侧刷新/新标签保持、退出已确认;Slack、邮件投递和验证仍待实际验收。302与fixture测试不代表这些未验收链路成功。
- 正式 Core 已仅重载项目配置,Thesisly 匿名 auth/me 当前返回401,原有项目保留;论文 API 新代码仍未发布正式后端。Google/Slack真实授权和用户侧刷新、新标签保持、退出均已确认;邮件实际投递和验证未实测。302与fixture测试不代表邮件真实投递成功。
## 查询失败后的恢复
+4 -1
View File
@@ -1 +1,4 @@
export default function About() { return <main id="main" className="page-shell about-page"><div className="section-kicker">ABOUT THE INDEX</div><h1>让研究,<br />更容易被阅读。</h1><p>这里将论文标题、作者、摘要与原始出处放在同一个阅读空间里。</p><h2>当前数据范围</h2><p>未配置论文 HTTP API 时,页面使用 2026-11-06 从既有 Paper Atlas SQLite 数据库导出的前 20 条论文记录。它们是真实的历史记录,并不代表热门论文、最新成果或完整数据库。搜索、领域与分页均只针对这份样本。</p><h2>三种阅读方式</h2><p>Vignelli 以无衬线字体、网格和细分隔线组织内容;Editorial 以柔和的衬线阅读节奏呈现;Tufte 以低装饰和清楚的证据信息为主。可以用顶部的主题菜单比较。</p><h2>账户与共享后端</h2><p>身份认证通过已有 Foundry Core 完成。本站的项目回调尚需在后端注册后,才能完成 Google、Slack 与邮件验证登录。已有会话由服务端 Cookie 维持。</p></main>; }
export default function About() {
const live = Boolean(process.env.PAPER_API_ORIGIN);
return <main id="main" className="page-shell about-page"><div className="section-kicker">ABOUT THE INDEX</div><h1>让研究,<br />更容易被阅读。</h1><p>这里将论文标题、作者、摘要与原始出处放在同一个阅读空间里。</p><h2>当前数据范围</h2><p>{live ? "本站从完整论文索引读取原始标题、作者、摘要与出处。默认按收录顺序列出,发表日期由原始来源提供。" : "当前展示 2026-11-06 导出的 20 条历史样本记录。搜索、领域与分页只覆盖这份样本。"}</p><h2>三种阅读方式</h2><p>Vignelli 以无衬线字体、网格和细分隔线组织内容;Editorial 以柔和的衬线阅读节奏呈现;Tufte 以低装饰和清楚的证据信息为主。可以用顶部的主题菜单比较。</p><h2>账户与登录</h2><p>论文可以直接浏览,无需账户。可使用 Google 或 Slack 登录;同一浏览器刷新页面或打开新标签时会保持登录状态。退出时结束当前会话。</p></main>;
}