You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit eb14f7a
Browse filesBrowse the repository at this point in the historyBrowse files
docs(pm): one fleet-wide rule for security findings — never a card, never a public mechanism (#29178)
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J
<!-- claude-projects-attribution: {"github_login":"huangyiirene"} -->
_Requested by **Irene** · [project
thread](https://claude.ai/code/project/chan_01TJXtQ1tVD26ecLDZxFS67x?thread=cmsg_01TJXtQ1tVD26ecLDZxFS67xHtHg6svQJDqJvPkJe2ehiB)_Fixes#29111
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:新增 pm-dispatch
`references/security-findings.md`,把安全发现的处置写成全车队一条规则;立卡门、server
车道、信箱、`checklist-test`、`os-dev` 改为指向它,`os-dev` 终报新增私有字段
`security_findings`。
- 为什么改:原规则只覆盖 QA runner,其他席位和 dev 仍把安全发现立成公开卡;卡上的方案 B
要求「不立卡、不公开机制、用私有安全公告当私卡」。
- 风险与回滚:只改规则文本和棘轮数据行,不动代码与门禁;回滚即 revert 本 PR。
- 先看:`security-findings.md` 第 3 节(公告步骤);`os-dev.md` 规则 3
新增一行、终报交付句与模板;`filing-gate.md` 例外行。
- 两分钟验证:`pnpm check:pm-skill-ratchet && pnpm
check:pm-skill-id-lint`,预期两者都以绿色判定行结束。
- 需要你做的:无,席位落地。
## What changes
- **New `.claude/skills/pm-dispatch/references/security-findings.md`**:
the card's eight points as one rule per line: what counts, never public
(including the fleet-write relay payload, while its run log prints the
payload), the repository security advisory as the private card,
cross-repo finders, the `os-dev` private field, fix-PR wording, already
public by mistake, and one source with no new gate or label.
- **Advisory steps name only what is real today.** A write-role seat
cannot create a draft advisory and the relay has no advisory op, so the
maintainer creates drafts. A seat never reports or writes an advisory
under its own account. Until the relay's report op (#29160) lands, the
mechanism goes to the maintainer in session (choice A), who files the
report or creates the draft. The relay's report and add-collaborators
ops are named only as "once available". Private repositories stay
session-only.
- **Pointers instead of restatements:**
- `filing-gate.md`: 「安全发现」 joins the not-a-card list, and the
possible-data-leak reach exception leaves the exceptions line, because
such a finding is now a security finding.
- `lanes/server.md`: the security-card disclosure pair becomes one line
that presumes no card.
- `project-forms.md`: keeps 「⛔ 不敲:安全发现」 and adds one pointer line.
- `checklist-test/SKILL.md`: the Guardrails definition and fix-dispatch
text become a pointer. The runner's private report channel and the
run-record line stay.
- `os-dev.md`: the reach exceptions drop `security`, one rule line
routes a security finding to the new private field, the final report
template gains `security_findings`, and the delivery sentence says the
GitHub comment copy carries `withheld` or `none` in that field.
- **`scripts/pm/check-skill-line-ratchet.mjs`**, data rows only
(CEILINGS and the table-row pin):
| File | Before | After | Delta | Basis |
|:--|--:|--:|--:|:--|
| `references/security-findings.md` | — | 55 | new row | ruling of
record, the #29111 card body |
| `references/filing-gate.md` | 66 | 67 | +1 | same ruling, measured
delta |
| `references/project-forms.md` | 54 | 55 | +1 | same ruling, measured
delta |
| `.claude/agents/os-dev.md` | 402 | 405 | +3 | same ruling, measured
delta |
| `references/lanes/server.md` | 87 | 86 | −1 | lowered |
| `.claude/skills/checklist-test/SKILL.md` | 277 | 276 | −1 | lowered |
The card body records the maintainer's 「同意方案,选 B,立卡」 and orders this
text into these files, which makes it the ruling of record for these
raises. Each raise is the measured delta, after paying with the deleted
restatements first: the server lane and checklist-test lose their
restated security text. filing-gate, project-forms and os-dev held no
restatement to pay with.
## Tests
No runtime code changes. Rule text and ratchet data only.
## Acceptance notes
- `pm-dispatch/SKILL.md`'s phase index does not name the new reference:
SKILL.md has no headroom, and readers reach it from the filing gate,
`os-dev`, `checklist-test`, the server lane and the mailbox rules.
carrier: none.
- `lanes/triage.md`'s push case ① already says the mechanism is given in
session only, and the new file cites it unchanged.
- This change carries no finding and no mechanism.
## Verification
All runs were on head `d08fd17e`, tree `objectstack-ai/objectstack`.
<details><summary>Ratchet and id-lint</summary>
- `pnpm check:pm-skill-ratchet` exited 0, and `--self-test` exited 0
with 164 cases (re-run on `d08fd17e` after the patch round).
- `pnpm check:pm-skill-id-lint` exited 0: 107 file(s) clean.
- The first ratchet run was red, because the new file had no table-row
pin. The pin is now its measured 0.
</details>
<details><summary>Derived gate families (dispatch-gates --commands,
reconciled with --ran)</summary>
- On `d578bb13`, before the patch round: `node
scripts/pm/dispatch-gates.mjs --commands` derived 41 commands for 7
paths (115 changed lines). All 41 ran locally and exited 0.
- `pnpm --filter @objectstack/lint run check:doc-formula-expressions`
first exited 3 (PREREQUISITE: `formula`/`lint` dist missing in a fresh
worktree). After building those two packages under the verify lock
(`VERDICT command-exit 0`), it exited 0.
- `node scripts/pm/dispatch-gates.mjs --ran` returned: `41 derived
famil(ies) accounted for — 41 run, 0 NOT-MEASURED (a DERIVED zero — all
41 recorded an exit code and none of them is 3).`
- CI's own families (type-check lanes, Plan Test Core shards, artifact
rosters) are left to this PR's check-runs.
</details>
---
_Generated by [Claude
Code](https://claude.ai/code/session_01J8VVAnteUoDDkfSCMzkkwB)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments