You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@magpie.apache.org by po...@apache.org on 2026/07/06 23:10:16 UTC

(magpie) branch main updated: refactor(skills): make the fix-released → REVIEW push atomic and non-deferrable (#767)

This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/magpie.git


The following commit(s) were added to refs/heads/main by this push:
     new 7bd8ce92 refactor(skills): make the fix-released → REVIEW push atomic and non-deferrable (#767)
7bd8ce92 is described below

commit 7bd8ce9210506f52fc96be34d2da5a695dd910ae
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Tue Jul 7 01:10:09 2026 +0200

    refactor(skills): make the fix-released → REVIEW push atomic and non-deferrable (#767)
    
    The `pr merged → fix released` transition in security-issue-sync must
    regenerate + push the CVE JSON (allocated → review-ready) in the same
    apply pass as the label flip — never deferred to a later sync or a
    separate confirmation. A tracker labelled `fix released` whose CVE
    record is still DRAFT strands the release manager (gated on REVIEW)
    and silently stalls the advisory.
    
    - apply-and-push.md (Step 5b): add the atomicity rule and the single
      acceptable deferral (unavailable session → manual-paste hand-off +
      explicit "still DRAFT" blocker, never silent).
    - bulk-mode.md: clarify the CVE-affecting-bucket confirmation gate is
      for body-field content judgment only; the mechanical DRAFT→REVIEW
      state push rides the fix-released label-flip confirmation.
    
    Surfaced by the 2026-07-06 Apache Airflow sync, where 8 trackers
    advanced to `fix released` but their CVE records stayed DRAFT on
    Vulnogram until a separate manual push.
    
    Generated-by: Claude Code (Opus 4.8)
    
    Co-authored-by: Tester <t...@example.com>
---
 skills/security-issue-sync/apply-and-push.md | 28 ++++++++++++++++++++++++++++
 skills/security-issue-sync/bulk-mode.md      | 18 ++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/skills/security-issue-sync/apply-and-push.md b/skills/security-issue-sync/apply-and-push.md
index 0c9feb36..a3a5f67a 100644
--- a/skills/security-issue-sync/apply-and-push.md
+++ b/skills/security-issue-sync/apply-and-push.md
@@ -489,6 +489,34 @@ transition. This is the load-bearing gate for the release-manager
 hand-off (see Step 2b's *Two-stage gate*): the RM never receives
 the hand-off comment while the record is still in `allocated`.
 
+**The `pr merged → fix released` transition performs this push in
+the same apply pass — it is not deferrable.** When a sync run
+advances a tracker `pr merged → fix released`, the label flip and
+this 5a-regen + 5b-push are **one atomic unit**: the user's
+confirmation of the transition authorises the push, and both land in
+the same apply pass. The `fix released` label is in the generator's
+forward-state set (`compute_cna_private_state`), so the regenerated
+JSON carries `review-ready`, and the push advances the record
+`allocated → review-ready` — the very action that unblocks and
+performs the hand-off. Do **not** park the push behind a second
+confirmation, and do **not** defer it on the reasoning that "the
+release manager will promote the record": the RM owns
+`review-ready → publish-ready → advisory` (the hand-off steps); the
+`allocated → review-ready` promotion is sync's job at `fix released`.
+A tracker labelled `fix released` whose record is still
+`allocated` (Vulnogram: `DRAFT`) after the sync is a **process
+bug** — it strands the RM, who is gated on `review-ready`, and
+silently stalls the advisory.
+
+**The only acceptable deferral** is a genuinely-unavailable
+authenticated session at sync time (the adapter's session probe
+fails — see the decision flow below). Then, and only then, sync
+posts the **manual-paste** hand-off variant *and* raises an explicit
+blocker in the Step 6 recap (*"<CVE> still in `allocated`/DRAFT —
+push on the next authenticated sync"*), so the gap is loud, never
+silent. Completing the push is the first action of the next
+session-capable sync.
+
 The remaining transitions stay separate:
 
 - `review-ready` → `publish-ready` is a **release-manager UI
diff --git a/skills/security-issue-sync/bulk-mode.md b/skills/security-issue-sync/bulk-mode.md
index 990c32c6..25449913 100644
--- a/skills/security-issue-sync/bulk-mode.md
+++ b/skills/security-issue-sync/bulk-mode.md
@@ -257,6 +257,24 @@ concurrently, which is exactly what the sync needs.
      change tracker state but do not alter the published CVE
      record.
 
+   **The mechanical `allocated → review-ready` state push at
+   `fix released` is NOT gated by the CVE-affecting bucket's
+   per-item review.** That bucket's confirmation exists for
+   *body-field content judgment* — summary wording, CWE choice,
+   credit-line shape: the values a human should eyeball before they
+   ship to `cve.org`. The `allocated → review-ready` (Vulnogram:
+   `DRAFT → REVIEW`) state push that a `pr merged → fix released`
+   transition mandates (see the atomicity rule in
+   [`apply-and-push.md` Step 5b](apply-and-push.md#step-5b--push-the-regenerated-json-to-the-cve-tool-via-the-adapter))
+   is mechanical, not a judgment call: it rides the **same
+   confirmation as the `fix released` label flip** in the
+   non-CVE-affecting bucket and executes in the same apply pass. Do
+   not hold a fix-released tracker's record at `allocated`/`DRAFT`
+   waiting for a separate CVE-affecting-bucket sign-off — that is the
+   deferral the atomicity rule forbids. (A body-field *content*
+   change that happens to land on the same tracker still goes through
+   the CVE-affecting review; only the state push is exempt.)
+
 4. **Present buckets as merged bulk proposals; the
    CVE-affecting bucket gets a richer per-item view.** The
    proposal has three groups: