UniExp HK 实验港
- Next.js
- TypeScript
- Tailwind CSS
- Self-hosted Supabase
- Cloudflare
- Gemini
- Agent Harness
- Policy Gate
- Quality Workbench
一个帮香港研究者发布实验、招募参与者的线上三语平台。我独立完成产品、运营流程与受控 AI 审查层;AI 只在证据核对与人工批准后协助提出更新。
一眼看懂
角色 独立创办人与开发者 — 产品设计、前端、后端、上线、日常维护
问题
香港高校的实验招募散落在群组、表单、集合页、海报与双语来源页里;研究者难以招募足够样本,参与者与营运者也需要可核验证据,才能安全发布。
解法
我把产品做成两条清楚流程:研究者发布并管理研究,参与者浏览、报名与评价;后台加入证据门控的 AI 审查层,让自动化只提出候选,不直接改写生产真相。
成果
已上线三语平台 · 115 个 merged PR(最新 #120)· 独立设计、上线与运营
我的工作
- 研究发布 + 时段排期 + 报名审核(研究者端)
- 浏览 / 筛选 / 报名 / 评价(参与者端)
- 全站三语 i18n(EN / 繁中 / 简中)
- External Study Ops Agent,分层自主阶梯:L1 shadow → L1.5 cross-check → L1.6 Codex replacement check → L2 proposal queue → L3 guarded write(每队列每轮最多写 1 条 pending)
- 多队列 agent:单一对外入口,内部 supervisor + 四个 worker(new_study_lead / published_change / source_candidate / seed_candidate),各自只能写一张指定的 Admin pending 表
- 定时守护审查:每日 VPS cron(22:05 UTC)跑 L1 shadow、输出只读证据、不写生产——明确不是自主生产控制
- Production Explore truth source、quality workbench、section-level evidence、signup freshness、visual/OCR/QR review 与 feedback-audit ledger
技术证据
- Agent 安全模型:每条 queue proposal 过 deterministic evaluateQueueProposalPolicy() gate 盖 writeEligible 章;L1 只写 noProductionWrite=true 本地报告;自主权止于 Admin pending queue——experiments、source registry、approve/reject 仍由人工审核
- Truth discipline:production Explore(已发布实验)是唯一真相源;legacy pipeline、source/seed discovery 与 agent shadow report 都只是候选生成器,不能反向覆盖 truth
- 评测与 readiness gate:daily-cron 证据区分 real_cron 与手动触发;L3 readiness 要求 30 天内 reviewed proposal ≥10、acceptance ≥80%、stale/bad-source false positive 为 0、且无 production-write incident
- Failure→gate:曾有 proposal 把 HKD 80 baseline 当成总报酬,修正后成为永久的 compensation-component policy check,把该类降级为 report-only
- Reasoner 可靠性:Gemini reasoner 只允许返回结构化 JSON;坏输出或失败时回退到 deterministic reasoner 继续只读运行——模型参与不等于执行许可
- 自托管 Supabase(auth + Postgres + 维护)+ Cloudflare 边缘加速与防滥用;独立持续维护,累计 115 个 merged PR(最新 #120,Cloudflare deploy Node patch)
从 pipeline 到 harness
外部实验采集不是一次性冷启动——招募页会过期、表单会关、一个 aggregate page 挂多个实验、旧 pipeline 会误判来源或重复。直接让 agent 写生产库风险太高,于是 agent 被包进一个 harness:policy gate、truth source、quality workbench 与 Admin review 决定什么才真正可执行。
自主阶梯
自主权是分层的,不是全有或全无:L1 shadow(只写本地报告,noProductionWrite=true)→ L1.5 cross-check → L1.6 Codex replacement check → L2 proposal queue → L3 guarded write,每队列每轮最多一条 pending。每一级都有 gate,agent 的权限止于 Admin pending queue——experiments、source registry、approve/reject 仍由人工审核。
多队列设计与 truth discipline
对外只有一个入口,内部由 supervisor 把工作拆给四个 worker——new_study_lead、published_change、source_candidate、seed_candidate——各自只能写一张指定的 Admin pending 表。一个确定性的 evaluateQueueProposalPolicy() gate 标记写入资格,任何 worker 都不能自行认证候选可写。
Production Explore——已发布的实验——是唯一真相源。legacy pipeline、source/seed discovery 与 agent shadow report 都只是候选生成器,永远不能覆盖 truth。
一个变成 gate 的失败
曾有一条 proposal 把 HKD 80 baseline 当成总报酬,忽略了第二笔 optional 的 HKD 80 follow-up。修正不是一次性的——policy gate 增加了 compensation-component 语义检查,把该类整体降级为 report-only。一个失败变成了可复用的 gate,而这正是 harness 的意义。
每日守护审查
一个 VPS cron 每日 UTC 22:05 跑 L1 shadow,输出只读证据、不写生产。另一个只读 checker 区分真实 cron 与手动运行;连续三天通过、零 policy violation 的 real-cron 证据,是进入 L2 readiness review 的 gate——不是自动升级。它是定时守护审查,明确不是自主生产控制。
界面截图