@colin4k1024/tsp 2.4.1 → 2.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -6
- package/docs/.vitepress/config.mts +199 -0
- package/docs/adr/ADR-001-doc-architecture-integration.md +33 -0
- package/docs/guides/README.md +5 -0
- package/docs/guides/installation.md +33 -0
- package/docs/guides/user-guide.md +36 -0
- package/docs/index.md +65 -0
- package/docs/memory/backlog.md +10 -0
- package/docs/memory/decisions.md +43 -0
- package/docs/memory/lessons-learned.md +87 -0
- package/docs/plans/2026-04-03-python-remnants-audit.md +265 -0
- package/docs/plans/2026-04-03-scripts-python-to-js-migration.md +372 -0
- package/docs/plans/2026-04-03-solo-delivery-execution-checklist.md +413 -0
- package/docs/plans/2026-04-03-solo-delivery-gap-plan.md +377 -0
- package/docs/plans/2026-04-03-team-skills-workflow-gates.md +548 -0
- package/docs/plans/2026-04-21-open-source-readiness-gap-plan.md +217 -0
- package/docs/plans/llm-surface-reduction-audit.md +147 -0
- package/docs/plans/llm-surface-reduction-execution-checklist.md +217 -0
- package/docs/plans/llm-surface-reduction-execution-history.md +124 -0
- package/docs/plans/team-skills-platform-migration.md +54 -0
- package/docs/presentation/README.md +42 -0
- package/docs/presentation/audience-presentation-route-map.md +84 -0
- package/docs/presentation/executive-briefing-talk-track.md +50 -0
- package/docs/presentation/generate_capability_matrix.py +396 -0
- package/docs/presentation/generate_ppt.py +354 -0
- package/docs/presentation/implementation-onboarding-brief.md +38 -0
- package/docs/presentation/presentation-talk-track.md +97 -0
- package/docs/presentation/vertical-scenario-route-map.md +99 -0
- package/docs/presentation/workshop-facilitator-guide.md +47 -0
- package/docs/runbooks/actionlint-workflow-gates.md +80 -0
- package/docs/runbooks/agent-governance.md +131 -0
- package/docs/runbooks/ai-eval-platform-demo-execution-log.md +147 -0
- package/docs/runbooks/ai-eval-platform-demo-script.md +136 -0
- package/docs/runbooks/ai-eval-platform-walkthrough.md +113 -0
- package/docs/runbooks/ai-pr-review-automation.md +56 -0
- package/docs/runbooks/api-breaking-change-gates.md +58 -0
- package/docs/runbooks/api-design-evolution-walkthrough.md +42 -0
- package/docs/runbooks/api-lint-gates.md +57 -0
- package/docs/runbooks/api-mocking-strategy-and-lifecycle-guide.md +47 -0
- package/docs/runbooks/architect-daily-operations.md +63 -0
- package/docs/runbooks/architect-design-conversation-example.md +83 -0
- package/docs/runbooks/artifact-attestation-gates.md +75 -0
- package/docs/runbooks/artifact-persistence.md +257 -0
- package/docs/runbooks/backend-engineer-daily-operations.md +63 -0
- package/docs/runbooks/batch-optimization-completion-checklist.md +104 -0
- package/docs/runbooks/biz-service-designer-end-to-end-conversation-example.md +5 -0
- package/docs/runbooks/biz-service-designer-toolkit.md +5 -0
- package/docs/runbooks/bug-fix-complete-walkthrough.md +60 -0
- package/docs/runbooks/build-failure-recovery-walkthrough.md +40 -0
- package/docs/runbooks/canary-decision-matrix.md +41 -0
- package/docs/runbooks/canary-staging-release-walkthrough.md +46 -0
- package/docs/runbooks/checkov-iac-gates.md +104 -0
- package/docs/runbooks/claude-code-review-workflow.md +72 -0
- package/docs/runbooks/claude-conversation-prompt-recipes.md +132 -0
- package/docs/runbooks/claude-end-to-end-conversation-example.md +198 -0
- package/docs/runbooks/claude-feature-development-guide.md +112 -0
- package/docs/runbooks/claude-quick-start.md +227 -0
- package/docs/runbooks/claude-usage-scenarios.md +176 -0
- package/docs/runbooks/code-review-collaboration-walkthrough.md +65 -0
- package/docs/runbooks/codeql-pr-security-gates.md +64 -0
- package/docs/runbooks/codex-end-to-end-conversation-example.md +166 -0
- package/docs/runbooks/codex-multi-agent-orchestration.md +65 -0
- package/docs/runbooks/codex-parallel-prompt-recipes.md +131 -0
- package/docs/runbooks/codex-quick-start.md +223 -0
- package/docs/runbooks/codex-usage-scenarios.md +168 -0
- package/docs/runbooks/codex-workflow-essentials.md +88 -0
- package/docs/runbooks/command-and-capability-matrix.md +162 -0
- package/docs/runbooks/conftest-policy-gates.md +84 -0
- package/docs/runbooks/consumer-driven-contract-testing-with-mock-alignment.md +45 -0
- package/docs/runbooks/contract-testing-playbook.md +78 -0
- package/docs/runbooks/cosign-signing-gates.md +71 -0
- package/docs/runbooks/cross-role-issue-triage-walkthrough.md +47 -0
- package/docs/runbooks/cursor-quick-start.md +123 -0
- package/docs/runbooks/custom-overlay.md +115 -0
- package/docs/runbooks/data-ml-pipeline-demo-execution-log.md +141 -0
- package/docs/runbooks/data-ml-pipeline-demo-script.md +102 -0
- package/docs/runbooks/data-ml-pipeline-walkthrough.md +119 -0
- package/docs/runbooks/data-observability-quality-demo-execution-log.md +36 -0
- package/docs/runbooks/data-observability-quality-demo-script.md +42 -0
- package/docs/runbooks/data-observability-quality-walkthrough.md +86 -0
- package/docs/runbooks/demo-deliverables-overview.md +278 -0
- package/docs/runbooks/demo-execution-log.md +530 -0
- package/docs/runbooks/demo-scenario.md +129 -0
- package/docs/runbooks/dependency-review-gates.md +63 -0
- package/docs/runbooks/dependency-update-automation.md +83 -0
- package/docs/runbooks/design-md-workflow.md +185 -0
- package/docs/runbooks/devops-engineer-daily-operations.md +60 -0
- package/docs/runbooks/devops-release-conversation-example.md +88 -0
- package/docs/runbooks/doc-architecture-integration.md +59 -0
- package/docs/runbooks/doc-architecture-quick-start.md +122 -0
- package/docs/runbooks/document-execution-audit.md +32 -0
- package/docs/runbooks/documentation-update-walkthrough.md +37 -0
- package/docs/runbooks/ecc-harness-usage.md +93 -0
- package/docs/runbooks/error-experience-usage.md +116 -0
- package/docs/runbooks/evolution-usage.md +162 -0
- package/docs/runbooks/executive-value-one-page.md +55 -0
- package/docs/runbooks/external-capability-approval-and-enablement-workflow.md +39 -0
- package/docs/runbooks/external-capability-intake.md +160 -0
- package/docs/runbooks/first-team-command-60-seconds.md +96 -0
- package/docs/runbooks/first-team-workflow-walkthrough.md +245 -0
- package/docs/runbooks/frontend-backend-integration-acceptance-checklist.md +46 -0
- package/docs/runbooks/frontend-backend-parallel-integration-walkthrough.md +48 -0
- package/docs/runbooks/frontend-bugfix-one-page.md +82 -0
- package/docs/runbooks/frontend-engineer-daily-operations.md +60 -0
- package/docs/runbooks/frontend-enterprise-style-profile.md +5 -0
- package/docs/runbooks/frontend-governance.md +47 -0
- package/docs/runbooks/frontend-refactor-walkthrough.md +42 -0
- package/docs/runbooks/git-pr-workflow.md +63 -0
- package/docs/runbooks/github-actions-supply-chain-demo-execution-log.md +158 -0
- package/docs/runbooks/github-actions-supply-chain-demo-script.md +150 -0
- package/docs/runbooks/github-actions-supply-chain-walkthrough.md +117 -0
- package/docs/runbooks/github-token-permissions-baseline.md +92 -0
- package/docs/runbooks/gitlab-manual-pipeline-release.md +5 -0
- package/docs/runbooks/gitlab-release-integration-playbook.md +5 -0
- package/docs/runbooks/gitnexus-code-intelligence-usage.md +133 -0
- package/docs/runbooks/graphify-knowledge-graph-usage.md +88 -0
- package/docs/runbooks/handoff-filling-guide-with-examples.md +70 -0
- package/docs/runbooks/handoff-governance.md +250 -0
- package/docs/runbooks/helm-unittest-playbook.md +101 -0
- package/docs/runbooks/hotfix-emergency-release-walkthrough.md +60 -0
- package/docs/runbooks/iac-kubernetes-platform-demo-execution-log.md +144 -0
- package/docs/runbooks/iac-kubernetes-platform-demo-script.md +130 -0
- package/docs/runbooks/iac-kubernetes-platform-walkthrough.md +120 -0
- package/docs/runbooks/implementation-onboarding-reading-path.md +67 -0
- package/docs/runbooks/in-toto-attestation-framework.md +94 -0
- package/docs/runbooks/incident-severity-triage-tree.md +43 -0
- package/docs/runbooks/incident-triage-one-page.md +65 -0
- package/docs/runbooks/internal-developer-platform-demo-execution-log.md +36 -0
- package/docs/runbooks/internal-developer-platform-demo-script.md +42 -0
- package/docs/runbooks/internal-developer-platform-walkthrough.md +91 -0
- package/docs/runbooks/karpathy-guidelines-usage.md +27 -0
- package/docs/runbooks/kubeconform-schema-gates.md +100 -0
- package/docs/runbooks/kubectl-server-dry-run-gates.md +103 -0
- package/docs/runbooks/kyverno-policy-gates.md +90 -0
- package/docs/runbooks/langfuse-and-observability-integration-guide.md +43 -0
- package/docs/runbooks/langfuse-coding-trace.md +44 -0
- package/docs/runbooks/mobile-miniapp-delivery-walkthrough.md +112 -0
- package/docs/runbooks/mobile-miniapp-demo-execution-log.md +139 -0
- package/docs/runbooks/mobile-miniapp-demo-script.md +129 -0
- package/docs/runbooks/multi-service-backend-integration-walkthrough.md +61 -0
- package/docs/runbooks/open-design-integration.md +163 -0
- package/docs/runbooks/open-source-release-checklist.md +90 -0
- package/docs/runbooks/opencode-quick-start.md +128 -0
- package/docs/runbooks/parallel-development-coordination-walkthrough.md +47 -0
- package/docs/runbooks/parallel-execution-usage.md +179 -0
- package/docs/runbooks/platform-capability-demo-execution-log.md +184 -0
- package/docs/runbooks/platform-capability-demo-script.md +192 -0
- package/docs/runbooks/plugin-extension-platform-demo-execution-log.md +136 -0
- package/docs/runbooks/plugin-extension-platform-demo-script.md +102 -0
- package/docs/runbooks/plugin-extension-platform-walkthrough.md +111 -0
- package/docs/runbooks/policy-controller-gates.md +75 -0
- package/docs/runbooks/post-rollback-verification-checklist.md +37 -0
- package/docs/runbooks/pre-release-checklist.md +50 -0
- package/docs/runbooks/product-manager-clarification-conversation-example.md +90 -0
- package/docs/runbooks/product-manager-daily-operations.md +60 -0
- package/docs/runbooks/production-incident-response-walkthrough.md +50 -0
- package/docs/runbooks/project-claude-design-rationale.md +188 -0
- package/docs/runbooks/project-manager-daily-operations.md +61 -0
- package/docs/runbooks/project-manager-planning-conversation-example.md +82 -0
- package/docs/runbooks/project-onboarding.md +452 -0
- package/docs/runbooks/qa-engineer-daily-operations.md +63 -0
- package/docs/runbooks/qa-review-conversation-example.md +87 -0
- package/docs/runbooks/release-closure-one-page.md +65 -0
- package/docs/runbooks/release-governance-reading-path.md +56 -0
- package/docs/runbooks/release-notes-automation.md +48 -0
- package/docs/runbooks/release-rollback-recovery-walkthrough.md +47 -0
- package/docs/runbooks/requirement-clarity-and-scope-walkthrough.md +46 -0
- package/docs/runbooks/reviewdog-pr-gates.md +49 -0
- package/docs/runbooks/role-prompt-recipes.md +130 -0
- package/docs/runbooks/rtk-integration-intake.md +45 -0
- package/docs/runbooks/rtk-token-optimization-usage.md +107 -0
- package/docs/runbooks/runner-egress-hardening.md +81 -0
- package/docs/runbooks/runtime-capabilities-overview.md +113 -0
- package/docs/runbooks/sbom-generation-gates.md +71 -0
- package/docs/runbooks/scorecard-supply-chain-gates.md +82 -0
- package/docs/runbooks/secret-scanning-gates.md +85 -0
- package/docs/runbooks/security-compliance-platform-demo-execution-log.md +36 -0
- package/docs/runbooks/security-compliance-platform-demo-script.md +49 -0
- package/docs/runbooks/security-compliance-platform-walkthrough.md +98 -0
- package/docs/runbooks/slsa-generator-patterns.md +73 -0
- package/docs/runbooks/slsa-verification-gates.md +75 -0
- package/docs/runbooks/solo-delivery-mode.md +142 -0
- package/docs/runbooks/solo-delivery-one-page.md +111 -0
- package/docs/runbooks/specialist-commands-playbook.md +85 -0
- package/docs/runbooks/sub-agent-invocation-map.md +144 -0
- package/docs/runbooks/system-architecture-design-walkthrough.md +49 -0
- package/docs/runbooks/team-closeout-example.md +73 -0
- package/docs/runbooks/team-command-output-contracts.md +358 -0
- package/docs/runbooks/team-commands-quick-prompts.md +125 -0
- package/docs/runbooks/team-execute-example.md +63 -0
- package/docs/runbooks/team-handoff-example.md +49 -0
- package/docs/runbooks/team-intake-example.md +70 -0
- package/docs/runbooks/team-plan-example.md +62 -0
- package/docs/runbooks/team-release-example.md +63 -0
- package/docs/runbooks/team-review-example.md +61 -0
- package/docs/runbooks/team-skills-test-run.md +184 -0
- package/docs/runbooks/team-skills-usage.md +336 -0
- package/docs/runbooks/team-training-reading-path.md +64 -0
- package/docs/runbooks/tech-lead-closure-conversation-example.md +78 -0
- package/docs/runbooks/tech-lead-daily-operations.md +67 -0
- package/docs/runbooks/trivy-security-gates.md +79 -0
- package/docs/runbooks/troubleshooting.md +234 -0
- package/docs/runbooks/vertical-scenario-capability-matrix.md +107 -0
- package/docs/runbooks/witness-policy-gates.md +78 -0
- package/docs/runbooks/zizmor-workflow-audits.md +81 -0
- package/manifests/install-components.json +8 -0
- package/manifests/install-modules.json +34 -0
- package/manifests/install-profiles.json +2 -0
- package/package.json +3 -1
- package/scripts/install-apply.js +9 -0
- package/scripts/install-open-design.js +206 -0
- package/scripts/install-plan.js +17 -0
- package/scripts/lib/install/apply.js +31 -0
- package/scripts/lib/install-executor.js +56 -0
- package/skills/open-design/SKILL.md +87 -0
- package/skills/open-design/agents/openai.yaml +4 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "2.3.0"
|
|
3
|
+
status: draft
|
|
4
|
+
created: 2026-03-29
|
|
5
|
+
updated: 2026-04-18
|
|
6
|
+
owner: 工程团队
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Runtime 能力总览
|
|
10
|
+
|
|
11
|
+
本文解释 Team Skills Platform 里那些“不是你手动输入的命令,但会改变会话行为”的后台能力。当前公开契约已经收口到 JavaScript runtime:以 `hooks/hooks.json` 为配置入口,以 `scripts/hooks/*.js` 为执行入口,不再使用已删除的 Python hook 文件名。
|
|
12
|
+
|
|
13
|
+
## 1. 这份文档回答什么
|
|
14
|
+
|
|
15
|
+
- 当前 runtime 的真实入口在哪里
|
|
16
|
+
- `/team-help`、`artifact:persist` 和后台 hooks 是什么关系
|
|
17
|
+
- Claude 安装后哪些 JS hooks 会真正影响会话
|
|
18
|
+
- 长会话、memory、audit、budget 和 governance 信号如何落盘
|
|
19
|
+
|
|
20
|
+
## 2. 当前运行时分层
|
|
21
|
+
|
|
22
|
+
### 2.1 配置入口
|
|
23
|
+
|
|
24
|
+
- `hooks/hooks.json`:Claude hooks 的唯一声明式配置入口
|
|
25
|
+
- `scripts/install-platform.js`:legacy Claude 安装时负责复制 `scripts/hooks/`、清理旧 `.py` 引用,并把当前 JS hooks 合并到 `settings.json`
|
|
26
|
+
|
|
27
|
+
### 2.2 执行入口
|
|
28
|
+
|
|
29
|
+
- `scripts/hooks/session-start-bootstrap.js`:SessionStart bootstrap
|
|
30
|
+
- `scripts/hooks/session-start.js`:加载 `docs/memory/project-context.md`、session summary 等上下文
|
|
31
|
+
- `scripts/hooks/pre-compact.js`:PreCompact 前的高价值状态整理
|
|
32
|
+
- `scripts/hooks/suggest-compact.js`:在长会话中提示人工 compact
|
|
33
|
+
- `scripts/hooks/session-end.js`:Stop 阶段持久化 session 摘要
|
|
34
|
+
- `scripts/hooks/session-end-marker.js`:SessionEnd 生命周期标记
|
|
35
|
+
- `scripts/hooks/cost-tracker.js`:记录 token / cost 指标
|
|
36
|
+
- `scripts/hooks/governance-capture.js`:采集治理与审批相关信号
|
|
37
|
+
- `scripts/hooks/mcp-health-check.js`:MCP 健康检查
|
|
38
|
+
- `scripts/hooks/quality-gate.js`:编辑后质量门禁
|
|
39
|
+
|
|
40
|
+
### 2.3 状态与存储
|
|
41
|
+
|
|
42
|
+
- `scripts/lib/state-store/`:runtime 状态存储入口
|
|
43
|
+
- `docs/memory/project-context.md`:主链共享项目上下文
|
|
44
|
+
- `docs/memory/decisions.md`、`docs/memory/lessons-learned.md`:轻量项目记忆
|
|
45
|
+
- `docs/memory/sessions/`:session continuity 落点
|
|
46
|
+
- `~/.claude/metrics/costs.jsonl`:cost tracker 输出
|
|
47
|
+
- `~/.claude/memory/audit/`:本地 audit 查询输入
|
|
48
|
+
|
|
49
|
+
## 3. 关键能力说明
|
|
50
|
+
|
|
51
|
+
### 3.1 Session memory
|
|
52
|
+
|
|
53
|
+
- 触发点:`session-start-bootstrap.js`、`session-start.js`、`session-end.js`
|
|
54
|
+
- 作用:会话开始时恢复项目上下文、最近摘要和待办;Stop 阶段把本轮摘要写回 session continuity 文件
|
|
55
|
+
- 用户侧影响:重新进入任务时,更容易保持 `/team-plan`、`/team-execute`、`/team-review` 的连续性
|
|
56
|
+
|
|
57
|
+
### 3.2 Governance capture
|
|
58
|
+
|
|
59
|
+
- 触发点:`governance-capture.js`
|
|
60
|
+
- 作用:检测 secrets、approval-required 操作、敏感路径写入等治理信号
|
|
61
|
+
- 用户侧影响:在高风险 Bash / Edit / Write 行为上留痕,可为后续 review 或 release 说明补证据
|
|
62
|
+
|
|
63
|
+
### 3.3 Cost awareness
|
|
64
|
+
|
|
65
|
+
- 触发点:`cost-tracker.js`
|
|
66
|
+
- 作用:记录 token、模型与成本估算,辅助长会话预算判断
|
|
67
|
+
- 用户侧影响:可以用 `node scripts/query-audit-logs.js --summary-only` 或直接查看 `~/.claude/metrics/costs.jsonl` 了解会话成本
|
|
68
|
+
|
|
69
|
+
### 3.4 Compact readiness
|
|
70
|
+
|
|
71
|
+
- 触发点:`suggest-compact.js`、`pre-compact.js`
|
|
72
|
+
- 作用:在进入 compact 前整理状态,在高上下文压力下给出压缩提示
|
|
73
|
+
- 用户侧影响:长任务中更容易知道什么时候该手动 compact,而不是在主链中段突然失去上下文
|
|
74
|
+
|
|
75
|
+
### 3.5 MCP health
|
|
76
|
+
|
|
77
|
+
- 触发点:`mcp-health-check.js`
|
|
78
|
+
- 作用:在 MCP 调用前后记录健康状态,降低“工具看起来可用但实际已失效”的误判
|
|
79
|
+
|
|
80
|
+
### 3.6 Quality after edits
|
|
81
|
+
|
|
82
|
+
- 触发点:`quality-gate.js` 以及 Stop 阶段的格式化 / typecheck hook
|
|
83
|
+
- 作用:在 Edit / Write 后补做最小质量闸口,避免把明显坏状态直接带到 `/handoff` 或 `/team-review`
|
|
84
|
+
|
|
85
|
+
## 4. 一条典型 runtime 流水线
|
|
86
|
+
|
|
87
|
+
1. SessionStart:`session-start-bootstrap.js` 调度 `session-start.js`
|
|
88
|
+
2. 读取 `docs/memory/project-context.md` 与 session continuity 文件
|
|
89
|
+
3. 用户通过 `/team-help` 判断当前该进入哪条主链命令
|
|
90
|
+
4. `/team-intake`、`/team-plan`、`/team-execute` 等命令通过 `artifact:persist` 把正式输出落到 `docs/artifacts/`
|
|
91
|
+
5. PreToolUse / PostToolUse 期间,`governance-capture.js`、`mcp-health-check.js`、质量与观察类 hooks 持续提供后台信号
|
|
92
|
+
6. 长会话中,`suggest-compact.js` 给出 compact 提示,`pre-compact.js` 在真正 compact 前整理关键状态
|
|
93
|
+
7. Stop:`session-end.js`、`cost-tracker.js` 等 JS hooks 在响应结束后持久化摘要与指标
|
|
94
|
+
8. SessionEnd:`session-end-marker.js` 记录生命周期收尾
|
|
95
|
+
|
|
96
|
+
## 5. 和 `/team-*` 主链是什么关系
|
|
97
|
+
|
|
98
|
+
- `/team-help` 是唯一公开入口:负责根据 artifacts、handoff 和当前阶段决定下一步
|
|
99
|
+
- `artifact:persist` 是主链输出的唯一落盘通道:负责把 PRD、delivery-plan、execute-log、handoff、release/closeout artifact 写入仓库
|
|
100
|
+
- runtime hooks 不是第二套 workflow:它们只负责补上下文、记忆、治理和质量信号,不替代 `/team-*`
|
|
101
|
+
|
|
102
|
+
## 6. 当前推荐查看路径
|
|
103
|
+
|
|
104
|
+
- 想先看公开命令与能力映射:看 [command-and-capability-matrix.md](command-and-capability-matrix.md)
|
|
105
|
+
- 想先看接入与落盘动作:看 [team-skills-usage.md](team-skills-usage.md) 和 [project-onboarding.md](project-onboarding.md)
|
|
106
|
+
- 想先体验 Claude:看 [claude-quick-start.md](claude-quick-start.md)
|
|
107
|
+
- 想先理解 ECC 增强层与主链如何配合:看 [ecc-harness-usage.md](ecc-harness-usage.md)
|
|
108
|
+
|
|
109
|
+
## 7. 常见误解
|
|
110
|
+
|
|
111
|
+
- 误解一:runtime 还是 Python hooks。当前 active surface 已切到 `scripts/hooks/*.js`
|
|
112
|
+
- 误解二:`/team-help` 只是说明文案。它现在是公开主链唯一入口
|
|
113
|
+
- 误解三:memory 只靠 hook 自动生成。正式任务产出仍必须通过 `artifact:persist` 写入 `docs/artifacts/`、`docs/adr/` 和 `docs/memory/`
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# SBOM 生成与发布门禁手册
|
|
2
|
+
|
|
3
|
+
本手册承接 `anchore/sbom-action` 的工程实践,用于把构建产物、容器镜像和发布制品的 SBOM 生成、归档与发布追溯接入交付链。它补的是“我们到底交付了什么”的可追溯证据,不替代漏洞扫描、代码 review 或发布放行判断。
|
|
4
|
+
|
|
5
|
+
## 适用场景
|
|
6
|
+
|
|
7
|
+
- 仓库会构建二进制、容器镜像、压缩包或其他可发布产物。
|
|
8
|
+
- 团队希望把产物依赖清单从“构建时临时知道”变成可归档、可追溯、可对外或对内复查的交付物。
|
|
9
|
+
- 发布链已经开始关注镜像扫描、依赖门禁或供应链治理,希望再补齐 SBOM 这一层证据。
|
|
10
|
+
|
|
11
|
+
## 不适用场景
|
|
12
|
+
|
|
13
|
+
- 当前仓库没有稳定产物,只有纯脚本或一次性实验代码,却为了追热点强行接 SBOM。
|
|
14
|
+
- 团队还没有明确“SBOM 产出后放在哪里、谁消费、如何验证”的责任链。
|
|
15
|
+
- 期望只靠 SBOM 文件就回答漏洞、许可证或 provenance 的全部问题。
|
|
16
|
+
|
|
17
|
+
## 推荐落地方式
|
|
18
|
+
|
|
19
|
+
1. 先从最关键的发布产物开始,不要一开始把所有中间产物都做成 SBOM。
|
|
20
|
+
2. 第一阶段优先固定三件事:
|
|
21
|
+
- 生成时机:构建后、发布前
|
|
22
|
+
- 产物范围:二进制、容器镜像或压缩包
|
|
23
|
+
- 存放位置:workflow artifact、release asset 或制品仓库
|
|
24
|
+
3. 将 SBOM 与现有链路分层:
|
|
25
|
+
- `dependency-review-gates` 负责依赖变更与许可证风险
|
|
26
|
+
- `trivy-security-gates` 负责漏洞、misconfiguration 和 secret 扫描
|
|
27
|
+
- `scorecard-supply-chain-gates` 负责仓库级供应链基线
|
|
28
|
+
- SBOM 负责交付产物的成分清单与后续追溯
|
|
29
|
+
4. 若团队后续要接 attestation、签名或 provenance,先把 SBOM 生成稳定下来,再扩展到证明链。
|
|
30
|
+
5. 结果必须回写到 `/team-release`、发布记录或制品说明中,不让 SBOM 只停在 CI artifact 目录里。
|
|
31
|
+
|
|
32
|
+
## 最小门禁模型
|
|
33
|
+
|
|
34
|
+
- `subject layer`:需要发布或归档的制品
|
|
35
|
+
- `inventory layer`:SBOM 内容、格式和生成时间点
|
|
36
|
+
- `publication layer`:SBOM 如何随产物一起归档、上传或发布
|
|
37
|
+
- `decision layer`:`devops-engineer`、`tech-lead` 决定是否把“缺失 SBOM”视为阻塞项
|
|
38
|
+
|
|
39
|
+
重点不是“生成过一次”,而是让交付物和 SBOM 始终能对应上。
|
|
40
|
+
|
|
41
|
+
## 重点检查项
|
|
42
|
+
|
|
43
|
+
- 是否为真正要交付的产物生成了 SBOM,而不是只对源码目录做一次泛扫
|
|
44
|
+
- SBOM 是否和产物版本、镜像 digest 或 release 记录正确关联
|
|
45
|
+
- 团队是否统一了格式和存储策略,例如 SPDX、CycloneDX、artifact 或 release asset
|
|
46
|
+
- 重新构建或重发版时,SBOM 是否会同步更新,而不是长期沿用旧文件
|
|
47
|
+
- SBOM 是否能被后续漏洞扫描、归档审计或第三方追溯流程消费
|
|
48
|
+
|
|
49
|
+
## 反模式
|
|
50
|
+
|
|
51
|
+
- 生成了 SBOM,但没人知道文件在哪、对应哪个版本或哪个镜像 digest。
|
|
52
|
+
- 只在源码层生成一次 SBOM,却不覆盖真正发布出去的产物。
|
|
53
|
+
- 把 SBOM 当漏洞扫描报告使用,忽略它本质上是“成分清单”。
|
|
54
|
+
- 发布链已经依赖镜像和二进制,却没有把 SBOM 和版本记录一起保存。
|
|
55
|
+
|
|
56
|
+
## 输出回落
|
|
57
|
+
|
|
58
|
+
- 构建阶段:在构建记录中注明哪些产物生成了 SBOM、生成格式和存放位置。
|
|
59
|
+
- 发布阶段:把 SBOM 链接、文件名或 artifact 位置写入 `/team-release` 的发布方案、检查结果或放行结论。
|
|
60
|
+
- 审计阶段:若团队需要事后追溯某个版本的成分清单,必须能从 release 记录直接定位到对应 SBOM。
|
|
61
|
+
|
|
62
|
+
## 许可证与使用边界
|
|
63
|
+
|
|
64
|
+
- `anchore/sbom-action` 采用 Apache-2.0。
|
|
65
|
+
- 如果后续要把 SBOM 发布到对外仓库、镜像 registry 或和 attestation 绑定,需要再单独核对产物可见性、格式规范与合规要求。
|
|
66
|
+
|
|
67
|
+
## 参考来源
|
|
68
|
+
|
|
69
|
+
- [anchore/sbom-action](https://github.com/anchore/sbom-action)
|
|
70
|
+
- [trivy-security-gates.md](trivy-security-gates.md)
|
|
71
|
+
- [scorecard-supply-chain-gates.md](scorecard-supply-chain-gates.md)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Scorecard 供应链基线门禁手册
|
|
2
|
+
|
|
3
|
+
本手册承接 `ossf/scorecard-action` 的工程实践,用于把仓库级供应链基线检查接入安全 review、workflow 评审和发布治理。它补的是“仓库和交付链本身是否健康”的证据,不替代依赖、代码、镜像或 IaC 扫描。
|
|
4
|
+
|
|
5
|
+
## 适用场景
|
|
6
|
+
|
|
7
|
+
- 变更涉及 `.github/workflows/`、GitHub Actions 权限、release automation、签名流程或第三方 action 引入。
|
|
8
|
+
- 团队希望把分支保护、token 权限、action pinning、发布流程和基本供应链卫生前置成明确检查项。
|
|
9
|
+
- 仓库已经有依赖、代码或镜像扫描,但还缺“仓库级供应链基线”视角。
|
|
10
|
+
|
|
11
|
+
## 不适用场景
|
|
12
|
+
|
|
13
|
+
- 仓库没有 GitHub Actions、没有发布工作流,也不依赖 GitHub 原生仓库治理能力。
|
|
14
|
+
- 团队还没有能力处理基础治理项,却期望靠一个分数替代具体整改。
|
|
15
|
+
- 只想把 Scorecard 当徽章或数字展示,而不是把它转成可执行的 triage 结论。
|
|
16
|
+
|
|
17
|
+
## 推荐落地方式
|
|
18
|
+
|
|
19
|
+
1. 先把 Scorecard 当“基线审计”,不要直接把总分当门禁。
|
|
20
|
+
2. 第一阶段优先关注高信号检查项:
|
|
21
|
+
- `Token-Permissions`
|
|
22
|
+
- `Pinned-Dependencies`
|
|
23
|
+
- `Branch-Protection`
|
|
24
|
+
- `Dangerous-Workflow`
|
|
25
|
+
- `Binary-Artifacts`
|
|
26
|
+
3. 将 Scorecard 与现有安全链分层:
|
|
27
|
+
- `dependency-review-gates` 负责依赖漏洞与许可证变化
|
|
28
|
+
- `codeql-pr-security-gates` 负责代码级语义问题
|
|
29
|
+
- `actionlint-workflow-gates` 负责 workflow 语法、结构和常见 shell 误用
|
|
30
|
+
- `github-token-permissions-baseline` 负责把 workflow 真实运行收敛成 job 级最小权限建议
|
|
31
|
+
- `zizmor-workflow-audits` 负责 workflow 安全面的细粒度审计
|
|
32
|
+
- `trivy-security-gates` 负责镜像、文件系统和 IaC 风险
|
|
33
|
+
- Scorecard 负责仓库、workflow 和供应链基线
|
|
34
|
+
- `runner-egress-hardening` 负责 GitHub Actions runner 运行时的出站访问控制与监测
|
|
35
|
+
4. 若仓库是私有仓库或使用结果发布功能,先确认 GitHub 环境和权限要求,不要默认 public repo 的默认做法可直接照搬。
|
|
36
|
+
5. 结果必须回写到 `/code-review`、`/team-review` 或架构/安全治理结论中,不让供应链基线结果只停在 action 页面里。
|
|
37
|
+
|
|
38
|
+
## 最小门禁模型
|
|
39
|
+
|
|
40
|
+
- `repo layer`:仓库策略、workflow 配置、依赖 pinning、发布与签名流程
|
|
41
|
+
- `score layer`:Scorecard 检查项与结果
|
|
42
|
+
- `triage layer`:确认哪些是当前变更新增问题、哪些是存量治理债务
|
|
43
|
+
- `decision layer`:安全评审角色、`code-reviewer`、`tech-lead` 决定是否阻塞或进入治理 backlog
|
|
44
|
+
|
|
45
|
+
重点不是追总分,而是让关键检查项变成稳定约束。
|
|
46
|
+
|
|
47
|
+
## 重点检查项
|
|
48
|
+
|
|
49
|
+
- GitHub token 是否最小权限,是否存在过宽 `contents: write`、`packages: write` 等权限
|
|
50
|
+
- 第三方 action 是否 pin 到 commit SHA,而不是只用浮动 tag
|
|
51
|
+
- 分支保护、必需 review、关键 CI 是否真正启用
|
|
52
|
+
- workflow 是否存在危险触发方式、脚本注入或不受控的外部输入
|
|
53
|
+
- 发布流程是否绕过签名、审计或 artifact provenance 要求
|
|
54
|
+
|
|
55
|
+
## 反模式
|
|
56
|
+
|
|
57
|
+
- 只盯总分涨跌,不分析具体是哪一个检查项失分。
|
|
58
|
+
- 发现 workflow / token 风险后,只记在 action 日志里,没有回到 review 或治理计划。
|
|
59
|
+
- 仓库已经大量使用第三方 action,却不做 pinning 和权限收敛。
|
|
60
|
+
- 把存量治理债务和本次变更新增风险混在一起,导致所有 PR 都被历史问题拖死。
|
|
61
|
+
|
|
62
|
+
## 输出回落
|
|
63
|
+
|
|
64
|
+
- PR 阶段:把高优先级 Scorecard 检查项和 triage 结论写入 review 摘要。
|
|
65
|
+
- 团队协作:在 `/team-review` 中说明哪些问题属于仓库级供应链基线、哪些需要后续治理而不是阻塞当前功能。
|
|
66
|
+
- 治理阶段:若 workflow、发布权限或分支保护存在结构性风险,应沉淀到 ADR、治理待办或发布整改计划。
|
|
67
|
+
|
|
68
|
+
## 许可证与使用边界
|
|
69
|
+
|
|
70
|
+
- `ossf/scorecard-action` 本身采用 Apache-2.0。
|
|
71
|
+
- 公开仓库与私有仓库的启用条件、结果发布和权限要求不同,接入前要先核对仓库类型与 GitHub 能力边界。
|
|
72
|
+
|
|
73
|
+
## 参考来源
|
|
74
|
+
|
|
75
|
+
- [ossf/scorecard-action](https://github.com/ossf/scorecard-action)
|
|
76
|
+
- [dependency-review-gates.md](dependency-review-gates.md)
|
|
77
|
+
- [codeql-pr-security-gates.md](codeql-pr-security-gates.md)
|
|
78
|
+
- [actionlint-workflow-gates.md](actionlint-workflow-gates.md)
|
|
79
|
+
- [github-token-permissions-baseline.md](github-token-permissions-baseline.md)
|
|
80
|
+
- [zizmor-workflow-audits.md](zizmor-workflow-audits.md)
|
|
81
|
+
- [trivy-security-gates.md](trivy-security-gates.md)
|
|
82
|
+
- [runner-egress-hardening.md](runner-egress-hardening.md)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Secret Scanning 门禁手册
|
|
2
|
+
|
|
3
|
+
本手册承接 `gitleaks/gitleaks` 的工程实践,用于把仓库级 secret 扫描接入 PR、默认分支与发布流程。它补的是“在代码进入主链前尽早发现硬编码密钥、token、凭证和误提交 secret”这一层,不替代人工 review、依赖门禁、运行时密钥管理或发布放行判断。
|
|
4
|
+
|
|
5
|
+
## 适用场景
|
|
6
|
+
|
|
7
|
+
- PR 直接涉及 `.env`、配置文件、示例文件、测试数据、脚本、CI 配置或文档中的敏感字段。
|
|
8
|
+
- 仓库里已经发生过 secret 误提交,希望把“发现后再处理”前置成“合并前先拦住”。
|
|
9
|
+
- 需要同时扫描当前工作区、PR diff 和历史提交,区分新引入问题与既有存量问题。
|
|
10
|
+
- 仓库里存在归档文件、压缩包或嵌套制品,担心 secret 被打包后藏进历史产物。
|
|
11
|
+
- 团队希望为 false positives 建立稳定 baseline,而不是每次都手工重判全部命中。
|
|
12
|
+
|
|
13
|
+
## 不适用场景
|
|
14
|
+
|
|
15
|
+
- 仓库本身不承载源码或配置,只是一个运行时消费端,且 secret 只存在于外部密钥系统中。
|
|
16
|
+
- 团队还没有明确 secret 发现后由谁响应、谁负责旋转、谁负责清理历史。
|
|
17
|
+
- 期望 secret 扫描替代密钥管理、权限收敛、发布审计或人工安全 review。
|
|
18
|
+
- 团队无法接受任何形式的误报却又不愿维护 baseline、allowlist 或 triage 流程。
|
|
19
|
+
|
|
20
|
+
## 推荐落地方式
|
|
21
|
+
|
|
22
|
+
1. 先明确扫描边界,不要一上来把所有路径都当成阻塞项:
|
|
23
|
+
- PR 阶段优先扫 diff
|
|
24
|
+
- 默认分支定期扫全仓库
|
|
25
|
+
- 发现历史问题时再单独跑历史扫描和清理
|
|
26
|
+
2. 第一轮先建立 baseline,再谈门禁:
|
|
27
|
+
- 把已知存量命中固化成 baseline 或忽略列表
|
|
28
|
+
- 只对新增命中、严重命中或高可信命中设置阻塞
|
|
29
|
+
- 给每条 baseline 记录 owner、原因和到期复核时间
|
|
30
|
+
3. 将 secret scanning 与现有安全链分层:
|
|
31
|
+
- `dependency-review-gates` 负责依赖和许可证变化
|
|
32
|
+
- `codeql-pr-security-gates` 负责代码级语义问题
|
|
33
|
+
- `trivy-security-gates` 负责镜像、文件系统和 IaC 中的 secret / misconfiguration
|
|
34
|
+
- `secret-scanning-gates` 负责源码仓库、PR diff 与历史中的硬编码 secret
|
|
35
|
+
- 安全评审角色、`/team-review` 负责最终判断与阻塞决策
|
|
36
|
+
4. 命中后不要只“报出来”:
|
|
37
|
+
- 先确认命中是否为真实 secret
|
|
38
|
+
- 再判断是否需要立刻 rotate、revoke 或 purge 历史
|
|
39
|
+
- 需要时把清理、替换和复查拆成独立任务
|
|
40
|
+
5. 结果必须回写到 PR、review 结论或发布记录,不要只停在扫描输出里。
|
|
41
|
+
|
|
42
|
+
## 最小门禁模型
|
|
43
|
+
|
|
44
|
+
- `target layer`:源码、配置、脚本、文档、测试数据和归档文件
|
|
45
|
+
- `scan layer`:gitleaks 对当前内容、diff 或历史做 secret 检测
|
|
46
|
+
- `baseline layer`:已知存量命中、误报和临时豁免
|
|
47
|
+
- `triage layer`:确认命中是否真实、是否新增、是否阻塞
|
|
48
|
+
- `decision layer`:安全评审角色、`tech-lead`、`devops-engineer` 决定是否放行
|
|
49
|
+
|
|
50
|
+
重点不是“有没有命中”,而是这条命中是否是新增、是否是真 secret、是否已经被接管处理。
|
|
51
|
+
|
|
52
|
+
## 重点检查项
|
|
53
|
+
|
|
54
|
+
- 是否出现硬编码 token、API key、密码、私钥、访问凭证或 session 信息
|
|
55
|
+
- 是否把真实 secret 写进示例、测试数据、文档或脚本中
|
|
56
|
+
- 是否在归档文件、压缩包或嵌套制品里藏入了 secret
|
|
57
|
+
- 是否只是旧 baseline 复现,还是本次变更引入的新问题
|
|
58
|
+
- 是否存在高置信规则命中,但还需要人工确认上下文才能判断是否真漏
|
|
59
|
+
- 是否有重复出现的 secret 类型,说明仓库里存在系统性泄漏模式
|
|
60
|
+
|
|
61
|
+
## 反模式
|
|
62
|
+
|
|
63
|
+
- 只看扫描结果条数,不区分真实命中、误报和存量 baseline。
|
|
64
|
+
- 因为误报多就直接关闭 secret 扫描,最后让真正泄漏无人发现。
|
|
65
|
+
- 命中以后只删代码,不做 token 轮换、访问撤销或历史清理。
|
|
66
|
+
- 只扫 PR diff,不扫默认分支和历史,导致旧 secret 一直留在仓库里。
|
|
67
|
+
- baseline 永久不复核,最后把所有问题都变成“已知问题”。
|
|
68
|
+
|
|
69
|
+
## 输出回落
|
|
70
|
+
|
|
71
|
+
- PR 阶段:把新增命中、误报判断和 triage 结论写入 review 摘要。
|
|
72
|
+
- 评审阶段:在 `/team-review` 中明确哪些命中来自 secret scanning,哪些已被人工确认、豁免或阻塞。
|
|
73
|
+
- 发布阶段:若仍存在未关闭的高风险命中,必须回写到 `/team-release` 的风险、放行结论或后续观察项。
|
|
74
|
+
- 事故处理:若确认泄漏,必须同步到 token 轮换、密钥撤销、历史清理和复查任务。
|
|
75
|
+
|
|
76
|
+
## 许可证与使用边界
|
|
77
|
+
|
|
78
|
+
- `gitleaks/gitleaks` 采用 MIT License。
|
|
79
|
+
- 启用前应确认仓库扫描范围、baseline 管理方式、误报 triage 责任人和 secret 轮换流程。
|
|
80
|
+
- 对组织级仓库、历史扫描和高敏感仓库,建议先用非阻塞模式观察一轮,再逐步收紧门禁。
|
|
81
|
+
|
|
82
|
+
## 参考来源
|
|
83
|
+
|
|
84
|
+
- [gitleaks/gitleaks](https://github.com/gitleaks/gitleaks)
|
|
85
|
+
- [gitleaks/gitleaks-action](https://github.com/gitleaks/gitleaks-action)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "0.1.0"
|
|
3
|
+
status: draft
|
|
4
|
+
created: 2026-03-29
|
|
5
|
+
updated: 2026-03-29
|
|
6
|
+
owner: 工程团队
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 安全与合规平台演示执行记录
|
|
10
|
+
|
|
11
|
+
本文记录一条安全 / 合规平台演示路径,重点展示团队如何把门禁、例外、审计证据和放行条件整理成正式治理链路。
|
|
12
|
+
|
|
13
|
+
## 1. 场景定义
|
|
14
|
+
|
|
15
|
+
- 背景:仓库已具备多种安全门禁,但缺少统一的分层结论与放行规则
|
|
16
|
+
- 目标:把安全结论从“工具输出”升级成“可 review、可 release、可审计”的治理结果
|
|
17
|
+
|
|
18
|
+
## 2. 关键阶段
|
|
19
|
+
|
|
20
|
+
- `/team-intake`:锁定门禁范围、权限边界和放行条件
|
|
21
|
+
- `/team-plan`:拆风险分层、例外管理和 release 记录
|
|
22
|
+
- `/tdd`:先定义阻塞项、例外项、观察项
|
|
23
|
+
- `/verify`:汇总门禁结果与审计证据
|
|
24
|
+
- `/team-review`、`/team-release`:形成正式放行结论
|
|
25
|
+
|
|
26
|
+
## 3. 校验结果
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Validation passed.
|
|
30
|
+
- Roles: 8
|
|
31
|
+
- Shared skills: 3
|
|
32
|
+
- ECC skills: 9
|
|
33
|
+
- Private overlay skills: not shipped in public repo
|
|
34
|
+
- Specialist agents: 27
|
|
35
|
+
- Generated artifacts: 70
|
|
36
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "0.1.0"
|
|
3
|
+
status: draft
|
|
4
|
+
created: 2026-03-29
|
|
5
|
+
updated: 2026-03-29
|
|
6
|
+
owner: 工程团队
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 安全与合规平台演示剧本
|
|
10
|
+
|
|
11
|
+
本文是一份可直接照着讲的演示脚本,面向安全门禁、权限治理、审计证据和放行规则场景。
|
|
12
|
+
|
|
13
|
+
## 1. 演示目标
|
|
14
|
+
|
|
15
|
+
- 说明阻塞项、例外项、观察项必须分层
|
|
16
|
+
- 说明 `/tdd` 如何前置锁定放行标准
|
|
17
|
+
- 说明 `/verify` 如何把门禁结果转成 review / release 结论
|
|
18
|
+
|
|
19
|
+
## 2. 演示脚本
|
|
20
|
+
|
|
21
|
+
### Step 1. 先讲风险分层
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
安全治理最大的误区不是工具不够,而是把阻塞项、例外项和观察项混成一个结论。
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Step 2. 用 `/team-intake` 锁目标
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
/team-intake
|
|
31
|
+
目标:补齐安全基线与合规审计仓库的门禁、证据和放行规则
|
|
32
|
+
范围:安全扫描、权限基线、例外管理、release 说明、测试计划
|
|
33
|
+
不做:无关业务功能改造
|
|
34
|
+
约束:必须区分阻塞风险、可接受例外、观察项和最终放行条件
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Step 3. 用 `/tdd` 锁放行标准
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
/tdd
|
|
41
|
+
基于当前 plan 结果,先定义阻塞项、可接受例外、观察项、审计证据和最终放行条件。
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Step 4. 用 `/verify` 收口
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
/verify
|
|
48
|
+
请基于当前安全改动,输出门禁结果、权限风险、例外项、证据留存和可直接进入 /team-review 或 /team-release 的结论。
|
|
49
|
+
```
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "0.1.0"
|
|
3
|
+
status: draft
|
|
4
|
+
created: 2026-03-29
|
|
5
|
+
updated: 2026-03-29
|
|
6
|
+
owner: 工程团队
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 安全与合规平台演练
|
|
10
|
+
|
|
11
|
+
本文演示一个以安全门禁、权限治理、审计证据和放行规则为核心的仓库,如何从风险澄清到 review / release 收口完整跑通。
|
|
12
|
+
|
|
13
|
+
## 1. 场景
|
|
14
|
+
|
|
15
|
+
- 仓库当前主要维护安全扫描、权限基线、例外管理和审计记录
|
|
16
|
+
- 团队准备补齐安全门禁与发布放行规则
|
|
17
|
+
- 目标不是改业务功能,而是把安全结论治理成可分层解释、可复盘、可放行的状态
|
|
18
|
+
|
|
19
|
+
## 2. 推荐链路
|
|
20
|
+
|
|
21
|
+
1. `/team-intake`
|
|
22
|
+
2. `/team-plan`
|
|
23
|
+
3. `/tdd`
|
|
24
|
+
4. `/team-execute`
|
|
25
|
+
5. `/verify`
|
|
26
|
+
6. `/team-review`
|
|
27
|
+
7. `/team-release`
|
|
28
|
+
|
|
29
|
+
## 3. 第一步:/team-intake
|
|
30
|
+
|
|
31
|
+
### 输入示例
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
/team-intake
|
|
35
|
+
目标:补齐安全基线与合规审计仓库的门禁、证据和放行规则
|
|
36
|
+
范围:安全扫描、权限基线、例外管理、release 说明、测试计划
|
|
37
|
+
不做:无关业务功能改造
|
|
38
|
+
约束:必须区分阻塞风险、可接受例外、观察项和最终放行条件
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 期望输出重点
|
|
42
|
+
|
|
43
|
+
- 识别这是安全治理任务,而不是普通交付任务
|
|
44
|
+
- 明确参与角色至少包括 `tech-lead`、`architect`、`qa-engineer`、`devops-engineer`
|
|
45
|
+
- 风险应聚焦权限边界、审计缺口、放行标准不清和例外项失控
|
|
46
|
+
|
|
47
|
+
## 4. 第二步:/team-plan
|
|
48
|
+
|
|
49
|
+
### 需要拆清的动作
|
|
50
|
+
|
|
51
|
+
- 安全门禁与风险分层
|
|
52
|
+
- 权限边界与例外管理
|
|
53
|
+
- 审计证据和 release 记录
|
|
54
|
+
- review / release 中的接受风险位置
|
|
55
|
+
|
|
56
|
+
## 5. 第三步:/tdd
|
|
57
|
+
|
|
58
|
+
重点是先锁风险分层和放行标准:
|
|
59
|
+
|
|
60
|
+
- 哪些是阻塞项
|
|
61
|
+
- 哪些是可接受例外
|
|
62
|
+
- 哪些只是观察项
|
|
63
|
+
- 哪些证据必须进入 review / release
|
|
64
|
+
|
|
65
|
+
## 6. 第四步:/team-execute
|
|
66
|
+
|
|
67
|
+
执行阶段通常包含:
|
|
68
|
+
|
|
69
|
+
- 调整扫描与基线规则
|
|
70
|
+
- 收敛权限与例外说明
|
|
71
|
+
- 更新 review / release 模板与证据位置
|
|
72
|
+
|
|
73
|
+
## 7. 第五步:/verify
|
|
74
|
+
|
|
75
|
+
Verify 阶段要回答:
|
|
76
|
+
|
|
77
|
+
- 当前阻塞项有哪些
|
|
78
|
+
- 例外项是否有正式接受记录
|
|
79
|
+
- 审计证据是否可追溯
|
|
80
|
+
- 当前是否满足进入 review / release 的条件
|
|
81
|
+
|
|
82
|
+
## 8. 第六步:/team-review 与 /team-release
|
|
83
|
+
|
|
84
|
+
### Review 阶段要回答
|
|
85
|
+
|
|
86
|
+
- 当前是否还存在阻塞发布的安全风险
|
|
87
|
+
- 哪些例外暂时接受,谁负责承担
|
|
88
|
+
|
|
89
|
+
### Release 阶段要回答
|
|
90
|
+
|
|
91
|
+
- 放行条件是什么
|
|
92
|
+
- 回退或临时降级路径是什么
|
|
93
|
+
|
|
94
|
+
## 9. 常见错误
|
|
95
|
+
|
|
96
|
+
- 把阻塞项和观察项混成一个结论
|
|
97
|
+
- 工具通过了,但没有正式放行说明
|
|
98
|
+
- 例外项没有责任人和期限
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# SLSA Generator 模式手册
|
|
2
|
+
|
|
3
|
+
本手册承接 `slsa-framework/slsa-github-generator` 的工程实践,用于把 GitHub Actions 侧的 provenance 生成模式纳入供应链治理链。它补的是“如何把构建来源、工作流和产物绑定成可追溯证据”这一层,不替代 `artifact-attestation-gates`、`slsa-verification-gates`、`cosign-signing-gates` 或人工放行判断。
|
|
4
|
+
|
|
5
|
+
## 适用场景
|
|
6
|
+
|
|
7
|
+
- 仓库的正式构建和发布已经主要运行在 GitHub Actions 上。
|
|
8
|
+
- 团队希望为 release artifact、镜像或构建产物生成 provenance / attestation,并让后续验证有稳定输入。
|
|
9
|
+
- 需要把 workflow、runner、commit、subject digest 和发布产物串成一条可审计的证据链。
|
|
10
|
+
- 希望先补“生成模式”和“证据结构”,再决定是否上更强的验证或策略强制。
|
|
11
|
+
|
|
12
|
+
## 不适用场景
|
|
13
|
+
|
|
14
|
+
- 当前还没有稳定的 GitHub Actions 构建链,却为了形式完整性强行引入 provenance 生成。
|
|
15
|
+
- 团队还没定好产物命名、归档位置或 release 记录结构。
|
|
16
|
+
- 期望这个手册替代 SBOM、签名、验证或集群侧强制策略。
|
|
17
|
+
- 仓库主要不在 GitHub Actions 上构建,或者生成链条无法稳定拿到 subject 和 workflow 信息。
|
|
18
|
+
|
|
19
|
+
## 推荐落地方式
|
|
20
|
+
|
|
21
|
+
1. 先把 provenance 生成限定在少数正式制品,不要一开始覆盖所有 job。
|
|
22
|
+
2. 第一阶段先固定三件事:
|
|
23
|
+
- 哪些产物需要生成 provenance
|
|
24
|
+
- provenance 依赖哪些 workflow 元数据
|
|
25
|
+
- 生成结果存放在哪里、谁来回链
|
|
26
|
+
3. 将生成模式与现有链路分层:
|
|
27
|
+
- `sbom-generation-gates` 负责成分清单
|
|
28
|
+
- `artifact-attestation-gates` 负责构建来源证明
|
|
29
|
+
- `slsa-generator-patterns` 负责 GitHub Actions 侧的生成模式与 workflow 约束
|
|
30
|
+
- `slsa-verification-gates` 负责独立验证 provenance / attestation
|
|
31
|
+
4. 先从“单 workflow、单产物、单发布路径”开始,再逐步扩展到多 job 或多制品。
|
|
32
|
+
5. 结果必须回写到 `/team-release`、发布记录或制品元数据中,不让 provenance 只停在 Actions 运行日志里。
|
|
33
|
+
|
|
34
|
+
## 最小门禁模型
|
|
35
|
+
|
|
36
|
+
- `source layer`:源码仓库、commit、tag 或 release 触发点
|
|
37
|
+
- `workflow layer`:GitHub Actions workflow、job、runner、permissions
|
|
38
|
+
- `provenance layer`:subject、digest、构建输入和生成结果
|
|
39
|
+
- `decision layer`:`devops-engineer`、`tech-lead` 判断生成结果是否满足发布要求
|
|
40
|
+
|
|
41
|
+
重点不是“装了一个 action”,而是生成出来的证据能稳定对应到实际发布产物。
|
|
42
|
+
|
|
43
|
+
## 重点检查项
|
|
44
|
+
|
|
45
|
+
- workflow 是否明确生成对象,而不是把 provenance 当成附带副作用
|
|
46
|
+
- subject、digest 和 release artifact 是否一一对应
|
|
47
|
+
- workflow permissions、runner 选择和产物上传路径是否稳定可审计
|
|
48
|
+
- 生成结果是否有固定命名、归档位置和 release 回链方式
|
|
49
|
+
- 后续验证链是否能直接消费当前生成格式,而不是再做一次临时转换
|
|
50
|
+
|
|
51
|
+
## 反模式
|
|
52
|
+
|
|
53
|
+
- 只在某个 job 里“顺手生成” provenance,却没定义它对应哪个正式产物。
|
|
54
|
+
- workflow 里没有固定 subject 或 digest,导致每次生成出来的证据都不稳定。
|
|
55
|
+
- 生成结果只保存在 Actions summary,没有进入发布记录或审计链。
|
|
56
|
+
- 还没跑通归档和验证链,就先把 provenance 生成当成最终门禁。
|
|
57
|
+
|
|
58
|
+
## 输出回落
|
|
59
|
+
|
|
60
|
+
- 构建阶段:记录哪些正式制品生成了 provenance、workflow 信息和 subject 绑定关系。
|
|
61
|
+
- 发布阶段:把 provenance 文件、URL 或摘要写入 `/team-release` 的检查结果、发布方案或放行结论。
|
|
62
|
+
- 审计阶段:若需要追溯某次发布,必须能从 release 记录定位到 provenance,并反查到对应 workflow 和 commit。
|
|
63
|
+
|
|
64
|
+
## 许可证与使用边界
|
|
65
|
+
|
|
66
|
+
- `slsa-framework/slsa-github-generator` 采用 Apache-2.0。
|
|
67
|
+
- 启用前应确认仓库主要构建平台、GitHub Actions 权限、产物发布位置和团队是否能维护 provenance 归档。
|
|
68
|
+
|
|
69
|
+
## 参考来源
|
|
70
|
+
|
|
71
|
+
- [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator)
|
|
72
|
+
- [artifact-attestation-gates.md](artifact-attestation-gates.md)
|
|
73
|
+
- [slsa-verification-gates.md](slsa-verification-gates.md)
|