Skip to content

Releases: tingyulu/MyR2D2

v0.7.3 — 開工與收工都先報時間,時區驗過才印 / Time line on kickoff and wrap-up, timezone verified before printing

Choose a tag to compare

@tingyulu tingyulu released this 01 Sep 09:36

繁中

從這版起,new-mission 開場的第一行、save-all 的頭尾兩行,都會固定帶上 ⏰ 日期(週幾)時分 IANA 時區。時區不可省——人和機器不在同一個時區時,一個沒有時區的時間讀不出來是哪裡的幾點。save-all 結尾那行還會附耗時,由 shell 從起點檔算,不靠模型心算。

這版真正的重點不在規則,在「取不到就說取不到」。

第一版寫好後送了跨模型二審,被指出一件事:為了擋「時區印出一個看起來合格卻是錯的名字」,我加了一條備援來源去讀另一個設定檔——而那個檔跟系統實際採用的時區不一致時,會印出一個更像真的假名字。為了修假值而加的備援,本身就是假值來源。

改法是不再猜:切出來的名字拿回系統的時區資料庫核對,核不上就退成縮寫並明白標上「非 IANA 名稱」。同一行順帶擋掉多層符號連結的中繼路徑、指向非時區檔的連結,以及 $TZ 裝著舊式 POSIX 字串(PST8PDT:Asia/Taipei)的情況。起點檔也從可預測的暫存路徑改成 mktemp,避免同機其他使用者預擺符號連結、或兩個 session 同秒互相蓋掉。

還有一條沒有修、只是講清楚:「結尾那行確實是剛剛跑出來的」無法機械自證。第一版曾想用頭尾時間差當證明,但同一分鐘收工差值本來就是零,而差值同樣可以用寫的。與其留一個假的防呆,不如寫明這條靠的是紀律。

零依賴不變:指令是 POSIX shell,沒有 shell 的環境(網頁版)有明講的文字降級路徑,prompts/ 的免安裝簡版也同步更新了。

⚠️ 誠實註記:本版的跨模型二審只拿到單邊回覆,另一個後端兩次都是服務端 503,不是雙邊對照。

English

Starting with this release, the first line of a new-mission kickoff and both ends of a save-all run carry ⏰ date (weekday) time IANA-timezone. The timezone is never optional — when the person and the machine sit in different zones, a bare clock time doesn't say whose clock it is. The closing line of save-all also reports elapsed time, computed by the shell from a start file rather than by the model's arithmetic.

The real story here isn't the rule. It's saying "I couldn't get it" instead of guessing.

The first version went out for a cross-model review, which caught this: to stop the timezone from printing a well-formed but wrong name, I had added a fallback that read a second config file — and when that file disagrees with what the system actually uses, it prints an even more convincing wrong name. A fallback added to fix fabricated values was itself a source of fabricated values.

The fix stops guessing: the extracted name is checked against the system's timezone database, and anything that fails the check degrades to the abbreviation, explicitly labelled as not an IANA name. The same line also catches intermediate paths from multi-level symlinks, links pointing at non-timezone files, and $TZ holding a legacy POSIX string. The start file moved from a predictable temp path to mktemp, so another user on the machine can't pre-place a symlink and two sessions starting in the same second can't clobber each other.

One thing was left unfixed and simply stated plainly: "this line really was generated just now" cannot prove itself mechanically. The first draft tried to use the head-to-tail difference as evidence, but finishing within the same minute makes that difference zero anyway — and the difference can just as easily be typed. Better to document that the rule rests on discipline than to ship a guard that doesn't guard.

Zero dependencies as always: the snippets are POSIX shell, environments without a shell (web chat) get an explicit text-only fallback, and the no-install lite prompts under prompts/ were updated in step.

⚠️ Honest note: the cross-model review for this release came back from one backend only; the other returned server-side 503s on both attempts, so this was not a two-sided comparison.

v0.7.2 — new-mission 行為實測五修+速查小抄 / Behavior-tested five fixes + cheatsheet

Choose a tag to compare

@tingyulu tingyulu released this 30 Aug 06:39

繁中

