← ClaudeAtlas

assertlisted

有人帶著一件要做的事出現時的第一站。先判斷這件事要不要立案並說出依據;要立案的,把「怎麼算成功」談成人簽得下去的斷言,凍結起來。任何會改變程式碼或行為的請求都從這裡進,使用者不需要記得這���名字。
HsuanYuLee/polaris · ★ 5 · AI & Automation · score 80
Install: claude install-skill HsuanYuLee/polaris
# assert — 閘一:立案判斷與凍結斷言 這個入口做兩件事:**先判斷要不要立案**,要立案的才把成功的定義變成**人簽得下去**的斷言, 鎖起來。 鎖起來之後,做法怎麼變都不用回來問人;只有成功的定義本身錯了才需要回到這裡重簽。 ## 零、先做立案判斷,並說出來 被叫起來的第一件事不是寫斷言,是**判斷這件事該不該立案,並把判斷與依據說出口**,然後才 動作。不要靜默決定——人要能當場推翻它。 判準只有一條:**有沒有「怎麼算成功」需要人簽字。** | 這件事 | 立案? | |---|---| | 查一下、說明一段程式、跑個既有測試 | 否。沒有要簽的東西,直接做 | | 改 typo、調一個顯然的常數 | 否。成功的定義不會有爭議 | | 會改變行為、會有人問「這樣算好了嗎」 | **是** | | 不確定 | **是**。立案的成本遠低於做完才發現目標不對 | 說出來的樣子:「我判斷這件事**要**立案,因為驗收標準不只一種可能」,或「我判斷**不用** 立案,這是唯讀查詢,直接做」。一句話就夠,不需要表格。 不立案的,到此為止,直接把事情做完。立案的,往下走。 ## source 的形狀 一個 source 是一個目錄: ``` sources/ 你自己的 git repo,框架 repo 忽略它 {source}/ index.md 正文含凍結塊 fence,其餘是活文件 .spine/loop-state.json 輪次 .spine/measurement-ledger.json 量測命令登錄 ``` **`sources/` 不歸框架版控。** 它記的是你在做什麼、為什麼這樣定義成功;換一個人用同一套 框架,這裡的內容完全不一樣。框架只提供空殼(`_template/sources/`)。第一次使用時: ```bash cp _template/sources/README.md sources/README.md cp _template/sources/gitignore.example sources/.gitignore cd sources && git init && git add . && git commit -m "sources: 開始" ``` 它仍然必須是一個 git repo——理由見下方〈凍結 = commit〉。`verify` 從檔案自己的路徑解析 repo,會自動跟著 `sources/` 進它自己的歷史,不需要告訴它。 凍結塊與活文件同檔。這是成本地板:一個工作被迫產生的檔案不超過兩個(這份與 code), 純文件類的工作只有一份。 ## 斷言長什麼樣 **陳述句,不是要求句。**「當 X 時,Y 發生」可以被注入情境驗證;「應該要有 X」不行。 **正負兩表都要有。** 只有負向表列時,「什麼都不做」可以拿滿分;只有正向表列時,副作用 沒人管。負向表列不定義成功,它圈出即使達標也不接受的做法。 **只寫意圖,不寫儀器。** 斷言承載意圖鎖死,量測是斷言的代理放開。把「用哪支腳本、閾值 多少」寫進凍結區是分層錯誤——那些東西在活區,會換。 寫進 fence 之間: ```markdown <!-- POLARIS-FROZEN-A-BEGIN --> #### 正向表列(達成) - **A-P1 ��**:當 … 時,