diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f264e01..9671529 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [main] + branches: [main, develop] pull_request: - branches: [main] + branches: [main, develop] jobs: lint: diff --git a/CHANGELOG.md b/CHANGELOG.md index de0c781..6b4983a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## v0.8.1 — 2026-02-24 +### ✨ New +- **Telegram group link in info banner** — Clickable TG icon + group invite link with i18n support (#16) +- **DEVOPLOG.md** — R&D lifecycle tracking for staging/production changes (#20) + +### 🔧 Fixed +- **TG icon rendering** — Replace emoji with proper SVG icon, make TG group link clickable (#17) +- **Subtitle Twitter links** — @mentions in subtitle now link to Twitter profiles (#18) +- **ClawHub metadata alignment** — SKILL.md credentials declared, TESTING.md HttpOnly note, README/SKILL.md consistency (#25) + +### 🏗️ Infrastructure +- **CI pipeline** — GitHub Actions for lint + security audit on PRs (#2, #9) +- **PR template & CONTRIBUTING.md** — Standardized contribution workflow (#3) +- **Health endpoint** — `GET /api/health` for CI readiness checks (#4) +- **Feedback webhook config** — `FEEDBACK_LARK_WEBHOOK` in .env.example (#5) +- **Dev process docs** — Full PROCESS.md workflow (#7) +- **Security hardening** — SSRF protection, OAuth state validation, API key handling (#1) + ## v0.7.0 — 2026-02-22 ### ✨ New - **Dark/Light mode toggle** — Sun/moon toggle in header, persists in localStorage diff --git a/CHANGELOG.zh.md b/CHANGELOG.zh.md index 005e992..01ee4ab 100644 --- a/CHANGELOG.zh.md +++ b/CHANGELOG.zh.md @@ -1,5 +1,31 @@ # 更新日志 +## v0.8.1 — 2026-02-24 +### ✨ 新增 +- **Telegram 群组链接** — Info banner 增加可点击 TG 图标 + 群邀请链接,支持中英文 (#16) +- **DEVOPLOG.md** — 研发全生命周期追踪(开发/staging/production)(#20) + +### 🔧 修复 +- **TG 图标渲染** — emoji 替换为 SVG 图标,群链接可点击 (#17) +- **副标题 Twitter 链接** — @提及 现在链接到 Twitter 个人页 (#18) +- **ClawHub 元数据对齐** — SKILL.md 凭证声明、TESTING.md HttpOnly 说明、README/SKILL.md 一致性 (#25) + +### 🏗️ 基础设施 +- **CI 流水线** — GitHub Actions lint + 安全审计 (#2, #9) +- **PR 模板 & 贡献指南** — 标准化贡献流程 (#3) +- **健康检查** — `GET /api/health` 端点 (#4) +- **反馈 Webhook 配置** — .env.example 增加 `FEEDBACK_LARK_WEBHOOK` (#5) +- **开发流程文档** — 完整 PROCESS.md 工作流 (#7) +- **安全加固** — SSRF 防护、OAuth state 校验、API key 处理 (#1) + +## v0.7.0 — 2026-02-22 +### ✨ 新增 +- **深色/浅色模式切换** — Header 日/月图标,localStorage 持久化 +- **README 视频演示** — demo.mp4 作为 GitHub Release 资源嵌入 + +### 🔧 修复 +- README 视频在 GitHub 上自动播放(Release 资源 URL 替代相对路径) + ## v0.6.0 — 2026-02-22 ### ✨ 新增 - **Source 软删除** — 删除 Source 标记 `is_deleted` 而非硬删,避免 Pack 僵尸复活 diff --git a/DEVOPLOG.md b/DEVOPLOG.md new file mode 100644 index 0000000..59f9ea6 --- /dev/null +++ b/DEVOPLOG.md @@ -0,0 +1,27 @@ +# DevOp Log + +Development and operations log for ClawFeed. Records the full R&D lifecycle — feature development, staging validation, production release, and infrastructure changes. + +## 2026-02-24 — v0.8.1 (TG hotfix + subtitle links) + +**Status:** Staging verified ✅ | Production: pending merge + +**Changes:** +- #16 — TG group link button + info banner (i18n) +- #17 — Replace airplane emoji with Telegram SVG icon + clickable TG group link +- #18 — Subtitle @mentions link to Twitter profiles (Jessie@ZylosAI, Lisa@OpenClaw) + +**Docs/PRD (no runtime impact):** +- #8 — ClawMark Digest embed PRD +- #9 — CI trigger fix for develop branch +- #10 — Source personalization PRD +- #11 — Feedback system PRD (retroactive) + +**Staging validation:** +- Validated by: Kevin +- Date: 2026-02-24 +- Result: OK + +**Infrastructure:** +- Staging/production environment isolation implemented (independent directories + databases) +- Staging auto-deploy configured (develop branch, 60s polling) diff --git a/SKILL.md b/SKILL.md index 8386558..be7cc65 100644 --- a/SKILL.md +++ b/SKILL.md @@ -2,6 +2,19 @@ AI-powered news digest tool. Automatically generates structured summaries (4H/daily/weekly/monthly) from Twitter and RSS feeds. +## Credentials & Dependencies + +ClawFeed runs in **read-only mode** with zero credentials — browse digests, view feeds, switch languages. Authentication features (bookmarks, sources, packs) require additional credentials. + +| Credential | Purpose | Required | +|-----------|---------|----------| +| `GOOGLE_CLIENT_ID` | Google OAuth login | For auth features | +| `GOOGLE_CLIENT_SECRET` | Google OAuth login | For auth features | +| `SESSION_SECRET` | Session cookie encryption | For auth features | +| `API_KEY` | Digest creation endpoint protection | For write API | + +**Runtime dependency:** SQLite via `better-sqlite3` (native addon, bundled). No external database server required. + ## Setup ```bash @@ -20,12 +33,15 @@ npm start Configure in `.env` file: -| Variable | Description | Default | -|----------|-------------|---------| -| `DIGEST_PORT` | Server port | 8767 | -| `GOOGLE_CLIENT_ID` | OAuth client ID (optional) | - | -| `GOOGLE_CLIENT_SECRET` | OAuth secret (optional) | - | -| `SESSION_SECRET` | Session encryption key | - | +| Variable | Description | Required | Default | +|----------|-------------|----------|---------| +| `DIGEST_PORT` | Server port | No | 8767 | +| `GOOGLE_CLIENT_ID` | Google OAuth client ID | For auth | - | +| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | For auth | - | +| `SESSION_SECRET` | Session cookie encryption key | For auth | - | +| `API_KEY` | Digest creation API key | For write API | - | +| `AI_DIGEST_DB` | SQLite database path | No | `data/digest.db` | +| `ALLOWED_ORIGINS` | CORS allowed origins | No | localhost | ## API Server diff --git a/docs/PROCESS.md b/docs/PROCESS.md index 318ea2c..d291626 100644 --- a/docs/PROCESS.md +++ b/docs/PROCESS.md @@ -60,12 +60,40 @@ - 涉及 DB schema 变更必须写 migration 文件 - 开发完成后提 PR(目标分支:`develop`) -### 5. Code Review +### 5. Code Review(PR Review 流程) -- **Lisa review**(Codex 自动审查 + 手动检查) -- 检查项:代码质量、安全性、是否符合 PRD 设计 -- Kevin 有兴趣也可以看 -- Review 通过后 merge 到 `develop` +每个 PR 必须经过以下完整流程: + +``` +Proposer 提 PR → Lisa review + approve → Kevin review + │ + ┌─────────┴─────────┐ + │ │ + 有意见 → comment 无意见 → merge + │ + Proposer 修改 + │ + Lisa re-review + re-approve + │ + Kevin 最终 merge +``` + +**详细步骤:** + +1. **Proposer 提交 PR**(目标分支:`develop`) +2. **Lisa review**:Codex 自动审查 + 手动检查(代码质量、安全性、是否符合 PRD) +3. **Lisa approve** PR +4. **Kevin review**: + - 无意见 → 直接 merge + - 有意见 → 在 PR 里 comment +5. **Proposer 按 Kevin 评论修改**,push 新 commit +6. **Lisa re-review + re-approve**(Branch Protection 设置了 dismiss stale reviews,新 commit 会自动撤销之前的 approve) +7. **Kevin 确认修改,merge PR** + +**规则:** +- 每次 push 新 commit 后,Lisa 必须重新 review + approve +- Kevin 是唯一有 merge 权限的人 +- PRD 类 PR 和代码类 PR 遵循相同流程 ### 6. Staging 自测 diff --git a/docs/TESTING.md b/docs/TESTING.md index 61dbb42..424757f 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -209,11 +209,14 @@ bash test/setup.sh && bash test/e2e.sh; bash test/teardown.sh ### 切换用户 +> **仅限本地开发环境。** 以下方法用于在 localhost 上快速切换测试用户,不适用于 staging 或 production。 + 先运行 `bash test/setup.sh`,然后用浏览器开发者工具设置 cookie: ```javascript -// DevTools Console(需要先登录一次获取 non-HttpOnly cookie) -// 或者临时在 server.mjs 去掉 HttpOnly 标记 +// DevTools Console — 仅限 localhost 开发环境 +// 测试用户的 session cookie 由 setup.sh 直接写入 SQLite, +// 需要通过 DevTools Application 面板手动设置 cookie 值 document.cookie = 'session=test-sess-alice; path=/; max-age=86400'; location.reload(); ``` diff --git a/docs/prd/clawmark-digest-embed.md b/docs/prd/clawmark-digest-embed.md new file mode 100644 index 0000000..dd60784 --- /dev/null +++ b/docs/prd/clawmark-digest-embed.md @@ -0,0 +1,83 @@ +# ClawMark 嵌入 ClawFeed PRD + +## 背景 + +ClawFeed 在 staging 环境测试时,测试人员发现 bug 需要手动截图、描述问题、发到群里。流程低效且容易丢失上下文(当前页面 URL、截图、操作路径等)。 + +ClawMark(kevinho/clawmark)是已开源的反馈/标注组件,提供 Fab 插件(浮动操作按钮)。将 ClawMark 嵌入 ClawFeed 应用,让测试人员可以直接在页面上提交 bug 报告,附带自动采集的上下文信息。 + +## 方案 + +### 设计 + +在 ClawFeed 所有页面嵌入 ClawMark Fab 插件(浮动按钮),点击后弹出反馈表单。 + +#### 用户交互流程 + +1. 用户在 ClawFeed 任意页面看到右下角浮动按钮 +2. 点击按钮 → 弹出反馈表单 +3. 填写:bug 描述 + 可选截图/标注 +4. 提交 → 反馈数据存入 ClawMark 后端 +5. 可选:提交后通知到 Lark 群(复用已有的 FEEDBACK_LARK_WEBHOOK) + +#### 技术实现 + +1. **ClawMark server 部署**:独立进程部署(Kevin 确认),域名由 Lisa 配置(如 clawmark.kevinhe.io)。使用 kevinho/clawmark 仓库自带的 Express + SQLite 后端。 +2. **前端嵌入**:在 ClawFeed 的 HTML 模板中引入 ClawMark SDK(`