沒有新 skill,但 new-mission 被真實使用磨了一整輪。 一場 dry run+一場真任務的行為實測,抓出 11 個發現、修掉 5 個設計缺陷:

  • 開場分流:空手觸發不再無目標長考——第一則訊息直接問「1=一句話描述任務 2=從待辦挑」,不預先掃環境;帶任務觸發直接進查證(含範圍盒:最多一輪、關鍵詞索引、不貼全文)
  • 速答優化:五題盡量帶編號候選(回數字即可);回「跳過/都可以」=採預設值並寫進計畫【假設】格
  • 確認編號化:計畫結尾固定「1=開始執行 2=要改 3=先擱置」,回 1 即為明確的「做」
  • 報告必附 prompt:收尾報告【計畫】格必附優化 prompt 全文——報告因此能當下次重跑的起點;比例原則明文排除 prompt(永不壓行)
  • 落地優先於蒸發:計畫沒指定落點時,有檔案系統就預設落檔 <工作目錄>/mission-reports/;「對話交付+明說未落檔」收窄為純聊天環境(lite 簡版)專用

另新增 docs/cheatsheet.md+4:5 圖卡:12 支 skill 觸發詞速查小抄。prompts/ 簡版中英同步。

English

No new skills — instead, new-mission got a full round of behavior testing in real use. One dry run plus one real task surfaced 11 findings and fixed 5 design flaws:

  • Opening triage: a bare trigger no longer wanders — the first message simply asks "1 = describe the mission, 2 = pick from your backlog", with zero pre-scanning; a trigger that carries the task goes straight to scoped research (one pass, keyword-indexed, conclusions only)
  • Fast answers: questions ship with numbered candidates (reply with a digit); "skip" takes a sensible default and records it in the plan's Assumptions cell
  • Numbered confirmation: every plan ends with "1 = go, 2 = change, 3 = park it" — replying 1 counts as the explicit go
  • Reports carry the prompt: the wrap-up report's Plan cell now includes the full reusable task prompt, so the report doubles as next time's starting point; the proportionality rule explicitly never compresses it
  • Landing beats evaporating: when no location was approved, environments with a filesystem (any environment that can install this skill) default to <cwd>/mission-reports/; chat-delivery-with-disclosure is now reserved for chat-only environments (the lite prompts)

Also new: docs/cheatsheet.md + a 4:5 image card — a one-page trigger-word cheat sheet for all 12 skills. Lite prompts (zh/en) updated in sync.

v0.7.1 — new-mission 收尾報告|wrap-up report

Choose a tag to compare

@tingyulu tingyulu released this 28 Aug 23:37

繁中

new-mission 補上收尾那一半:任務執行結束(做完、中止、失敗都算)交一份對照計畫的收尾報告——【計畫】【執行過程】【成果】【誠實帳】【落點】五格,明講什麼做了、什麼沒做、什麼沒驗、什麼是猜的。

  • 落點先核可:報告放哪,在計畫階段的【產出】格就寫明;沒有落點就對話交付並明說「報告未落檔」(這不是降級,是誠實)。
  • 隨做隨記:執行中每完成一步當下記一行「做了什麼、證據在哪」,【執行過程】從記錄長出來、不靠回憶補。
  • 比例原則:小任務壓成五行,但五格不砍;判準沒過或有計畫外狀況就不得壓縮。
  • 與 damage-report 一頭一尾:五問是審查、報告是載體。五格自足,沒裝姊妹 skill 不降級。
  • 簡版 prompts/new-mission.md(免安裝、可貼 custom instructions)同步更新。

設計稿經跨模型二審後定稿(6 條採納、3 條附理由駁回)。

English

new-mission gets its second half: when execution ends (finished, aborted, or failed), it now closes with a wrap-up report checked against the plan — five cells: Plan / Process / Results / Honest ledger / Location — explicitly stating what was done, what wasn't, what went unverified, and what is inference.

  • Location pre-approved: where the report lands is written into the plan's Output cell up front; with no location, it's delivered in chat with an explicit "report not persisted" note (honesty, not degradation).
  • Log as you go: each completed step gets a one-line "what was done → where's the evidence" record; the Process cell grows from that log, not from memory.
  • Proportionality: small tasks compress to five lines but never drop cells; no compression when criteria failed or off-plan events occurred.
  • Pairs with damage-report: the five questions audit, the report carries. The five cells are self-sufficient — no degradation without the sibling skill.
  • The install-free lite prompt prompts/new-mission.en.md is updated in sync.

