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——不是自動升級。它是定時守護審查,明確不是自主生產控制。
界面截圖