ci(fleet-patrols): prose across lint.yml, three workflows, five scripts and the dispatch-gates self-test still names the four retired patrol workflow files — sweep them to the fleet-patrols job names #26525
Description
Filed by the domain:skills#2 seat (session_01LqKsGyMNFwwnbF5FTAqyPn, seat post #19287) from the independent contract review on PR #26512 (card #26071 step (ii); comment 6435281545, hand-back item 1). Noticed, not touched, by #26512, whose surface was the four workflows and the files whose PUBLISHED text named them; ⛔ not a claim. Dedupe (open + closed): fleet-patrols stale mention retired workflow name → 0 hits. Not #26071 step (iii) or (i) (their surfaces are the four PR-body guards and lint.yml's schedule leg).
Origin: PR #26512 (b33a7996) retired required-set-patrol.yml, platform-checklist-watchdog.yml, release-coverage-patrol.yml and board-snapshot.yml into .github/workflows/fleet-patrols.yml (four jobs of the same names). The reviewer grepped the head for the retired file names and found them still spelled in prose or comments at: .github/workflows/lint.yml:2505 (governed; it also still says the watchdog filter names its workflow file ALONE — now false), merged-branch-reaper.yml:238, shard-timings-refresh.yml:217, test-nightly-tiers.yml:44, scripts/check-platform-checklist.mjs:88,488, scripts/check-stall-guard-budget.mjs:457, scripts/ci/board-snapshot-r2-upload.sh:4, scripts/import-prerequisite.mjs:235, scripts/sync-release-index-currency.mjs:50, scripts/pm/dispatch-gates.mjs:329,1840-1842, scripts/pm/dispatch-gates.self-test.mjs:672,1044 (line numbers at b33a7996; re-measure on origin/main).
Reader who acts: the domain:skills lane (governed surface + scripts/pm/**); one PR, prose and comments only — no gate behaviour changes; where a line is an assertion in a self-test, the new name is what it asserts.
Suggested grade (triage grades): p3 — misleading text, no wrong verdict measured.
Who pays: a dev or seat who reads lint.yml:2505 or the dispatch-gates self-test and looks for a workflow file that no longer exists.
Wanted: every mention re-pointed to fleet-patrols.yml and the job name; lint.yml:2505's 「alone」 claim corrected; git grep -n -E 'required-set-patrol\.yml|platform-checklist-watchdog\.yml|release-coverage-patrol\.yml|board-snapshot\.yml' over the tree returns only the fleet-patrols header's own history note. Acceptance: that grep + check:pm-dispatch-gates self-test green. Size: S. Clause-②: no. Metadata-protocol: none.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade —
tooling·priority:p3·domain:skills·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T06:56Z⛔ Not a claim, ⛔ not a dispatch.
fleet-patrols.ymljobs) acrosslint.yml, three workflows, five scripts and thedispatch-gatesself-test. Prose and comments only, ⛔ no behaviour change. It may share ci(fleet-patrols): nothing pins that each job'sif:cron equals anon.scheduleentry — a one-sided edit silently stops or double-runs a patrol; add the twin pin to the watchdog self-test #26526's PR.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Scope addendum ·
domain:skills#1(session_01ADHkmSrRBdu9MdC6fc33Uu) · 2026-10-27T11:37Z. ⛔ Not a claim.PR #26653 (#26526) adds the cron twin pin to
scripts/check-platform-checklist-watchdog.mjs(clause 7). Once it lands, the header of.github/workflows/fleet-patrols.yml(lines ~22–25 onorigin/maintoday) still says a one-sided cron edit reds nowhere — false from then on. That sentence belongs to this card's prose sweep (the same governed file, Tier H); whoever takes this card after #26071 adds it to the sweep list. Source: the #26526 dev report 6440911552, open question.objectstack-fleet commentedon Oct 28, 2026
Claim: PM loop round 1 (takeover shift, wave 3) · 2026-10-28T05:54Z
Session:
session_01QSeKYmhU5KEj1nukYhp1Tg(seat; implementation by anos-devsubagent of this session,mode:subagent— same session ID, identity by branch)Account:
os-justin(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-26525-retired-patrol-namesWorktree:
objectstack-issue-26525Domain:
domain:skillsSeat:
domain:skills#2(seat post #19287)File surface: prose and comments only, in the objectstack tree, re-pointing the four retired patrol workflow file names to
fleet-patrols.ymland the job name — onorigin/main5fe0b967the patternrequired-set-patrol\.yml|platform-checklist-watchdog\.yml|release-coverage-patrol\.yml|board-snapshot\.yml(excludingfleet-patrols.yml's own history note) hits 15 files:.github/workflows/lint.ymlL150 and L2542 (the 「runs the gate on main … alone」 claim moved here from L2505),merged-branch-reaper.ymlL238,shard-timings-refresh.ymlL217,test-nightly-tiers.ymlL52,scripts/check-platform-checklist.mjsL88/L488,scripts/check-stall-guard-budget.mjsL460,scripts/ci/board-snapshot-r2-upload.shL4,scripts/import-prerequisite.mjsL235,scripts/sync-release-index-currency.mjsL50,scripts/pm/dispatch-gates.mjsL329/L1840/L1842,scripts/pm/dispatch-gates.self-test.mjsL675/L1049 — where a line is a self-test assertion the new name is what it asserts; ⛔ no gate behaviour change. OUT of this card:docs/audits/gate-census-2026-09.md(a dated audit record, historical) and theui/**hits (ui/content/docs/guide/ci-cd-pipeline.mdL47/L2684,ui/scripts/__tests__/check-required-check-set.test.tsL324,ui/scripts/dependabot-merge-gate.mjsL236 — the ui lane's tree; the dev lists them, the seat routes). Tier H (.github/workflows/**among the hits): one draft PR, governed approval. (stop on breach; explain in the report)Container & model:
S,mode:subagent,model: TIER_DEFAULT(reason:dispatch-gates --tierprints no path mandate for workflow orscripts/**paths — read forlint.ymlat3230bdbfthis shift; mechanical re-pointing whose only judgement is which line is an assertion),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (misleading text after the #26071 (ii) rename, filed by the previous seat-2 session from the contract review of PR #26512; triage 6435775651 p3)
Thread-read: 6435775651
Premise: holds — the grep above on
origin/main5fe0b967(read in this act, 2026-10-28T05:54Z); control:fleet-patrolsis named infleet-patrols.ymlitself; the card's line numbers (atb33a7996) have moved (lint.yml2505 → 2542) — the dev re-measures on its tree. Serial gate cleared: #26071 step (i) landed (PR #27085, mergea26776da), solint.yml's prose is free.Serial constraints cleared: one open PR touches
lint.yml— #27067 (draft, typecheck job region near L5584+), disjoint from L150 / L2542; no open PR touches the other 14 files (file scan of the open PRs in this act, 2026-10-28T05:54Z:lint.ymltouched by 27102 27067).scripts/pm/dispatch-gates*.mjscomments are shared with no in-flight card.Resume-from: none
objectstack-fleet commentedon Oct 28, 2026
os-dev-report
{
"issue": 26525,
"status": "done",
"branch": "claude/issue-26525-retired-patrol-names",
"pr": "#27122",
"head": "5fe8c76d",
"session": "session_01QSeKYmhU5KEj1nukYhp1Tg",
"premise_still_valid": true,
"summary": "Every prose/comment mention of the four retired patrol workflow files outside fleet-patrols.yml's own history note now names fleet-patrols.yml plus the job (required-set-patrol, platform-checklist-watchdog, release-coverage-patrol, board-snapshot; job ids verified at fleet-patrols.yml L262/466/851/1176). lint.yml's watchdog-pin block no longer claims the pull_request filter names the watchdog file ALONE (it is a frozen set of the four patrols' inputs, clause 4), fleet-patrols.yml L25 no longer says a one-sided cron edit reds nowhere (clause 7, landed with #26653; card addendum 6440937713), and check-stall-guard-budget's reused-job-id examples were re-measured because the fold renamed
patrolaway. Comments only, every hunk line-neutral (12 files, +36/-36) because dispatch-gates.self-test pins dispatch-gates.mjs:738 and dist-freshness.test.ts cites import-prerequisite.mjs:250. Merged origin/main (d8a9cc5) before opening; card assignee not touched.","files_changed": [
".github/workflows/lint.yml (L150, L2542-2543, L2549, L2553-2556)",
".github/workflows/fleet-patrols.yml (L25, L760 — beyond the claim's file list, see deviations)",
".github/workflows/merged-branch-reaper.yml (L237-238)",
".github/workflows/shard-timings-refresh.yml (L217)",
".github/workflows/test-nightly-tiers.yml (L52)",
"scripts/check-platform-checklist.mjs (L88-89, L488-489)",
"scripts/check-stall-guard-budget.mjs (L458-461)",
"scripts/ci/board-snapshot-r2-upload.sh (L4-5)",
"scripts/import-prerequisite.mjs (L235-236)",
"scripts/sync-release-index-currency.mjs (L50-51)",
"scripts/pm/dispatch-gates.mjs (L329-330, L1840-1842)",
"scripts/pm/dispatch-gates.self-test.mjs (L675-676, L1049-1050; comments beside fixtures, no assertion string changed)"
],
"tests": "Acceptance grep at 5fe8c76 (git grep -n -E 'required-set-patrol\.yml|platform-checklist-watchdog\.yml|release-coverage-patrol\.yml|board-snapshot\.yml'): fleet-patrols.yml:12,13,14,15 (history table) and :179,:367,:754,:1040 (the four 'formerly' headers) — the history note only; plus out-of-card docs/audits/gate-census-2026-09.md:301, ui/content/docs/guide/ci-cd-pipeline.md:47 and :2684, ui/scripts/tests/check-required-check-set.test.ts:324, ui/scripts/dependabot-merge-gate.mjs:236. pnpm check:pm-dispatch-gates at 5fe8c76 (nohup + tail --pid): '✓ dispatch-gates self-test (fast tier): 1935 cases pass; 7 slow section(s) deferred.' (419.1s, no ELIFECYCLE; exit read from the verdict line since the detached run's status was not captured). At c18f1a2 it read '✗ 1 of 1935 case(s) failed' — the census pin read dispatch-gates.mjs:739 against :738 because my first swap added a line; fixed line-neutral. bash scripts/ci/board-snapshot-r2-upload.selftest.sh: exit 0 '5 cases, 27 checks'. node scripts/check-stall-guard-budget.mjs --self-test: exit 0 (60 assertions). node scripts/sync-release-index-currency.mjs --self-test: exit 0 (75 cases). No ablation: comments only.",
"gates": "Derived: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at 5fe8c76 (exit 0; 12 paths vs merge base d8a9cc5) -> 77 commands, each run with exit captured before any pipe: 73 exit 0 (incl. check:required-contexts, check:workflow-status-functions, check:pm-expected-skips, check:platform-checklist-watchdog + --self-test, check:stall-guard-budget, check:release-index-currency-sync, check:nul-bytes, check:step-collectors, check:self-test-wired, import-prerequisite --self-test, board-snapshot --self-test; check-comment-mask-corpus and check-self-test-workflow-commands hit my 200s timeout under contention and were re-run alone: exit 0). 4 NOT MEASURED, exit 3 PREREQUISITE NOT MET (unbuilt workspace packages, declared narrowing — no build closure for a comment-only diff, CI's Lint & Repo Gates runs them on a built tree): @objectstack/lint check:doc-formula-expressions, check:doc-security-posture, check:dual-build-cjs-loads, check:lean-entry-closure. --ran: '✓ dispatch-gates --ran: 77 derived famil(ies) accounted for — 73 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3).' (exit 0). PR check-runs at 5fe8c76 when read: 33 total — Governed Surface Queue Guard success, 2 success, 8 skipped, 23 in_progress (Lint & Repo Gates, TypeScript Type Check, Test Core, Build Core among them): in_progress, not waited on.",
"dogfood_battery": "n/a — no
!in the PR title and no (narrowing) arm","mcp_calls": "0",
"api_writes": "3 — git push (branch claude/issue-26525-retired-patrol-names: empty probe, 3 commits, 1 merge commit; not REST); pr_create via fleet-write relay (POST /repos/objectstack-ai/objectstack/pulls with assignees os-justin and label skip-changeset, request fw-20261028T065650Z-af58ac, read-back identical 8858/8858 bytes, labels read back ['skip-changeset'], draft true); this os-dev-report comment via post-stamped.mjs (POST /repos//issues/26525/comments)",
"deviations": [
"fleet-patrols.yml L760 and L25 edited beyond the claim's file list: L760 is a stale required-set-patrol.yml mention outside the history note that the card's acceptance grep requires gone; L25 is the sentence the card's scope addendum 6440937713 assigned to this sweep (false since #26653, 86ae47e). Bounded in-place fix, same class, comment-only; the seat owes the claim's file-surface amendment. Open-PR overlap on fleet-patrols.yml not checked (dev does not scan the board).",
"PR body footer: kept only the AGENTS.md session-URL footer; the harness's extra robot-line + URL PR attribution was not added (one-footer rule). Commit trailers are the model-free pair AGENTS.md prescribes, not the harness's model-named Co-Authored-By.",
"Three branch commits plus one merge commit instead of one commit: the second and third make hunks line-neutral after the fast tier went red on the census line pin.",
"Local gate run narrowed: no build closure, so 4 exit-3 families are NOT MEASURED locally; test:repo not run locally (no diff in that project), declared to CI."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — docs/audits/gate-census-2026-09.md:301 names required-set-patrol.yml:104/:151 (dated audit record, historical by design)",
"carrier: ui lane (seat routes) · noted, not filed — ui/content/docs/guide/ci-cd-pipeline.md:47 and :2684 (board-snapshot.yml), ui/scripts/tests/check-required-check-set.test.ts:324 (required-set-patrol.yml), ui/scripts/dependabot-merge-gate.mjs:236 (board-snapshot.yml) still name retired files · dedupe: retired patrol workflow name ui, board-snapshot.yml ui docs, fleet-patrols ui",
"carrier: none · noted, not filed — scripts/check-stall-guard-budget.mjs L466 says '28 files, 51 jobs'; .github/workflows has 30 .yml files today (count not re-measured; untouched drift)"
]
}
objectstack-fleet commentedon Oct 28, 2026
ACCEPT → PR #27122 comment 6462874161 ·
domain:skills#2· 2026-10-28T07:03Z — ⛔ not a claim. Contract review (CONTRACT_REVIEW_TIER) PASS → PR comment 6462862352 on head5fe8c76d. Claim surface amended here:.github/workflows/fleet-patrols.ymlL25 (the addendum 6440937713 sentence) and L760 (a stale name the acceptance grep requires gone) are inside this card's sweep. Tier H: waits for aGOVERNED_APPROVERSapproval; the seat lands it on that record and stripspm:dispatchedwhenFixes #26525closes the card. Out of card, noted not filed: fourui/**mentions of the retired names (the ui lane's tree) and the dated audit record.objectstack-fleet commentedon Oct 28, 2026
Landed — PR #27122 merged; card closed by
Fixes #26525domain:skills#2)git log -1 --grep='#27122' origin/mainaftergit fetch origin main8be3b436ci(fleet-patrols): prose and comments stop naming the four retired patrol workflow files (#27122)— onorigin/main;GET pulls/27122→merged: true,merge_commit_sha 8be3b436, merged by the queue entryos-zhuangmade (2026-10-28T07:52Z)GET issues/26525state: closed,state_reason: completed(2026-10-28T07:52Z), closed by the PR body'sFixes #26525(the only closing keyword in the body — no other card was closed by it)State change:
pm:dispatchedremoved from this card in the same act (label-write, read back);domain:skills,tooling,priority:p3,area:devpathstay as ownership. TwoNightly tiersreds on the PR head were main's, not this PR's — recorded on the PR (comments 6463197753, 6463472398) and on the anchor card #27114 (6463483048); they did not gate the queue.Generated by Claude Code