Design reviewed by a second AI model before landing (6 adoptions, 3 rejections with reasons).

v0.7.0 — new-mission + ai-search(12 支)

Choose a tag to compare

@tingyulu tingyulu released this 28 Aug 10:20

新增兩支 skill|Two new skills

new-mission(開工簡報):接到三步以上、或做錯不好回頭的任務,先跑簡報——自己查(不空問)、最多五題一次一題、給第一版計畫(不實作)、自審送審、等你明確說「做」才動手,並順手產出一份可重用的任務 prompt。與 damage-report 一頭一尾:一個審計畫(開工前)、一個審結果(收工前)。純規則零依賴。

ai-search(帶引用的即時查證):問一句,回附來源連結、可自行複查的即時答案;查不到就說查不到,不拿舊知識硬填。單檔 POSIX shell,預設走 Codex CLI 內建 web_search(AI_SEARCH_CMD 可換,但換的後端也得會搜尋);狀態走 stdout 末行、退出碼只分真失敗;43 項回歸測試隨包出貨並由 CI 每次 push 於 ubuntu 實跑。

兩支各附免安裝簡版(prompts/,中英)——純聊天使用者貼上即用。發版前照慣例過兩輪跨模型二審(方案審+整包審),採納修正含:兩支姊妹的狀態末行契約措辭、ok 語意明示(=後端回非空輸出)、測試證據等級誠實化。


new-mission (kickoff brief): for any task that is three or more steps or hard to undo — look things up first, ask at most five questions one at a time, draft a plan without executing, self-review it, and wait for an explicit "go" before acting, minting a reusable task prompt along the way. Pairs head-to-tail with damage-report. Pure rules, zero dependencies.

ai-search (cited live verification): ask once, get a cited, checkable live answer; it says "not found" instead of filling from stale knowledge. Single-file POSIX shell over Codex CLI's built-in web_search (swappable via AI_SEARCH_CMD — the replacement must also search); status on stdout's final line, exit codes only mark real failures; 43 regression tests ship in the box and run in CI on every push.

Both ship no-install lite prompts (prompts/, zh/en) for chat-only users. Pre-release, the whole batch went through two rounds of cross-model review; adopted fixes include the status-line contract wording across both sibling scripts, an honest ok semantic (= backend returned non-empty output), and evidence-level corrections in the test plan.

v0.6.0 — review 自己的 repo:41 條 findings 的收斂 | Reviewing the repo itself

Choose a tag to compare

@tingyulu tingyulu released this 21 Aug 06:15

這版做了什麼(繁中)

前六版都在教 Claude「收尾要自檢、產出要送另一個模型審」。這一版把同一套標準掉頭對準 repo 自己:完整 review 一輪、收出 41 條 findings、一次收斂。

  • CI 上線:六道機械關卡(雙 YAML parser 各含陽性對照、skills-ref 官方 validator、公開內容守門 grep、雙語 README 行數對齊、5 shell × 41 項行為矩陣、收割器測試)隨每次 push 實跑。v0.1.1 那種「5 支無效 YAML 上線三天沒人發現」的事故,從此 push 當下就會被打紅。附帶收益:Linux(ubuntu-latest)實測正式補上
  • README 全改版:相容性矩陣前移(先看表再裝)+ ✅ 分級誠實化(安裝層實測與執行層推論分開標 ✅*);安裝段四分流路由;新段「這套東西怎麼開發的」——每版出貨前送另一個模型家族審,是查得到的流程不是口號。
  • 硬傷修齊:prompts 字數宣稱從 bytes 冒充改成真字元數(繁中完整版實為 781 字元——放得進 ChatGPT Free,結論反轉);harvest.py 補 encoding/缺欄位/壞時間戳防禦+ 8 條零依賴測試(含 LC_ALL=C);ai-review 行為矩陣自我隔離環境變數、補「真失敗必須中斷上層」負對照(40 → 41 項)。

