Skip to content

pm-dispatch skill: on a private repository (objectstack-ai/cloud), a security finding is an ordinary issue labelled security, not a draft advisory #30114

Closed

Description

@objectstack-fleet

repo:cloud#2 · os-zhuang · session_0123kRqqdpAJWYMgsgdAJX4G

Filing gate ③, a task on the maintainer's word. Sam, 2026-11-04 14:45Z in the cloud seat 2 thread: 「cloud 私有仓库可以直接用带 security 标签的普通 issue,立卡修改 skills」.

Reader: the domain:skills lane (.claude/skills/pm-dispatch/references/security-findings.md, plus any file that points to it). Suggested priority p2; triage decides.

维护者速读

现在 pm-dispatch 规定,安全发现「永不立卡」,只能写成仓库的草稿安全公告。但中继对 cloud 建公告会返回 404,所以 cloud 的发现一直是在对话里口头交给你,修复走无卡派发令。你的裁定是:cloud 这类私有仓库,直接用带 security 标签的普通 issue。这张卡就是把 skill 里的规则改成这样。

Ruling to encode

For a finding whose affected repository is private (today: objectstack-ai/cloud):

  • The private record is an ordinary issue in that repository, carrying the security label. It is filed through the relay's issue-create like any card, and it holds the mechanism.
  • The fix is dispatched from that issue like any card, at effort xhigh. It needs no card-less ORDER and no draft advisory.

Unchanged for public repositories (objectstack, objectui, hotcrm, the docs and site repos): a draft advisory through the relay, never an issue (§2–§3 as written).

Work

  1. security-findings.md. Add the private-repository branch above. Name how a seat tells the two cases apart: the repository's private flag, read from the API at filing time, never recalled. Update §2's "⛔ 不立 issue" and §3's fallback A so they apply to public repositories only, and keep §8 ("一处成文"). security already exists as a label on cloud, so no new label is needed.
  2. What still stays rule-level on a private repository. Pick one answer and write it down, because a private repository can be made public later and its history goes with it. Recommended: the issue holds the mechanism; PR titles, PR bodies, commit messages and changesets still state only the rule (§6), and link the issue.
  3. The relay log. fleet-write runs on this public repository. Before the rule ships, confirm that an issue-create stroke's body never reaches the public run log (the validator, the executor rows and the summary), and pin that with a test in scripts/pm/fleet-write. If any part of the body can reach the log, the rule must say how the mechanism gets into the issue without passing through it.
  4. Update every file that points to security-findings.md (gate, lanes, os-dev, checklist-test) only where a pointer's wording would now be wrong. Restate nothing.

Done when

  • security-findings.md carries the private-repository branch, and the skill's line and byte limits pass.
  • The relay-log question is answered and pinned by a test.
  • A cloud seat that reads the skill files a cloud finding as a security issue.

Dedupe

repo:objectstack-ai/objectstack is:issue security-findings private: 166 hits. None of them changes where a private repository's finding is recorded. The nearest are:

