OctoRill
OctoRill 把与 Ivan 相关的 GitHub 动态整理成适合持续阅读的工作区:发布更新、获星/关注动态、日报和 Inbox,发布内容还支持中文翻译和要点整理。README.md 同时指向 public docs-site、quick start、config、product 和 internal docs,说明它是产品化 Rust 服务 + React UI + 文档站,而不是一次性脚本。
- Rust web service
- React app
- shadcn/ui
- SQLite
- Playwright e2e
- Storybook component QA
- Web demo
- Dockerized dev
- Service ports
- PR label release
- Quality gates
- GitHub Actions scheduling
- Worktree bootstrap
- Release failure notification
- Project docs site
目录
技术栈
运行与交付
- CI 工作流
- ci.yml
- docs-pages.yml
- label-gate.yml
- notify-release-failure.yml
- release.yml
- review-policy.yml
- 能力标记
- bun_lock
- cargo_toml
- dockerfile
- github_actions
- package_json
依赖与工具
- package.json
- 开发依赖
- @commitlint/cli
- @commitlint/config-conventional
- commitlint-plugin-function-rules
- lefthook
- 项目脚本
- hooks:install
- prepare
- test:worktree-bootstrap
配置与质量
- 配置文件
- .dockerignore
- .env.example
- .gitignore
- Cargo.toml
- DESIGN.json
- lefthook.yml
- package.json
其他信息
- Cargo
- Deps main
- aes-gcm
- anyhow
- async-stream
- axum
{
"cargo": {
"deps_main": [
"aes-gcm",
"anyhow",
"async-stream",
"axum",
"base64",
"chrono",
"chrono-tz",
"dotenvy",
"iana-time-zone",
"oauth2",
"rand",
"reqwest",
"serde",
"serde_json",
"sha2",
"sqlx",
"thiserror",
"time",
"tokio",
"tokio-stream"
]
},
"ci_workflows": [
"ci.yml",
"docs-pages.yml",
"label-gate.yml",
"notify-release-failure.yml",
"release.yml",
"review-policy.yml"
],
"configs_root": [
".dockerignore",
".env.example",
".gitignore",
"Cargo.toml",
"DESIGN.json",
"lefthook.yml",
"package.json"
],
"markers_present": [
"bun_lock",
"cargo_toml",
"dockerfile",
"github_actions",
"package_json"
],
"package_json": {
"deps_dev": [
"@commitlint/cli",
"@commitlint/config-conventional",
"commitlint-plugin-function-rules",
"lefthook"
],
"scripts": [
"hooks:install",
"prepare",
"test:worktree-bootstrap"
]
}
}Purpose
OctoRill 把与 Ivan 相关的 GitHub 动态整理成适合持续阅读的工作区:发布更新、获星/关注动态、日报和 Inbox,发布内容还支持中文翻译和要点整理。README.md 同时指向 public docs-site、quick start、config、product 和 internal docs,说明它是产品化 Rust 服务 + React UI + 文档站,而不是一次性脚本。
Taxonomy
- Tags: Rust web service, React app, shadcn/ui, SQLite, Playwright e2e, Storybook component QA, Web demo, Dockerized dev, Service ports, PR label release, Quality gates, GitHub Actions scheduling, Worktree bootstrap, Release failure notification, Project docs site
- Why / evidence: 这些 tags 来自 checked-out repo 和 catalog record。主要证据包括
README.md、Cargo.toml、Dockerfile、migrations/、docs/architecture.md、docs/product.md、docs-site/package.json、web/package.json。Topic token 的大小写以对应技术/工作流的官方写法为准;slug 只作为稳定 ID,不直接充当项目标题。
Repository map
src/是 Axum/SQLx 后端,Cargo.toml包含 GitHub/OAuth、SQLite migration、chrono-tz、reqwest 等服务依赖。web/是 Vite/React/shadcn/ui SPA,web/components.json记录组件层 aliases,web/.storybook/main.ts提供 Storybook component QA。web/src/demo/是与正式 App 共用页面、路由和 API 调用面的 mock-only runtime;其中 scene registry、MSW/SSE transport、in-memory simulated writes 与 Inspector 共同组成页面级演示和验收 surface。docs-site/是 Rspress public docs,.github/workflows/docs-pages.yml发布文档站。migrations/是 SQLite schema;Dockerfile把 web build 与 Rust service 打进 deployable artifact。
Runtime and delivery
根 package.json 负责 hooks 和 worktree bootstrap smoke。Web 有 e2e、Storybook、preview、demo build 和 embedded-version tests;后端由 cargo 构建。web 以独立 build:demo 产物发布 /demo/,而 docs Pages assembly 保持 docs-site 根路径不变,并提供 /demo/** 的静态深链恢复。Dockerfile 使用 Bun stage 构建前端,再在 Rust stage 编译服务,说明 Dockerized dev/delivery 是真实交付路径。它也是当前 playbook 中最典型的轻量 Worktree bootstrap 样本:repo-local hook 安装、post-checkout 首次触发、scripts/worktree-sync.paths 驱动的 copy-missing local resources、odd Git layout 回退与 CI smoke 都已经被写成显式 contract。
Architecture notes
系统核心是“GitHub data ingestion + SQLite state + embedded React workspace”。OAuth 和 GitHub API 负责外部数据,SQLite 保留用户/配置/聚合状态,React UI 提供持续阅读。shadcn/ui 是组件组合层,不应覆盖 Rust 服务、docs-site 和 release workflow 的独立边界。
Web App 有明确的双运行时合同:普通构建走真实 AuthBootstrap 与后端 API;Demo 构建在 React 渲染前识别场景、清理 warm cache 并启动 MSW。两种模式复用同一 App、正式 route suffix 与 API 调用面,但 demo worker 未成功启动时会阻止 App 渲染,避免真实认证或 /api/** 泄漏。demo=<scene-id> 选择可复现场景,d_* 保存可分享的 persona、网络和数据状态;Inspector 面板把 scene、权限、网络、数据、模拟动作与 share URL 组织成结构化控制面,而不把 raw JSON 当作主操作入口。
证据锚点:README.md。
Workflow and quality gates
.github/quality-gates.json、label-gate.yml、review-policy.yml、ci.yml、release.yml、notify-release-failure.yml 共同定义 release/readiness contract。test:worktree-bootstrap 是特别值得保留的 gate:它验证新 worktree 能否靠脚本恢复运行,而不是依赖维护者记忆。
.github/workflows/ci.yml、label-gate.yml 和 review-policy.yml 都监听 edited,并各自用可取消的 per-PR concurrency group。metadata 重验必须与普通 candidate 分组,避免标题或 base 变更取消同一 SHA 的 CI、label 或 review gate;这个仓库是 GitHub Actions scheduling 的首个验证样本。
页面/流程最终证据由 /demo/ 产出,Storybook 只承担可复用 Inspector 片段和组件状态 QA。web/e2e/demo-inspector.spec.ts 覆盖 worker 启动、模拟写入、URL 状态保真、宽屏 pinned rail / floating overlay / mobile drawer、收起恢复和不触发整页 reload 等交互约束;Pages workflow 还构建 demo、Storybook、docs 并验证组装结果。
Reusable decisions
- GitHub 动态产品需要 docs-site + internal docs 同步,否则配置和 product behavior 会漂移。
- worktree bootstrap smoke 是多 Agent/多 worktree 项目的高价值门禁。
- Docker artifact 同时包含 web/dist 和 Rust binary,部署验证必须覆盖二者。
- 需要页面级视觉证据时,优先为正式 Web App 建独立 mock-only build,而不是把组件 Story 或临时 fetch patch 提升为最终演示面。Demo runtime 必须在认证和数据请求前准备好 network interception,写操作只更新内存模型并记录可见的 simulated mutation。
- 调试控制面板属于演示 contract,不是任意覆盖层:宽视口在不挤压正式最大版心时可固定为全高左 rail,也必须允许收起为 bubble 回看正常布局;普通桌面保持可避让的浮层,移动端采用 bubble 到 drawer。面板布局只保存在本地,场景和关键数据状态才写入分享 URL。
- 如果仓库只需要把 shared hooks 与少量本地文件同步到 linked worktree,
octo-rill这种轻量 bootstrap 模式比“checkout 自动做一切”更稳:manifest 小、默认 no-overwrite、历史 revision / stale hook binary 都能安全退化。
Risks and open questions
- GitHub API/OAuth scope 变化会影响核心数据流。
- Storybook 没有 accessibility addon 证据时应归为 component QA,不要过度命名为 accessibility。
- Release queue 与 label intent 是复杂基础设施,简化 workflow 前需要看
quality-gates.json。 - Demo 的 service worker、404 深链恢复和 app router basepath 必须作为一组发布合同验证;任一环缺失都会让公开分享链接落到 docs 404 或意外请求真实后端。
Evidence index
README.mdCargo.tomlDockerfilemigrations/docs/architecture.mddocs/product.mddocs-site/package.jsonweb/package.jsonweb/components.jsonweb/.storybook/main.tsweb/src/main.tsxweb/src/App.tsxweb/src/demo/runtime.tsxweb/src/demo/DemoInspector.tsxweb/src/demo/transport.tsweb/e2e/demo-inspector.spec.tsweb/vite.config.ts.github/scripts/assemble-pages-site.sh.github/workflows/docs-pages.ymldocs/specs/k8d4m-web-demo-inspector/SPEC.md.github/quality-gates.json.github/workflows/label-gate.yml.github/workflows/release.yml.github/workflows/notify-release-failure.yml
相关内容
Dockerized dev
主题Dockerized dev 标记 Dockerfile、Compose 或 container build 是本地开发、集成验证或部署交付的一等路径。它不表示“仓库里偶然有 Dockerfile”,而是 Docker 影响运行环境、数据卷、端口、build args、嵌入式前端产物或 release artifact。
GitHub Actions scheduling
主题GitHub Actions scheduling 表示仓库把 workflow 触发事件、并发 namespace、cancel-in-progress 和 required check 可见性组织成可审计的运行调度合同。目标不是让每个事件只跑一次,而是让当前 PR head 获得正确且可观察的 gate,同时不让无关 PR、main、deploy 或手工任务被同一个并发键误取消。
Playwright e2e
主题Playwright e2e 指仓库把真实浏览器里的关键用户流程当成正式质量门禁,而不是“顺手写了几条页面脚本”。它强调的是产品行为验证:路由、认证、交互链路、浏览器 API、嵌入式控制台或多 runtime 页面组合,必须在接近真实使用路径的浏览器环境里被证明可用(projects/blog-26.md、projects/proxy-broker.md、projects/octo-rill.
PR label release
主题PR label release 是逐 PR 的产品发布协议:PR labels 只提供经过 gate 验证的发布操作与发布阶段;最高的合格 final vX.Y.Z Git release tag 是唯一数字版本基线,VERSION 只锁定 trusted preparation 已决定的精确产品版本。label 不能计算、覆盖或为版本提供 fallback。
Project docs site
主题Project docs site 指项目在工程仓库内维护一个独立的 web 文档站点,通常以 docs-site/、docs-pages.yml 或等价 publish workflow、docs:build / build-docs-site、DOCS_PORT 等入口体现。
Quality gates
主题Quality gates 表示仓库把“什么叫可以合并、什么叫可以发布”写成了显式、可审计的契约,并通过本地脚本、CI workflows、review/signature policy、GitHub required checks 或同类机制把它执行出来。它关注的是 gate contract,而不是某一门具体技术。 这个 Topic 用来回答“仓库怎样防止低质量或不完整的改动穿过默认分支”。
React app
主题React app 标记 React 是主要用户界面、管理台、控制台或嵌入式操作面 runtime。这里关心的是 route、component tree、client state、表单流、dashboard 交互和前端构建后的真实运行边界,而不是“项目依赖里有 React”。 这个 Topic 用来回答“用户实际操作的是不是一个 React runtime,以及它在系统里承担什么职责”。
Release failure notification
主题Release failure notification 指一个仓库为所有“预期成功但最终以 failure 结束”的交付 workflow 建立显式、可审查的告警路径。范围包括 release、deploy、CI、Docs Pages 和 required gate,但必须由 checked-in allowlist 声明;成功、skipped、cancelled 和通知 workflow 自身不属于通知条件。
Rust web service
主题Rust web service 表示 Rust binary 承担长期运行的服务职责:提供 HTTP API、proxy、SSE、docs/data service、admin backend 或 ops daemon,并对外暴露稳定的网络、存储和部署边界。这里的关键词不是“Rust”,而是“服务进程”。 这个 Topic 不只是“语言是 Rust”。
Service ports
主题Service ports 表示端口号、bind 地址、dev/prod 暴露方式和多组件端口分工本身就是仓库的稳定 contract。它不是“服务都会有端口”这种空泛事实,而是说端口设计会直接影响本地预览、反向代理、权限边界、自动化脚本和故障排查。 这个 Topic 关注的是端口作为系统边界的那一面。
shadcn/ui
主题shadcn/ui 表示项目采用官方 shadcn/ui 风格的 checked-in component layer:components.json、@/components/ui aliases、Radix primitives、Tailwind utilities、class-variance-authority、tailwind-merge、clsx 和 Lucide icons 共同构成组件约定。
SQLite
主题SQLite 表示项目把 SQLite 作为默认持久层、ledger、audit log、content/settings store 或低运维 embedded database,并围绕它建立路径、schema、迁移、volume、备份和运行时 ownership 约定。它不是“依赖树里有 sqlite”这么宽,而是数据库文件本身已经成为系统 contract 的一部分。
Storybook component QA
主题Storybook component QA 表示仓库把 Storybook 当作组件级文档、状态枚举、视觉检查或 interaction smoke 的稳定入口。它不等同于 Storybook accessibility:只有项目明确引入 a11y addon 或等价 Axe sweep 时,才同时打 accessibility Topic。这个拆分用于避免“只要有 Storybook 就叫 a11y”的误判。
Web demo
主题Web demo 表示仓库刻意提供一个可直接给 owner、评审者或潜在用户体验的 Web 演示面,而且这个演示面复用正式产品前端与正式路由,而不是单独做一套只用于截图的 demo 页面。它允许用 mock backend、simulation device、read-only seed data 或等价安全输入来稳定复现产品行为,但默认不要求接入真实生产登录、真实后端写路径或真实硬件危险写操作。
Worktree bootstrap
主题Worktree bootstrap 表示仓库把 linked worktree 的“首次进入可开发状态”当成正式 contract 来维护,而不是依赖维护者记忆、散落且无统一入口的手工 checklist,或假定只有主工作区才值得被照顾。