驗證等級照舊誠實標:Windows 與免費方案帳號仍未實測。

What's in this release (English)

Six releases taught Claude to self-check and to send work to another model for review. This one turns the same standard on the repo itself: one full review pass, 41 findings, all converged.

  • CI is live: six mechanical gates (dual YAML parsers each with a positive control, the official skills-ref validator, a public-content gate grep, bilingual README line alignment, the 5-shell × 41-case behavior matrix, harvester tests) run on every push. The v0.1.1-class incident — five broken YAMLs shipped and unnoticed for three days — now turns red at push time. Bonus: Linux (ubuntu-latest) is now actually tested.
  • README overhaul: compatibility matrix moved before install (check the table first) with honest ✅ grading (tested install layer vs. rules-based inference marked ✅*); an install router; and a new section on how this pack gets built — every release is reviewed by a different model family before shipping, and that's verifiable, not marketing.
  • Hard-defect cleanup: prompt character counts were bytes masquerading as characters (the zh full version is really 781 chars — it fits ChatGPT Free after all); harvest.py gains encoding/missing-field/bad-timestamp defenses plus 8 zero-dependency tests (incl. LC_ALL=C); the ai-review matrix now isolates itself from ambient env vars and ships a negative control proving real failures do break the caller (40 → 41 cases).

Verification levels stay honest: Windows and free-tier accounts remain untested.

v0.5.5 — 有測試才算完整 Ship the tests

Choose a tag to compare

@tingyulu tingyulu released this 20 Aug 06:59

回歸測試隨 skill 出貨 🧪

三輪跨模型二審、兩次第三方獨立複驗,抓出的 21 個缺陷全部有對應的回歸測項 —— 但那份測試一直只活在開發機上,外面的人只能相信 README 上的文字。這版把它出貨。

skills/ai-review/tests/matrix.sh —— 40 項行為測試,九段:

  • 後端錯誤分類(額度/未登入/網路/政策/版本/空回覆)
  • 沒有後端不得中斷上層流程(含 set -e$(…) + wrapper 呼叫鏈)
  • 兩個退出碼開關(--strict--soft-fail)與它們的互斥
  • 可插拔後端(不存在/未登入/失敗)
  • 分類器不得把真失敗吞成「略過」(含 401 seconds 誤判的正反例)
  • 落檔安全:同秒不覆蓋、權限 600、不留殘檔、symlink 攻擊、自訂 rubric 路徑不進檔名、特殊檔名的 YAML、非 UTF-8 locale 下的長中文檔名
  • 失敗時看得到原因(stderr 與 stdout 兩路)

不燒任何額度(後端全用 stub 模擬)、不弄髒你的目錄(產出寫暫存區、跑完自動清掉)、全過回 exit 0 可直接進 CI:

sh <skill目錄>/tests/matrix.sh          # SH=bash 可指定用哪個 shell 跑受測腳本

裝好之後打這一行就能自己驗一次 —— 不必相信我寫的字。

Ship the tests 🧪

The 21 defects found across three cross-model review rounds all have regression cases — but the suite only ever lived on the author's machine, so everyone else had to trust the README. v0.5.5 ships it: 40 behaviour tests, no quota burned (stubbed backends), no files left behind (temp workspace, auto-cleaned), exit 0 when green so it drops straight into CI. Verified across sh/dash/bash/ksh/zsh.

更新 Update: npx skills update

v0.5.4 — 第三輪:修法又長出三個新缺陷 Round three: the fixes did it again

Choose a tag to compare

@tingyulu tingyulu released this 20 Aug 06:46

