Skip to content

fix(vetted-ops): find and write the apache-magpie status-rollup marker - #1665

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:vetted-op-tracker-rollup-marker
Oct 16, 2026
Merged

potiuk merged 1 commit into
apache:mainfrom
potiuk:vetted-op-tracker-rollup-marker

Conversation

@potiuk

@potiuk potiuk commented Oct 16, 2026

Copy link
Copy Markdown
Member

What

vetted-op-tracker rollup-append (and rollup-amend-latest / rollup-fold, which share the lookup) recognised only the legacy status-rollup marker, <!-- <tracker-name> status rollup v1 — … -->. Skills and the rest of the framework (preflight-audit's skill-marker check, the issue-sync bulk-mode classifier, skill-evals fixtures) recognise skill comments by the <!-- apache-magpie: <kind> v<N> --> marker, and adopters' rollups carry <!-- apache-magpie: status-rollup v1 -->. On those trackers rollup-append did not find the rollup and created a separate comment with the legacy marker. Every later pass then grew that second comment.

Change

  • rollup_format.py (vetted-ops) and its identical copy rollup.py (github-rollup):
    • ROLLUP_MARKER = "<!-- apache-magpie: status-rollup v1 -->" is what a new rollup starts with.
    • CANONICAL_MARKER_RE / LEGACY_MARKER_RE match the two marker shapes. is_rollup_body matches either one, and is_canonical_rollup_body matches only the canonical one.
    • find_rollup_index(bodies) returns the first comment with the canonical marker, or the first legacy one when there is none. A tracker that has both keeps growing the canonical rollup.
    • marker_line / build_new_rollup_body still accept the old tracker_name argument so existing callers keep working, but they ignore it.
  • procedures._find_rollup (vetted-ops) and cli._find_rollup (github-rollup) now use find_rollup_index. New rollups no longer get the tracker name in their marker.
  • The entry envelope is unchanged: <details><summary>DATE · @actor · Label</summary>, a blank line, the body, a blank line, </details>, with the --- ruler and blank lines between entries.
  • tools/github/status-rollup.md, both tool READMEs and the issue-invalidate skill now name the canonical marker and say the legacy one is still recognised. The issue-invalidate measured_tokens stamp is refreshed.

github-rollup is fixed here too. Its rollup.py is byte-identical to rollup_format.py, and skills use both tools. If only vetted-ops changed, github-rollup would not find the canonical rollups that vetted-ops creates, and would make duplicates.

Tests

  • tools/vetted-ops: covers a new rollup getting the canonical marker; appending to legacy-marker rollups (any tracker name); the canonical rollup winning over an earlier legacy one for both append and amend; no second rollup being created next to a canonical one; fold refusing a legacy-marker rollup; marker detection cases; and find_rollup_index. uv run pytest: 396 passed. ruff check, ruff format --check and mypy are clean.
  • tools/github-rollup: the same cases for the CLI and the formatter. 54 passed, and ruff and mypy are clean.
  • tools/preflight-audit: 42 passed (unchanged; it already accepts both markers).
  • prek run --files <changed> passes, with lychee and workspace-pytest skipped.

Not in scope

  • tools/forgejo/status-rollup.md and tools/local-tracker still describe or write the legacy marker on their own backends. They can follow separately.
  • rollup-fold still refuses to fold a legacy-marker rollup into the canonical one, because folding would nest <details> blocks. Merging two rollups stays a manual step, as the spec's hard rules say.

🤖 Generated with Claude Code

@github-actions github-actions Bot added family:security security-* skills family:tools tools/* family:docs Docs, MISSION.md, READMEs capability:resolve Close-out: invalidate, dedupe, CVE allocate, announcement contract:tracker Tool capability: issue / board / label backend contract:source-control Tool capability: branch / commit / diff / push (VCS) contract:change-request Tool capability: proposed-change review + merge gate (PR / MR / Gerrit change) substrate:sandbox Tool substrate: agent isolation, egress control, settings audit contract:people labels Oct 16, 2026
rollup-append matched only the legacy `<!-- <tracker> status rollup v1 -->`
marker, so on trackers whose rollup carries `<!-- apache-magpie: status-rollup v1 -->`
it missed the rollup and created a second, legacy-marker comment. Both vetted-ops
and github-rollup now prefer the canonical marker, still recognise the legacy one,
and always write the canonical marker for a new rollup; the spec says the same.

Generated-by: Claude Opus 5
@potiuk
potiuk force-pushed the vetted-op-tracker-rollup-marker branch from b40acd2 to 80b6c21 Compare October 16, 2026 06:37
@potiuk
potiuk merged commit ccead70 into apache:main Oct 16, 2026
13 checks passed
potiuk added a commit that referenced this pull request Oct 17, 2026
Hand-sync of tools/spec-loop/specs/ with the functionality that landed
between d58ecb7 and 43e4c6e.

Specs changed:
- release-management-lifecycle: verify-rc classification as code
  (abd5969, #1619), vote-draft / promote / announce-draft renders
  (c87ad08, d5fe7fd), the per-outcome / backend / classification
  file split across the family, and the SKILL.md size gap closed (all
  ten now under 500 lines).
- adoption-and-setup: the utilities first-run welcome guide and the
  text-file mirror fallback in the family scan (9f8c479, #1669).
- meta-and-quality-tooling: the zero-token /magpie-skills Claude Code
  mod in magpie-utilities (861c84e, #1667).
- agent-isolation-sandbox: the agent-guard --junie adapter (6c24f30,
  #1666) and sandbox-lint refusing a tracked .claude/settings.json
  (4a07965, #1675).
- adapters, security-issue-lifecycle, project-agnosticism: the canonical
  apache-magpie status-rollup marker, preferred over and replacing the
  legacy tracker-named one for new rollups (ccead70, #1665).
- .last-sync bumped to 43e4c6e.

No spec change needed (specs already updated in the commit itself):
43e4c6e, 399ab1b, 622bfbc, 5fc6a32, a75734c, e44b44a,
a93a7d1, c67e3c6, a3d9b71, ec015bb.

Exempt (mechanical): 0a79a33 (dev version bump), 80a0f1f (npm pin
bump in prek hooks).

Generated-by: Claude Opus 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

capability:resolve Close-out: invalidate, dedupe, CVE allocate, announcement contract:change-request Tool capability: proposed-change review + merge gate (PR / MR / Gerrit change) contract:people contract:source-control Tool capability: branch / commit / diff / push (VCS) contract:tracker Tool capability: issue / board / label backend family:docs Docs, MISSION.md, READMEs family:security security-* skills family:tools tools/* substrate:sandbox Tool substrate: agent isolation, egress control, settings audit

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant