Files
shared/scripts/lib/redact-patterns.json
jiantw83andClaude Sonnet 5 1030f9d403 feat(shared): 新增14個共用spec、models/todo工具與樣板產生器,收斂跨repo重複規範
依 todo.md 執行的規範治理專案:新增 spec-preflight 等 14 個共用規範(含
conventional-commit/pull-request/git-push/issue-read/todo-list/ask-user/
subagent/no-scratch-files/skill-invocation/script-path/action-scaffold/
node-src-layout/plugin-cli/model),擴充 spec-git-safety 與 spec-gitea(token
優先序、機密遮蔽、Wiki 頁名轉義規則);新增可執行 skill `models`(模型能力
查詢與標籤)與 `todo`(依指定模型產生/附加 todo.md);新增 plugin.meta.json
單一事實來源與 gen-plugin-files.mjs 樣板產生器,統一四個 repo 的 manifest/
README/AGENTS.md 並移除寫死的本機使用者路徑;新增 shared/scripts/lib 的
log/機密遮蔽三語言參考實作。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 06:02:30 +00:00

57 lines
2.8 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"_meta": {
"用途": "機密遮蔽規則(9 條)的唯一權威資料來源,供 Python/JavaScript/Bash 三語言各自載入套用。任何實作異動一律先改本檔,再同步對應語言的實作。",
"來源": "抽自 doc/scripts/worklog/transcript.py 的 REDACT_PATTERNS,並比對 persona/scripts/persona-lib.mjs 的 redactSecrets() 確認語意一致。",
"語法規則": "pattern 一律使用三語言可直接使用的正則語法:不使用 Python 專屬語法特性(例如 (?i) inline flag、\\d 的 Unicode 語意),大小寫不分的規則改用顯式字元類別(如 [Tt][Oo][Kk][Ee][Nn])展開;數字一律用 [0-9] 而非 \\d。\\b/\\s/\\S 為 Python re、JavaScript RegExp 皆直接支援的語法,Bash 端以 GNU grep -E/sed -E(glibc regex,支援 \\b、\\s 等 GNU 擴充)套用。",
"反向參照規則": "replacement 內的反向參照統一用 $1 風格(JavaScript String.replace/Bash sed 皆可直接使用)。Python 使用本檔時,套用前需先把 replacement 內的 $1、$2…轉成 \\1、\\2… 再交給 re.sub();transcript.py 的 REDACT_PATTERNS 保留原有 \\1 寫法不受本檔影響。",
"更新時間": "2026/08/11 00:00:00"
},
"rules": [
{
"pattern": "[A-Za-z0-9_-]*:[A-Za-z0-9_-]{16,}@",
"replacement": "***@",
"purpose": "URL 內嵌憑證(user:token@ 形式)"
},
{
"pattern": "\\b[0-9a-f]{40}\\b",
"replacement": "***",
"purpose": "Gitea 40 字元 hex token"
},
{
"pattern": "\\bgh[pousr]_[A-Za-z0-9_]{16,}\\b",
"replacement": "***",
"purpose": "GitHub token(ghp_/gho_/ghu_/ghs_/ghr_ 開頭)"
},
{
"pattern": "\\bsk-[A-Za-z0-9_-]{16,}\\b",
"replacement": "***",
"purpose": "API key(sk- 開頭)"
},
{
"pattern": "\\b([Tt][Oo][Kk][Ee][Nn]|[Pp][Aa][Ss][Ss][Ww][Oo][Rr][Dd]|[Pp][Aa][Ss][Ss][Ww][Dd]|[Pp][Ww][Dd]|[Ss][Ee][Cc][Rr][Ee][Tt]|[Aa][Pp][Ii][_-]?[Kk][Ee][Yy])\\b\\s*[:=]\\s*\\S+",
"replacement": "$1=***",
"purpose": "key=value 形式機密(token/password/passwd/pwd/secret/api_key,不分大小寫)"
},
{
"pattern": "[Aa][Uu][Tt][Hh][Oo][Rr][Ii][Zz][Aa][Tt][Ii][Oo][Nn]:\\s*([Tt][Oo][Kk][Ee][Nn]|[Bb][Ee][Aa][Rr][Ee][Rr])\\s+\\S+",
"replacement": "Authorization: $1 ***",
"purpose": "HTTP Authorization 標頭(token/bearer,不分大小寫)"
},
{
"pattern": "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}",
"replacement": "***",
"purpose": "Email 位址"
},
{
"pattern": "\\b09[0-9]{2}[-\\s]?[0-9]{3}[-\\s]?[0-9]{3}\\b",
"replacement": "***",
"purpose": "台灣手機號碼"
},
{
"pattern": "\\b[A-Z][12][0-9]{8}\\b",
"replacement": "***",
"purpose": "台灣身分證字號"
}
]
}