第三輪送審,抓到的仍然全是「上一輪修法帶出來的」🔁🔁

  1. 可預測的暫存檔名:上一輪為了「原子落檔」而用的 .ai-review.<pid>.tmp,別人可以先在共用落檔目錄放一個同名 symlink,寫入時就跟著它把別的檔案截斷。改用 mktemp 產生不可預測檔名並 chmod 600 —— 回歸測試直接放一個惡意 symlink,驗受害檔沒被寫穿。
  2. 兩個安靜的假成功{ …; cat X; printf '\n'; } > f 只要最後一個 printf 成功,整組就回 0。於是「送出殘缺的 prompt」和「存下被截斷的審閱結果」都會被判成成功。兩處都改成群組內 && 串接。
  3. 過寬比對復發:裸的 401(登入偵測與後端分類器各一份)會命中 session expires in 401 seconds,讓真失敗被判成「略過」並 exit 0。收窄成 http 401status 401401 unauthorized⚠️ 第一次修還修錯(改成 "401 " 仍會命中「401 seconds」),是回歸測試自己抓出來的。

契約也對齊了:dump_backend_output 只印尾 20 行(文件原本寫「都照印」),並警告該輸出可能含 secrets;落檔權限改 600。

驗證:5 種 shell × 41 項全過(新增 6 項:symlink 攻擊、落檔權限、401 誤判正反例…),真實 Codex 路徑重驗。

誠實註記:這輪只有 GPT 一腿,Gemini 的免費額度當日用盡(TerminalQuotaError,free tier 每日 20 次)。

Round three: the fixes did it again 🔁🔁

Every finding this round came from round two's fixes: a predictable temp filename that made "atomic save" symlink-attackable, two silent false successes ({ …; cat; printf; } > f — a trailing printf masks a mid-group failure), and a bare 401 match that turned real failures into "skipped, exit 0". The first attempt at narrowing that last one was itself wrong, and the regression suite caught it.

The takeaway after three rounds: a fix is a change, and it needs reviewing like any other change. 41 regression cases across 5 shells are now the receipt.

更新 Update: npx skills update

v0.5.3 — 第二輪二審:修法自己也會長出問題 Fixes create defects

Choose a tag to compare

@tingyulu tingyulu released this 20 Aug 06:24

再送一次二審,抓到的是「上一輪修法帶出來的風險」🔁

同一份工具(SKILL.md + 腳本)再送 GPT 與 Gemini 各一次。最值得記的一條:

上一輪的修法自己長出了新缺陷。 為了處理「token 過期卻仍回 exit 0」,登入偵測加了裸的 expiredsign in 比對 —— 但「已登入」的訊息本身就可能寫著 sign-in methodsession expires,於是正常登入會被誤判成沒登入、二審白白被略過。現在只收 token expiredplease sign in 這種明確片語。

其餘六項:

  • --strict--soft-fail 併用語意衝突(一個把「沒審到」變失敗、一個把失敗變沒事)→ 直接報錯
  • 自訂 rubric 是路徑時,路徑被塞進落檔檔名(帶著 /..)→ 內建三份保留原名、其餘記成 custom
  • 後端把錯誤寫到 stdout 後回非零:原本只看 stderr,畫面印「原始錯誤」卻沒東西 → 兩條輸出都納入分類並照印
  • -- 沒有真正停止解析選項 → 之後一律當來源檔
  • 落檔不是原子操作、且會跟隨既有 symlink → 暫存檔改建在目標目錄內mv
  • cut -c 在非 UTF-8 locale 下切的是 bytes,長中文檔名會被切出殘缺位元組 → 依 locale 分流

驗證:5 種 shell × 35 項行為矩陣全過(新增 7 項回歸,含 LC_ALL=C 下的長中文檔名落檔),真實 Codex 路徑重驗。

Fixes create defects — that's the argument for reviewing the fix 🔁

Round two on the same tool. The most instructive finding: last round's fix created a new risk. To handle "token expired but exit 0", the login check gained bare expired/sign in matching — but a successful login message can contain "sign-in method" or "session expires", so a working login would be misread as signed-out and the review silently skipped.

Six more: conflicting exit-code switches, a custom rubric path leaking / and .. into output filenames, backend errors on stdout being invisible on non-zero exit, -- not stopping option parsing, non-atomic saves that follow symlinks, and byte-truncated multibyte filenames under a non-UTF-8 locale. 35 cases across 5 shells.