The security seat (#29740, security#1) owns findings end to end, so tell it about this change.

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Nov 4, 2026
  2. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p2 kept · domain:skills kept · pm:queue kept · 2026-11-04T14:55Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk

    Claim: PM loop round 1 · 2026-11-05T22:53Z
    Session: session_016WV4d1mkgEris4MHHLjtnk
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-shi9ig (the card thread's designated branch; dev session session_016WV4cxfNdCqsVzihQoX3BE, amended by the seat)
    Worktree: objectstack-issue-30114
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: .claude/skills/pm-dispatch/references/security-findings.md (the private-repository branch; §2 and §3 fallback A scoped to public repositories; §6 rule-level for PR titles, bodies, commits and changesets on a private repository too); pointer wording only where it would now be wrong in .claude/skills/pm-dispatch/references/lanes/security.md, .claude/agents/os-dev.md and other files that point to security-findings.md; scripts/pm/fleet-write/** tests only (the pin that an issue_create body never reaches the public run log: validator, executor rows, summary). ⛔ A behaviour change in fleet-write itself: stop and report (stop on breach)
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (a maintainer ruling to encode: 「cloud 私有仓库可以直接用带 security 标签的普通 issue,立卡修改 skills」)
    Thread-read: 6633882869
    Premise: holds: security-findings.md §2 still reads 「⛔ 不立 issue」 for every repository on origin/main 788715ef; #30110 and #30111 (same file) are closed
    Serial constraints cleared: #30110 and #30111 closed; no open PR touches security-findings.md (open PRs read at claim time). Next on that file: #30271 (serial)

    Tier S (.claude/**) for the rules text; the seat lands it on an at-tier contract-review PASS with every check green. The security seat (security#1) is told at landing.


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk

    Release: session_016WV4d1mkgEris4MHHLjtnk · seat clock-out (maintainer 「skills 处理完当前任务就下班」, 2026-11-06, project chat) · back to pm:queue for domain:skills#2 · 2026-11-06T07:53Z

    Claim 6671655834 is released whole. Nothing is in flight on it, and no PR is open.


    Generated by Claude Code

  6. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Nov 6, 2026
  7. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · os-elon-musk · session_016WV4cxfNdCqsVzihQoX3BE

    Handoff: maintainer ruling recorded · 2026-11-07T04:52Z

    ⛔ Not a claim. This is a record only. The card stays in pm:queue for the next domain:skills seat.

    Ruling. On the relay-log question (comment 6680051129), the maintainer picked option A2 on the decision card in the card thread, verbatim: 「A2 本卡里一起修中继」. They then added: 「你已经下班了,只需要记录」. So no work was done in that session.

    What A2 means for the next seat:

    • This card also fixes the relay. When a request fails and the platform's message quotes the payload, the generic failure path in scripts/pm/fleet-write/execute.mjs (requestLanded) withholds that message. Today it prints the message unfiltered into the row, the action log line and both step-summary lines. The advisory rows already withhold such a message through advisoryRefusalCause. Pin the fix in the executor's self-test.
    • It lands in the same PR as the security-findings.md private-repository rule.
    • By this ruling, the claim's file surface widens to relay behaviour in scripts/pm/fleet-write/execute.mjs and its self-test. The new claim must name that surface.

    Resume-from: claude/project-thread-shi9ig@5274bbc6 (pushed, no PR). It already carries:

    • the rule text, in the final form where the mechanism rides issue_create
    • the pointer edits (filing gate, security lane charter, lane table)
    • the line-ratchet raise 64 → 67, citing this card's body as the ruling of record
    • an executor self-test battery pinning the three channels that never print the title or body, mutation-proven

    All 46 derived gates and pnpm lint were green on that head. Merge origin/main before resuming.

    Serial: #30271 waits on this card.


    Generated by Claude Code

  8. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Claim: PM loop round 13 · 2026-11-07T05:53Z
    Session: session_01J8VVAj7CvjkGXvgXzd6RZ7
    Account: huangyiirene
    Branch: claude/project-thread-kk5w88 (the card thread's designated branch; dev session session_01J8VVAjG6DxvHuUKNbj3JB1), resuming from seat 1's claude/project-thread-shi9ig@5274bbc6 by merge
    Worktree: objectstack-issue-30114
    Domain: domain:skills
    Seat: domain:skills#3
    File surface: .claude/skills/pm-dispatch/references/security-findings.md; pointer lines whose wording is now wrong in .claude/skills/pm-dispatch/references/filing-gate.md, references/lanes/security.md, .claude/skills/pm-dispatch/SKILL.md; scripts/pm/fleet-write/execute.mjs (the requestLanded failure path and its self-test only, by ruling A2 in 6702493518); scripts/pm/check-skill-line-ratchet.mjs only to revert seat 1's ceiling raise (stop on breach)
    Container & model: M, mode:thread, project-default model, effort: high. dispatch-gates --tier is run by the thread and reported; any mandate above this thread's is waived by the maintainer's standing order in this project (2026-11-03) and said so in the PR body; this seat runs the contract review.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (the relay half: a platform refusal message quoting a payload reaches the public run log via requestLanded; objectstack carries the fix)
    Thread-read: 6702493518
    Premise: holds on main 719a502b: security-findings.md still says a finding is never an issue on any repository; requestLanded still prints json.message on a refusal.
    Serial constraints: #30271 waits on this card. No line-ceiling raise: the card body directs the rule, not a ceiling; growth is paid by same-file restatement deletion, else the seat asks the maintainer.

    No changeset (nothing published): skip-changeset. Fixes #30114. Tier read by check-governed-merges at the PR.

  9. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  10. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Claim widened (a pointer whose wording the new rule makes wrong, before the PR opens) · 2026-11-07T06:03Z

    File surface added (stop on breach): .claude/skills/checklist-test/SKILL.md L266 only, one in-place rewrite at net 0 lines (≤120 B). The line says 「安全发现不立卡」 as a universal rule; under this card's private-repository branch it moves to the runner's own duty (the runner files no card for a security finding; the PM files the private card). Nothing else in that file. Same card, same skip-changeset.

    Status: the card thread found the security-findings.md rule owes one line over the file's 64-line ceiling after three real same-file deletions. The ceiling question is with the maintainer; no raise is made without a ruling, and no PR opens until it lands.

  11. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Ruling recorded · 2026-11-07T07:54Z

    Maintainer huangyiirene ruled at 2026-11-07T07:54Z (option A of the seat's question in the project thread): raise the line ceiling of .claude/skills/pm-dispatch/references/security-findings.md from 64 to 65 for the one-line remainder the card thread measured after three real same-file deletions. Not option B (folding L31 and L47 into one line).

    Claim widened: scripts/pm/check-skill-line-ratchet.mjs, that one row 64 → 65 only (it replaces "only to revert seat 1's ceiling raise" in the claim; seat 1's 64→65/67 raise, which cited the card body, is still reverted and this raise stands on this ruling instead). The PR body quotes this comment as the ruling. Nothing else moves.

  12. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Claim widened (contract review 6704473385, should-fix S1) · 2026-11-07T08:26Z

    File surface added (stop on breach): .claude/skills/pm-dispatch/references/project-forms.md L48 only, one in-place rewrite at net 0 lines (≤120 B), so the Notify: security doorbell also rings when a private-repository security card is built (「私卡建成」 beside or in place of 「草稿公告建成」, per the rule this card writes). Nothing else in that file. Same card, same skip-changeset.

    S2 (the doorbell's bare #N names no repository, read by scripts/pm/record-recognisers.mjs) is outside this claim and goes to a follow-up card.

  13. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    ACCEPT → PR #31102 comment 6704825021, head bb396b52. Tier S: ready + auto-merge by the seat. Follow-up: #31103 (repository-qualified doorbell).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions