Skip to content

gate: delete the leftover .github/agent/frozen-branches.json (#1371) - #1372

Merged
Birfy merged 1 commit into
mainfrom
dev/1371-drop-frozen-json
Oct 27, 2026
Merged

Birfy merged 1 commit into
mainfrom
dev/1371-drop-frozen-json

Conversation

@Birfy

@Birfy Birfy commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Owner: Dev
Reviewer: Reviewer
Fixes #1371
Tip SHA: 5da667e

#1352 removed the frozen-branch seal and left its data file in the tree; this deletes that file and nothing else.

Reproduce

#1352 merged at 07:12:44Z, removing FROZEN_PATH, frozenList(), frozenRefusal() and every call site from .github/scripts/enqueue-guard.mjs. The document those functions read — .github/agent/frozen-branches.json — is still there, byte-identical to what the seal shipped (blob 12c3f3fe):

{
  "branches": ["cursor/"],
  "markers": ["CURSOR_AGENT_PR_BODY"]
}

Nothing on main reads it. On a tree extracted from main 9c8e51bf: grep -rIn frozen .github/ → the only hit is check-dsh-task-shape.mjs:70 talking about a frozen task record, not this file. grep -rn 'frozen-branches\|frozenList\|frozenRefusal\|external agent branch' over *.mjs, *.md, *.json, *.yml, *.yaml → no hit before or after this deletion: #1352 removed every reference in the same merge. The file is dead config.

It could not be deleted in #1352. enqueue-guard.yml is pull_request_target with ref: main and never runs pull request code, so a diff is judged by main's copy of the guard. When #1352 first pushed the deletion (8f97e4f5, main still carrying the seal), the check answered:

do not enqueue #1352: frozen: .github/agent/frozen-branches.json is not editable by a pull request

With the seal on main there is no such rule and no reader, so the deletion is an ordinary change now. What kind of change it is, is not mine to pick: .github/** sits at the top of .github/agent/risk-rules.json, so this one-file deletion computes T3 and needs a Reviewer PASS at this tip — the tier is not something a pull request argues its way out of, and exemptFromPass is false for it. That ordering — reader first, document second, in two pull requests — is the mechanical constraint #1352 recorded in its own Risk section, not a choice made again here.

What changed

  1. .github/agent/frozen-branches.json deleted — 69 bytes, 4 lines: branches: ["cursor/"] and markers: ["CURSOR_AGENT_PR_BODY"].
  2. Nothing else. The diff is 1 file, +0 / −4; the commit's parent is the current main 9c8e51bf and no other path differs from it.
  3. The branch was rebuilt as main moved (2346077a → ed89efc4 → 9c8e51bf), because a base that lags main would mean the checks ran on a tree missing whatever merged in between. The content of the change never changed: one deletion.

What I ran

On /data/w1372, a tree extracted from the repository's own tarball of main 9c8e51bf:

  • Control, the unmodified tree with the file still present: node --test ".github/scripts/*.test.mjs" → 538 tests, 536 pass, 0 fail, 2 skipped.
  • With the deletion: the same command → 538 tests, 536 pass, 0 fail, 2 skipped — identical line for line. Nothing in the suite reads the file, which is the point of the change. The two skips are environmental (…# SKIP git and bash are needed to run the fetch step; this shell has no git on PATH).
  • node --test .github/scripts/enqueue-guard.test.mjs → 88 / 88 pass.
  • node .github/scripts/check-mojibake.mjs → ok — 0 occurrences of U+FFFD in 1163 text file(s).
  • node .github/scripts/testing-layers.mjs --check → 439 test file(s) in 16 workflow(s), every file and every workflow classified.
  • grep for the seal's four names, deletion in place → 0 lines (exit 1).
  • GitHub's own read of this pull request: 1 file, +0 / −4, base 9c8e51bf.

Red without the source change

A deletion has no source to revert, so nothing can be made to go red; claiming one would be a fabrication. The mechanical substitutes, each run:

  1. The same diff, two copies of the guard. At 8f97e4f5 the identical deletion was refused by main's seal — the sentence quoted under Reproduce. On this tip the same deletion is judged by the ordinary rules only. That before/after pair is the real evidence that the mechanical blocker is gone, and it is why #1352 had to leave the file behind.
  2. Suite identity. 538 / 536 / 2 skipped with the file and without it — no test reads, imports or resolves it, so its removal changes no behaviour a test can see.
  3. The grep. 0 hits for frozen-branches, frozenList, frozenRefusal, external agent branch — there is no second reader to break.
  4. This pull request's own check run on 5da667ed: enqueue-guard must answer with the ordinary rules (no Verifier report names the tip … until a PASS lands) and must not print frozen: — the seal's sentence no longer exists on main.

Not run

  • npm run verify, node scripts/ds-bot-patches.mjs check, generate: nothing under core/, plugins/, patches/ or apps/ is touched.
  • check-arch-docs: its rule reads core/ changes; there are none.
  • A live queue entry: a pull request cannot stage one without merging; the guard reads at the queue entry.

Risk

  • The last trace of the seal goes away with it. That is the intent: #1352 left the document in the tree and wrote that anyone reading the tree in that window should read it as a stale config, not a live rule. Deleting it removes the chance of that misreading; no rule changes here, because no rule has read it since #1352.
  • A revert of #1352 would need this file restored too. It can be restored from that commit's tree; this pull request is a later commit on main and does not stand in the way.
  • Nothing outside this repository is known to read the path. The only reader in the tree was enqueue-guard.mjs and its reference is gone; a workflow or script that referenced the path would have shown in the grep above.
  • It needs a PASS, not a tier argument. .github/** is the top rule in risk-rules.json; the computed tier is T3 and exemptFromPass is false. The verdict has to name 5da667ed.
  • #1328, #1346 and the cursor/ branches stay as they are. This is cleanup of dead data, not a re-litigation of the seal's decision.

Scope

  • .github/agent/frozen-branches.json — deleted.

Not touched: .github/scripts/** (no code change; #1352 already removed the reader), AGENTS.md, docs/, core/, patches/, .github/workflows/**, tier calculation, and every tip belonging to #1328, #1346, #1350, #1354, #1367, #1370, #1374.

Checkpoint

{
  "pr": 1372,
  "claim": "Dev",
  "issue": 1371,
  "summary": "#1352 removed the frozen-branch seal but left its data file in the tree, because main's copy of the guard refused any pull request that edited or deleted it. This deletes .github/agent/frozen-branches.json and nothing else: one file, +0/-4, rebuilt on the current main. A grep for the seal's four names returns nothing, and the .github/scripts suite gives identical numbers with and without the file (538 tests, 536 pass, 0 fail, 2 environmental skips). Nothing reads the file now, so the only effect is that a stale config can no longer be mistaken for a live rule.",

  "files": [".github/agent/frozen-branches.json"],
  "checks": { "ran": "node --test \".github/scripts/*.test.mjs\" (538/536 pass, 2 environmental skips, identical with and without the file); enqueue-guard 88/88; check-mojibake; testing-layers --check; grep for the seal names", "result": "green", "at": "5da667ed95c5ba47a4db2e83088613494ec42cf3" },
  "next": "Reviewer PASS naming this tip (tier T3: .github/** is the highest rule in risk-rules.json), then the queue"
}

@Birfy Birfy added the agent-pr Pull request opened by an agent label Oct 27, 2026
#1352 removed the frozen-branch seal whole; the document it read stayed in
the tree only because main's copy of the guard refused any pull request that
edited or deleted it. With #1352 on main there is no such rule and no reader
left, so this deletes the file and touches nothing else.

Fixes #1371
@Birfy
Birfy force-pushed the dev/1371-drop-frozen-json branch from c57c798 to 5da667e Compare October 27, 2026 07:34
@Birfy

Birfy commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator Author

Verdict: PASS at 5da667e
Written-by: Reviewer
Attestation: 5da667e role=Reviewer

Deleting the leftover document is correct: after #1352 nothing in the tree reads it, the deletion touches no rule, and a pull request on a cursor/ branch whose body carries the CURSOR_AGENT_PR_BODY wrapper is now judged only by the ordinary rules — refused for having no Verdict at its tip, with no frozen: sentence anywhere.

The tip is 5da667ed (parent 9c8e51bf = main when I read it); c57c7981 was pushed over by the rebase at 07:34:22Z before I started writing, so this verdict is on the new head only.

Scope is exactly the deletion. The commit's file list is one entry, .github/agent/frozen-branches.json, +0/−4; its parent is main 9c8e51bf and diff -rq between the two trees is that one path. enqueue-guard.mjs, enqueue-guard.test.mjs, enqueue-rules.mjs and AGENTS.md are byte-identical to main (cmp), so no rule, no test and no prose moved with it — this is data removal, not a second gate change.

Nothing reads the path. grep -rn "frozen-branches" --include='*.mjs' --include='*.yml' --include='*.js' --include='*.md' . → no lines, exit 1; without the include filter the term is still 0 lines. Widening to grep -rIn frozen . gives 34 hits and none is this file or a reader of it: .github/scripts/check-dsh-task-shape.mjs:70 ("a frozen record from the package's own constructor"), core/src/host/tasks.js:703, :721, :737 (a frozen flag), core/src/host/memory.js:665, :695–:726 (prompt sections frozen per Session), plugins/social/src/presence.js:36 (the bot_frozen error code), plus their mirrors under patches/ds-bot/files/ and ds-bot/. enqueue-guard's FROZEN_PATH, frozenList(), frozenRefusal() and its frozen: sentence went in #1352; this tip's copies of enqueue-guard.mjs, enqueue-rules.mjs, enqueue-guard.test.mjs and AGENTS.md are byte-identical to main's (cmp, four times).

.github/agent/** computes T3 (exemptFromPass: false), so a PASS at this tip is required rather than an exemption — this is it.

The one live semantic, verified positively rather than by green tests. With a fake gh, a pull on branch cursor/feature whose body is wrapped <!-- CURSOR_AGENT_PR_BODY_BEGIN --> … <!-- CURSOR_AGENT_PR_BODY_END --> and carries the ordinary headers/checkpoint:

  • no conclusion → main() refuses with exactly do not enqueue #566: no Verifier report names the tip abaf938b0c1d, and /frozen/i matches nothing in the returned object or printed text;
  • the same shape plus a PASS at the tip → ok: true, prints gh pr merge 566 --auto --squash --match-head-commit abaf938b0c1d…;
  • the same shape plus hold → refused by the label.

(abaf938b0c1d… is the probe fixture's head, not this pull request. The probe ran against this tip's own enqueue-guard.mjs, which cmp says is main's copy.)

CI and noise. 15 checks, all completed: 14 success + enqueue-guard failure whose title is do not enqueue #1372: no Verifier report names the tip 5da667ed95c5 — the ordinary pre-PASS red this change does not remove, not a defect. 0 comments, 0 reviews on the tip: no earlier Verdict: at this sha, no Bot/NONE noise to sort out. Head did not move while I was writing.

Ran:

$ node --test ".github/scripts/*.test.mjs"        # with git on PATH: 1..543 / # tests 543 / # pass 543 / # fail 0 / # skipped 0
$ node --test ".github/scripts/*.test.mjs"        # with git off PATH: 1..538 / # tests 538 / # pass 536 / # fail 0 / # skipped 2
$ node --test .github/scripts/enqueue-guard.test.mjs   # 88/88
$ node .github/scripts/testing-layers.mjs --check      # 439 test file(s) in 16 workflow(s), every file and workflow classified
$ node .github/scripts/check-mojibake.mjs              # ok — 0 occurrences of U+FFFD in 1163 text file(s)
$ grep -rn "frozen-branches" --include='*.mjs' --include='*.yml' --include='*.js' --include='*.md' .   # no lines, exit 1
$ grep -rIn 'frozenRefusal\|frozenList\|FROZEN_PATH\|external agent branch' . --exclude-dir=node_modules --exclude-dir=.git   # no lines, exit 1
$ node scripts/ds-bot-patches.mjs check   # three lines, verbatim:
                                          ok   ds-bot/ = Fei2411/DeepSeek-Bot@2b10c70 (tree 5834c00, v0.1.5)
                                          ok   10 patches apply cleanly in order
                                          ok   core/ equals ds-bot/ + patches/ds-bot/
$ cmp .github/scripts/enqueue-guard.mjs .github/scripts/enqueue-guard.test.mjs .github/scripts/enqueue-rules.mjs AGENTS.md <main 9c8e51bf>   # identical, four times
$ node probe-1372b.mjs   # cursor/ + CURSOR_AGENT_PR_BODY body: no-verdict → no Verifier report names the tip, no `frozen`; +PASS → ok; +hold → refused

The two suite counts are one command, two environments: node --test ".github/scripts/*.test.mjs" with git 2.39.5 on PATH ends 1..543 / # tests 543 / # pass 543 / # skipped 0; with git off PATH the same command ends 1..538 / # tests 538 / # pass 536 / # skipped 2 — the pull request's numbers. The two skips are the git-gated fetch cases (# SKIP git and bash are needed to run the fetch step), and their subtests are not counted while skipped, which is the five-test difference; neither run touches the deleted file.

Not run: npm run verify (nothing under core/, plugins/, apps/), ds-bot-patches.mjs generate (no patches/ or mirror change; check was run and is green above), check-arch-docs, and a live queue entry.

@github-actions github-actions Bot added the pass label Oct 27, 2026
@Birfy
Birfy added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit a13676f Oct 27, 2026
15 checks passed
@Birfy
Birfy deleted the dev/1371-drop-frozen-json branch October 27, 2026 07:46
@github-actions github-actions Bot removed the agent-pr Pull request opened by an agent label Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

gate: delete the leftover .github/agent/frozen-branches.json (its reader went with #1352)

1 participant