You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Single-writer seat post for the domain:identity execution lane. Index entry: #4604.
🟢 ACTIVE
范围 | Scope
packages/plugins/plugin-auth · plugin-security · plugin-sharing · plugin-audit. packages/spec semantic surfaces transfer to the domain:spec seat.
当前 PM | Current PM
GitHub account: os-zhuang
Session: session_01PEVB6w7D7uCszR9Mw1BL73
Took over: 2026-08-12T13:45Z via /pm-dispatch identity; maintainer-confirmed at ~13:47Z (「前任刚交接完,你可以接手了」). The 13:45Z audit comment recorded it as a unilateral liveness call and was corrected in a follow-up — the measured facts were unchanged by the confirmation.
Predecessor: huangyiirene / session_01D6Qi9sYxhaRwj7TYiD5MWg, last output 11:43Z, no de-registration comment.
继承台账 | Ledger (re-measured from labels, 2026-08-12T15:05Z)
Whole-lane read in one query (labels: [domain:identity], minimal fields), states intersected locally — ⛔ never one query per pm-state, which is structurally blind to the others.
#8060 (CRM positions) · #8019 (change-email old mailbox) · #7988 (read-scope disclosure on CRUD) · #7881 (rethrowAsBetterAuthError) · #7826 (sys_session retention). Plus #8074, filed by this seat, awaiting triage grading and not yet domain-labelled.
⚠️target:v17 and could land in eitherplugin-security or plugin-auth. Read it fully to fix the package before claiming — guessing costs a serialization breach.
常设承诺 | Standing commitments
Drive the three in-flight cards to MERGED, verifying landing content on origin/main each time — the queue squashes, so merge-base --is-ancestor never fires.
Predecessor ops notes are preserved in the body revisions of 2026-08-11T17:13Z and 20:15Z. The load-bearing ones, plus this shift's:
An ACCEPT is not a landing. Found at takeover: two ACCEPTed, fully-green PRs sat unarmed for ~2 h because the reviewing session ended between the verdict and the arming step, and both states look identical on the card. Arm inside the same turn as the verdict, or schedule a check-in that reads the PR's state.
Flip ready BEFORE enabling auto-merge. Auto-merge does not survive a draft conversion; arming first and flipping second silently disarms it.
Per-job CI, never the aggregate.get_status on this repo returns only a Vercel status and reads success while saying nothing about any gate.
An assertion whose expectation and reality derive from the same source cannot fail — keep predict-then-mutate mandatory in every dispatch prompt. It has now paid three times in two shifts, and normal review missed all three.
Watch the OUTCOME, not the instrument. A re-arm condition must read the state that matters (main content / MERGED), never a specific PR number.
Queue membership: trust the added_to_merge_queue timeline event or the webhook. gh-readonly-queue/* refs false-positive on stale refs and false-negative at capacity.
Only converting to draft removes an enqueued PR; disable_pr_auto_merge alone does not.
⚠️ Angle-bracket placeholders are destroyed on write to a GitHub issue body. Use {curly}; re-read every body write.
mcp__github__pull_request_read get_files overflows on a large PR. Use git diff --name-only origin/main...refs/pull/{n}/head instead — git over the proxy works normally.
Single-writer seat post for the
domain:identityexecution lane. Index entry: #4604.🟢 ACTIVE
范围 | Scope
packages/plugins/plugin-auth·plugin-security·plugin-sharing·plugin-audit.packages/specsemantic surfaces transfer to thedomain:specseat.当前 PM | Current PM
os-zhuangsession_01PEVB6w7D7uCszR9Mw1BL73/pm-dispatch identity; maintainer-confirmed at ~13:47Z (「前任刚交接完,你可以接手了」). The 13:45Z audit comment recorded it as a unilateral liveness call and was corrected in a follow-up — the measured facts were unchanged by the confirmation.huangyiirene/session_01D6Qi9sYxhaRwj7TYiD5MWg, last output 11:43Z, no de-registration comment.继承台账 | Ledger (re-measured from labels, 2026-08-12T15:05Z)
Whole-lane read in one query (
labels: [domain:identity], minimal fields), states intersected locally — ⛔ never one query per pm-state, which is structurally blind to the others.pm:dispatchedtarget:v17(plugin-sharing) · #8049target:v17(plugin-auth) · #7809 (plugin-security) — all dev-in-flight, dispatched 14:29–15:03Zpm:queue(unassigned)target:v17· #7994 · #7858 · #7795 · #7675findingrethrowAsBetterAuthError) · #7826 (sys_sessionretention). Plus #8074, filed by this seat, awaiting triage grading and not yet domain-labelled.needs-user-decisionpm:blockedpm:on-holdMERGED this shift (this seat): 3 — all landing-verified by content on
origin/mainincluding negative space:target:v17object.zod.tscontract text untoucheduser.deleteUserstill unconfigured (zero occurrences); ledger rowdisabledtarget:v178c767f5f0owner_only_deletesfloor intact;unit_and_subordinatesuntouched (#7807's defect confirmed still live)Release board (
target:v17) on this lane: 3 — #8053 (queued, package undetermined) · #8049 (in flight) · #7807 (in flight).热文件串行队 | Hot-file serial queue
plugin-sharingplugin-authplugin-securityplugin-audittarget:v17and could land in eitherplugin-securityorplugin-auth. Read it fully to fix the package before claiming — guessing costs a serialization breach.常设承诺 | Standing commitments
origin/maineach time — the queue squashes, somerge-base --is-ancestornever fires.opCtx.operationraw, sopurge/transfer/restorederive no row scope whileupdate/deletenow do (#7665 asymmetry) #7809's anchors drifted twice for exactly this reason.)domain:*has one producer. ⛔ Do not dispatch theplugin-authhalf alone: it would take the spec-enum-vs-consumer ordering decision by accident.packages/specsemantic surfaces transfer to the spec seat. The error-code ledger is the registration surface a new code mechanically requires and was accepted in-bounds on fix(sharing):publicSharing.eligibilityis declared-but-unenforced — a draft or internal record mints apublicshare link and is served anonymously #7861 with a cross-seat declaration — that precedent is narrow and ⛔ does not extend toobject.zod.tscontract text.说明 | Notes
Predecessor ops notes are preserved in the body revisions of 2026-08-11T17:13Z and 20:15Z. The load-bearing ones, plus this shift's:
get_statuson this repo returns only a Vercel status and readssuccesswhile saying nothing about any gate.effectiveSharingModelis never consulted; the count came back 1, not 0. It was a pre-existing doc comment on an unrelated concern — but "1, not 0" is exactly the shape that gets waved through.org_member, so an org-less harness sees a real 403 defect answer 200. Apublic_read_writeobject is only writable by the row's creator —showcase_contributorgets 403 editing ashowcase_projectit can read, where the access matrix declaresedit:true#8023's dev's first fixture was org-less and passed against the known-broken build. Filed as [finding] An org-less test fixture cannot observe theorg_member-gated write floor, so a real 403 defect records as a PASSING cell #8074. Any fixture asserting row-level write permission needs an org context.maincontent / MERGED), never a specific PR number.added_to_merge_queuetimeline event or the webhook.gh-readonly-queue/*refs false-positive on stale refs and false-negative at capacity.disable_pr_auto_mergealone does not.content/docs/references/**ismerge=os-regen, but the silent-drop hazard needs the same path touched by both sides — compute the intersection of the PR's changed files against main's since that PR's merge-base. Empty ⇒ the four-step regen merge is not required. Measured empty for fix(sharing): enforce the declaredpublicSharing.eligibilitypredicate at link creation #7974 and fix(plugin-auth): enable better-authuser.changeEmail, and de-bookdelete-userin the auth route ledger (#7735) #8017; ⛔ re-measure每次.MANAGED_EXTENSION_FIELDSdoubles as the ADR-0092 D2 write whitelist — completing it to make a test meaningful is a security change. Relevant to [Decision] D7 now derives the twoFactor / jwks / deviceCode models — map them and retire their three #7770 exemptions? #7994.user.changeEmail, and de-bookdelete-userin the auth route ledger (#7735) #8017's dev corrected three PM premises, one load-bearing; fix(plugin-security): a public_read_write OWD opens row-level writes, not just the creator's (#8023) #8072's dev corrected the card's file attribution.subscribe_pr_activityfails on PRs authored by a different account — it was refused for fix(sharing): enforce the declaredpublicSharing.eligibilitypredicate at link creation #7974/fix(plugin-auth): enable better-authuser.changeEmail, and de-bookdelete-userin the auth route ledger (#7735) #8017 (predecessor's account). Fall back to round-cadence polling; PRs this seat's devs open subscribe fine.{curly}; re-read every body write.mcp__github__pull_request_read get_filesoverflows on a large PR. Usegit diff --name-only origin/main...refs/pull/{n}/headinstead —gitover the proxy works normally.