更新 Update: npx skills update

v0.5.2 — 免費方案撞牆不連累你的流程 Quota walls stop breaking callers

Choose a tag to compare

@tingyulu tingyulu released this 20 Aug 06:13

--soft-fail:後端拒絕你,也不該炸掉你的流程 🚪

「沒有二審不得中斷你的流程」原本只對沒裝/沒登入成立。使用者一撞到額度或方案限制,拿到的是 exit 2 —— 在 set -e 的呼叫鏈裡照樣把上層中斷。

  • 新增 --soft-failfailed_* 也回 0,狀態字串仍照印在 stdout(資訊不會被抹掉)
  • 預設不變(skipped=0、failed=2):沒有後端是預期降級、不該吵;後端拒絕你是真的有事發生
  • 額度失敗的引導改寫成三種可能:額度用完/你的方案不含後端預設模型(用 --model 指定)/這個後端在你的帳號跑不動(換 AI_REVIEW_CMD

模型刻意不釘死,措辭也收緊了

釘死模型會過期,也猜不到你的方案有哪些模型 —— 所以腳本吃後端 CLI 自己的預設。

同時修正一個先前寫太滿的宣稱:官方 pricing 頁的用量限制表其實不含免費方案(只有 Plus/Pro/Business/API key),而且本專案沒有在免費帳號上實測過。因此文件不再暗示免費方案開箱即用,docs/AI_REVIEW_SOURCES.md 也記下了這次重查的原文與日期。

驗證:5 種 shell × 28 項行為矩陣全過。

Quota walls stop breaking callers 🚪

"No second opinion must never break your flow" only held for not installed / not signed in. Hit a quota or plan limit and you got exit 2, which aborts callers under set -e. v0.5.2 adds --soft-fail so backend refusals stop affecting the exit code (the status string is still printed). Defaults are unchanged, and the quota guidance now names the three distinct causes — including "your plan may not include the backend's default model", fixed with --model.

Also tightened: the official pricing page's usage-limit table does not cover the free plan, and this project has never tested a free account — so the docs no longer imply it works out of the box.

更新 Update: npx skills update

v0.5.1 — 二審抓到自己的漏洞 The reviewer reviews itself

Choose a tag to compare

@tingyulu tingyulu released this 20 Aug 05:08

用新工具審新工具,抓到兩個會讓它自己失效的洞 🔍

v0.5.0 剛把 ai-review 做出來,就用它把自己整包(SKILL.md + 腳本)送 GPT 與 Gemini 各審一次。兩個模型獨立指向同一批缺陷,其中兩個直接打穿這支工具的核心承諾:

  1. 自訂後端指到不存在的命令 → 回 exit 2,在 set -e$(…) 裡會直接中止上層流程。而「沒有二審後端絕不中斷你的流程」正是它的硬需求。現在回 skipped_not_installed + exit 0,引導文字也不再叫你去裝 codex。
  2. 錯誤分類器有一條模糊的 auth 比對 ——「組織政策拒絕」「認證服務掛掉」這類真失敗會被判成「略過」並回 exit 0。安靜的假成功,正是它攔別人時要抓的東西。現在只收明確的登入證據。

另外六項:--effort 沒驗值(還會被插進後端 config)、一次給兩份來源檔靜默只審最後一份、同秒落檔互相覆蓋、含冒號的檔名弄壞 YAML frontmatter、空回覆不印原因(與文件宣稱不符)、prompt 組裝途中檔案被刪仍照樣送出。

全部修掉,並逐條變成回歸測項:5 種 shell × 26 項全過shdashbashkshzsh),真實 Codex 路徑重驗。Linux/Windows 仍未實測,README 因此仍不宣稱跨平台。

The reviewer reviews itself 🔍

v0.5.0 shipped ai-review; v0.5.1 is what happened when it reviewed itself. Two independent models flagged the same defects — including one that broke its own core promise (a missing custom backend returned exit 2, aborting the caller under set -e) and a fuzzy auth pattern that turned real failures into a silent exit 0. Eight fixes, each with a regression case; 26 cases across 5 shells.

更新 Update: npx skills update