repo-governance-bootstrap — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited repo-governance-bootstrap (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
用户说出以下任一:
跳过条件:仓库已有 docs/INDEX.md 和 docs/ACTIVE_CONTEXT.md → 提演化方案、不重新初始化;绝不覆盖既有治理文件。
future_plan.md / ideas.md / generic TODO dumpdocs/
├── INDEX.md
├── ACTIVE_CONTEXT.md # 当前焦点 / hot context
├── decisions/
│ └── ADR-0001-<slug>.md # 仓库边界(ADR 编号固定 4 位)
├── modules/
│ └── <module>.md # 每个核心模块一个 flat 文件
└── roadmap/
├── README.md # status-bucket 索引(Active / Deferred / Obsolete)
├── active-roadmap.md # 单文件,inline Status
├── deferred/
│ └── README.md # deferred 索引(Items 表 + Entry Criteria + Promotion Rule)
└── obsolete/
└── README.md # obsolete 索引(仅索引,少用)
AGENTS.md # repo 治理规则(Codex 读)
CLAUDE.md # 一行:@AGENTS.md(Claude 读)
ACCESS.local.md # gitignored — 本机接入凭证 + 环境拓扑 + 验证配方active-roadmap.md(单文件,inline Status:)+ deferred/ + obsolete/(各带 README.md 索引)。active 保持单文件——item 内联,逐项拆文件无收益;deferred 项内容厚,一项一文件 <PREFIX>-DEFER-NNN-<slug>.md。<PREFIX> = 项目自定义 ID 前缀,按项目名取(不要硬编码他人前缀)。modules/<m>.md。模块复杂到 README + architecture + evolution 各需独立维护时再拆成 modules/<m>/{overview,architecture,evolution}.md。ADR-0001、ADR-0014),全仓一致。future_plan.md / ideas.md / TODO dump);未来工作进 roadmap/deferred/。references/PROJECT_AGENT.md §6(canonical,随成品写进项目 AGENTS.md)+ 下方「ACTIVE_CONTEXT.md 模板」的契约头。核心 = 每次收口整篇重写而非追加。实证(why):某项目 ACTIVE_CONTEXT 被当 checkpoint 日志逐条 append,4 天涨到 190 行后整体冻结腐烂。ACTIVE_CONTEXT.md 的本地含密镜像兄弟(committed=what,local=how-to-reach),是新会话/新 agent 摸到系统的入口。凭证口径必须一致:canonical home 是外部 vault(如团队密钥库),此文件是本机缓存,靠 gitignore + 提交前 redaction sweep 兜底;secret 永不进 committed tree / traces / 对外消息。建文件即把 ACCESS.local.md 写进 .gitignore。(拓扑与凭证有意同进这一份、不另拆"非密 config"——内网拓扑[IP/库名/结构]本身也算敏感面,少一层"该进哪"的纠结。) 额外两条(AI/服务项目高频):① 凭证间接——cred 常存于 env 变量 X 而代码读 Y(如存 <VENDOR>_KEY、 网关读 LLM_API_KEY),ACCESS 必记"谁存谁读 + 桥接命令",是 demo-day 401 头号根因;② 依赖外部认证服务前 先跑活体 auth smoke 并读失败模式(失败模式见模板 ③)——便宜的当前态求证挡在昂贵的"以为配好了"之前。
docs/ + 治理文件纳入一个无 remote 的本地 git、gitignore 掉子 repo,换来文档变更历史、误删恢复、agent 派工后的 git diff 漂移审计。orchestration docs 一旦成为多 agent 并发写的 SoT 尤其值得(实证:曾发生 agent 误删关键 docs、无版本可恢复)。加 remote 前先做一次 secrets sweep(内网 IP/库名/拓扑也算敏感面),并在 AGENTS.md 写明这条。多 agent 编排场景配合 cto-orchestration skill。docs/decisions/、docs/modules/、docs/roadmap/deferred/、docs/roadmap/obsolete/(roadmap 三桶一次建好)。| Capability | Component | ADR | Roadmap |)。proposed 起步,由用户后续确认为 accepted。roadmap/README.md(三桶索引)+ roadmap/active-roadmap.md(≥1 item,每项含 Status / Capability / Components / ADR / Acceptance Criteria)+ roadmap/deferred/README.md(空 Items 索引 + Entry Criteria + Promotion Rule)+ roadmap/obsolete/README.md(空索引)。references/PROJECT_AGENT.md(中文成品宪法)为准落地,按其章节:Source of Truth 优先级 / 三档工作模式 / 模块边界(FOR / NOT FOR)/ Capability vs Component / 状态词汇 / 文档治理(已含文档生命周期 anti-rot:ACTIVE_CONTEXT 快照契约 + 收口归档仪式)/ Code Traceability / 完成标准。工具偏好若全局 agent 配置未覆盖项目特定项(如子仓库 toolchain)再补。Redaction 边界写明一条:secret/凭证只进 ACCESS.local.md(gitignored)与外部 vault,永不进 committed tree / traces / 日志 / 对外消息——避免 AGENTS.md 里 "creds never in repo tree" 与本机存明文凭证的口径自相矛盾。@AGENTS.md。.gitignore 加 ACCESS.local.md 一行(带注释说明含 creds、永不提交)。绝不把真实凭证写进 stub。references/memory-discipline-hook.sh 接成PostToolUse hook——写 memory/*.md(非 MEMORY.md) 时确定性注入"事实细节→ACCESS.local.md/docs、只留指针"提醒。 默认写项目级配置(.claude/settings.json 等,blast radius 小、随 bootstrap 直接建不必问);只有要全局跨项目 才问用户写 ~/.claude/。为什么需要 hook:该纪律在 cto-orchestration §5(知识层),但 skill 文本随长对话 salience 衰减,高频纪律须 hook 强制层兜底。三 agent wiring 见下方模板;绝不把真实 secret 写进 hook。
active / 在 ACCESS.local.md 填本机接入凭证与验证配方 / 若配了 hook 跑一次 memory 写入确认提醒生效)。步骤 11 的三 agent wiring。references/memory-discipline-hook.sh= CC + codex 共用(双 extractor),omp 另走 JS hook。字段/flag 已 2026-06 本地实跑验证(见各 ⚠️)。<S>= 本 skill 安装路径。
① Claude Code — 项目 .claude/settings.json(实测可用):
"hooks": { "PostToolUse": [{ "matcher": "Write|Edit|MultiEdit",
"hooks": [{ "type": "command", "command": "bash <S>/references/memory-discipline-hook.sh" }] }] }② codex — 项目 .codex/hooks.json(嵌套 JSON、非 TOML,实测):
{"hooks":{"PostToolUse":[{"matcher":"*","hooks":[{"type":"command","command":"bash <S>/references/memory-discipline-hook.sh"}]}]}}⚠️ 实测:codex 写文件 tool_name=apply_patch(非 Write)、路径在 .tool_input.command patch 文本里——脚本已含该 extractor。起 codex 要带两个 flag:--dangerously-bypass-approvals-and-sandbox --dangerously-bypass-hook-trust (缺后者 project-local hook 不被信任、不加载)。坑:~/.codex/hooks.json 若有解析错误(如 unknown field)会让 整套 hook 加载失败(含项目级)——先跑一次确认生效。
③ omp — JS hook references/memory-discipline-hook.ts(实测可用),omp --hook <S>/references/memory-discipline-hook.ts 或放 .omp/hooks/:
export default (pi)=>{ pi.on("tool_result", async (e)=>{ /* toolName 小写 write/edit、路径 e.input.path、排除 MEMORY.md */
await pi.sendUserMessage(REMINDER, { deliverAs:"followUp" }); }); }⚠️ 实测:omp 无 command/stdin hook,走 tool_result 事件(toolName 小写 write/edit、路径 event.input.path)。注入必须用 `pi.sendUserMessage(text,{deliverAs:"followUp"})`——落 role:user 进 transcript、模型下一轮读到并遵守;pi.sendMessage 是 hidden/developer 通道、模型常忽略,别用。措辞要中性(普通提醒口吻),伪 SYSTEM/"你必须…"会被当 prompt-injection 拒绝。
两套词汇独立、不可互换:ADR 4 态(Nygard)/ Roadmap 6 态。完整定义见 references/PROJECT_AGENT.md §5(canonical——它随成品写进项目 AGENTS.md,必须自包含)。 生成 ADR / roadmap 时按那里取值,本 skill 不复述全文,只守一条易错点:别把 ADR 的 `accepted` 安到 roadmap 上、别把 roadmap 的 `active/completed` 安到 ADR 上。
编号 4 位零填充(ADR-0001、ADR-0014),全仓一致;起步 ADR 主题为仓库边界。
# ADR-NNN: <Title>
Status: proposed
Date: YYYY-MM-DD
## Context
<the problem / forces>
## Decision
<what we decided>
## Consequences
<positive / negative / future evolution>引入重依赖 / 重组件(数据存储 / MQ / 缓存 / 搜索 / 新外部服务 / 新能力类别)的 ADR,在基础模板上增 `Owner` / `Sunset Criteria` / `Review-by` 三段——记录"何时该退役",防止引入后无人清理、沦为死基础设施。这是 ADR 天然该承载的槽,bootstrap 直接建。
# ADR-NNN: 引入 <组件>
Status: accepted
Date: YYYY-MM-DD
Owner: <谁负责其存续与退役>
## Context
<问题 + 为何 stdlib / 现有依赖不够;评估过的替代方案>
## Decision
<引入什么;如何 wrap behind interface 保持可替换>
## Sunset Criteria(退役判据)
- <什么条件下应被移除:依赖它的 X 特性下线 / 长期 QPS < N / 被 Y 替代>
## Review-by
- YYYY-MM-DD(到期必须复审:仍需要?可降级/移除?)
## Consequences
<运维成本 / 锁定风险 / 退役难度>更细的 lifecycle 规则(重组件阈值 / wrap-behind-interface / 情境绑定 hardcode 与 prompt 的EXPIRES·REVISIT-WHEN内联过期标记 / 配套 CI 门禁)见agent-backend-standard附录 A;本骨架不重复、只建 ADR 这个槽。
# Module: <name>
## FOR
- <capability A>
## NOT FOR
- <explicitly out of scope>
## Components
- `<path/to/component>`
## Evolution
### Active
- <item> — Status: active
### Deferred / Obsolete
- <item> — Status: deferred — reason## <ID>: <Title>
Status: proposed
Capability: <capability>
Components:
- `<path>`
ADR: <ADR-NNN or TBD>
Acceptance Criteria:
- <criterion>ID = <PREFIX>-DEFER-NNN(<PREFIX> 为项目自定义前缀,如 AAM / PAY)。一项一文件存 roadmap/deferred/<PREFIX>-DEFER-NNN-<slug>.md,并在 roadmap/deferred/README.md 索引。
# <PREFIX>-DEFER-NNN: <Title>
Status: deferred
Priority: P2
Capability: <capability>
Components:
- `<path>`
Related ADRs:
- <ADR-NNN>
## Problem
<why it matters; kept across sessions>
## Proposed Direction
<approach>
## Non-goals
- <out of scope>
## Acceptance Criteria
- <criterion>
## Validation Plan
- <how it is verified>roadmap/deferred/README.md)# Deferred Roadmap
Future work accepted for tracking but not in active scope. Index instead of a generic backlog.
## Items
| ID | Priority | Status | Title | Components |
| --- | --- | --- | --- | --- |
| <PREFIX>-DEFER-001 | P2 | deferred | [<Title>](./<PREFIX>-DEFER-001-<slug>.md) | <components> |
## Entry Criteria
- 问题真实、需跨会话保留
- 不应扩张当前 active plan
- 有明确 owner component + acceptance criteria
- 不是某文件内的局部 TODO
## Promotion Rule
延期项转 active 时,在架构 plans 目录建具体 plan,保留链接,状态改 `active`,完成后改 `completed`。# Active Context — <project>
Last rewritten: YYYY-MM-DD
> **This file is a SNAPSHOT, not a journal.** Rewritten (never appended) at every
> workstream close, capped at ~60 lines. History lives in git; closed-workstream
> detail is archived. This is the entry point for any agent/session without the
> orchestrator's private memory.
## Current Focus
<one workstream, its single blocker, its next step>
## Live / Waiting Workstreams
| Workstream | State | Waiting on |
| --- | --- | --- |
## Standing Constraints
- <rules that outlive any single workstream>
## Recent Decisions (last 3–5 — older: git history / ADRs)
- YYYY-MM-DD — <decision>gitignored,永不提交/推送。 含明文凭证,只在本机做快速反查。生成时字段留空待用户填, stub 里绝不写真实 secret。凭证 canonical home 是外部 vault,此文件是本机缓存。
# <项目> 接入与访问(仅本机 — 已 gitignore,永不提交/推送)
> 此文件含凭证/环境/访问信息,供本机快速反查。**任何内容都不得**粘进 committed 文件、
> 子仓库目录、traces、日志或对外消息。凭证 canonical home = 外部 vault;这里是本机缓存。
## ① 接入凭证
- **<环境名>**:`<登录 URL>` → 登录 → 选 `<租户/项目>`。
- 账号:`<account>`;密码:`<password 或"见 vault">`。
- token / cred 获取方式:`<如何拿到,例如 localStorage.token / vault 路径>`。
### 外部服务 / 模型 endpoint(每个被认证调用的依赖一条:LLM 网关 / DB / 第三方 API)
- **<服务名>**:endpoint `<base url / host>`;auth header `<如 api-key / Authorization / Ocp-Apim-Subscription-Key>`;
模型/部署/库名 `<model / deployment / db>`。
- **凭证间接(必记)**:cred 实际存在 env 变量 `<X,如 VENDOR_APIM_KEY>`,但代码读的是 `<Y,如 LLM_API_KEY>`
—— **桥接** = `<如启动时 Y="$X" 进程 env 覆盖 .env;或 vault→Y 注入>`。
- **参数 gotcha**:`<如 gpt-5.x 用 max_completion_tokens 非 max_tokens;某 API 必带 version>`。
## ② 环境拓扑速查
- 部署布局:`<monorepo / 多服务 / 前后端目录>`。
- 关键 id:`<tenant id / project id / 资源 id>`。
- env flags:`<影响行为的开关>`。
- 调用路径:`<请求怎么走到目标代码——关键分叉点 file:line>`。
## ③ 验证配方与 gotcha
- **E2E 验收 recipe**:`<最小可复现的"摸到运行系统并确认生效"步骤>`。
- **活体 auth smoke(依赖建在它之上前先验,别等彩排)**:`<最小 curl/调用,打印 HTTP 码>`。
**读失败模式**:401/403 = 凭证/header 错;**400 参数错 = 凭证其实通了**(已过认证到参数校验);
404 = base_url/路径/model 错。区分清楚才知道改 key 还是改配置。
- **调试踩坑**:`<本机/工具/环境特有的坑 + 绕过办法>`。
## 构建 / 工具
- `<本机构建、测试、跑服务的实际命令>`。# Documentation Index
This index maps the repository source of truth.
## Decisions
- [ADR-0001: <Title>](decisions/ADR-0001-<slug>.md)
## Modules
- [<module>](modules/<module>.md)
## Roadmap
- [Active Roadmap](roadmap/active-roadmap.md)
- [Deferred Roadmap](roadmap/deferred/README.md)
## AI Context
- [Active Context](ACTIVE_CONTEXT.md)
## Traceability
| Capability | Component | ADR | Roadmap |
| --- | --- | --- | --- |
| <capability> | `<path>` | ADR-0001 | <ID> |完成后:
docs/INDEX.md 单文件即可定位所有 source of truthAGENTS.md + CLAUDE.md 生效,agent 进入新对话能识别上述结构完成后告诉用户:
AGENTS.md 管理(Source of Truth 优先级 / 状态词汇 / 三档工作模式 / 等)obsolete / rejected 不删~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.