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
{{ message }}
Repository navigation
metadata: DatabaseLoader is locale-blind for a bundled type, so saving one locale of an email template overwrites another locale's row in the same (package, name) slot #32422
Child of the ADR-0150 epic #31527. This defect was measured by the #31699 dev in round 4 of PR #32214 (report 6795944262, out-of-scope finding, class a). It already exists on main; #32214 does not introduce it.
Where. In packages/metadata/src/loaders/database-loader.ts, baseFilter has no bundle_member, so save and the single-package registerRollback target the first row of the name's (package, name) slot, whatever its locale.
What happens. Measured probe: a save of fr-FR into a slot that holds en-US overwrote the en-US row. The rows went from [[A,null,en-US,1],[A,fr-FR,fr-FR,2]] to [[A,null,fr-FR,3],[A,fr-FR,fr-FR,2]]. The same happens on main through the name's first row. email_template is the only bundled type today.
Make save / registerRollback target the member's row: (package, name, bundle_member), with the canonical member stored as NULL (overlayMemberValue).
Pin that each locale saves and rolls back alone and that the other locale is untouched. Ablate once.
Serial: after #32214, which fixes the read half (loadMany / loadManyKeyed keep every member) under the epic ruling on that PR. Clause-②: the claimer declares it. Business reason: editing one language of an email template silently destroys another language's customization.
Grade: p1, above its p2 siblings. Saving one locale silently overwrites another locale's row of the same email template, so stored content is lost (measured: en-US → fr-FR). The defect is on main already.
Epic note · 2026-11-11T14:52Z. This card's fix is pulled into PR #32214 (#31699) by epic ruling 6799056319. The boot priming pass on that head reaches the locale-blind save on every eager boot, so the save is made member-aware there, and the PR carries Fixes #32422. ⛔ Do not claim this card separately.
Claim: epic seat, pulled into PR #32214 by epic ruling 6799056319
Session: session_01QSeKYm8sWjp2Pk76warN7w
Account: os-justin
Branch: claude/project-thread-3giljf
Worktree: objectstack-issue-31699
Domain: domain:server
Seat: epic:#31527#1
File surface: packages/metadata/src/loaders/database-loader.ts (save, slottedSaveTarget) and its tests, inside PR #32214 (#31699 PR 1 of 3). Stop on breach; explain in the report.
Container & model: M, mode:subagent, model: opus, effort: high
Clause-②: yes (narrowing)
Metadata-protocol: narrowed
Responsibility: n/a — ADR-0150 child, carried by #31699's PR
Thread-read: 6799089061
Premise: holds (a save of fr-FR into a slot that holds en-US overwrote the en-US row at f9f589da, measured in the round-6 before-state of report 6801182598; seat reading 2026-11-11T16:30Z)
Serial constraints cleared: #32214's own round 6 carries the fix; Fixes #32422 sits in that PR's body
Takeover · #32422 · 2026-11-11T21:11Z (execution-duties.md 认领节, four parts)
① Release: claim 6801374615 · session_01QSeKYm8sWjp2Pk76warN7w (os-justin). Order: the maintainer, in his project thread, 2026-11-11, verbatim 「前任 justin 没token了,他的工作你都接手」. Seat take-over of epic:#31527#1 is on #31527.
② Assignee: os-justin → os-bill, in this same write.
③
Claim: epic seat take-over, PR #32214 round 7 resume (epic ruling 6801410166)
Session: session_01Utp6CZu9RRx2o8sFUUpEPU
Account: os-bill
Branch: claude/project-thread-t7jkiz (pushes to claude/project-thread-3giljf first so PR #32214 keeps its history; if refused, a draft PR from this branch supersedes #32214)
Worktree: objectstack-issue-31699
Domain: domain:server
Seat: epic:#31527#1
File surface: packages/metadata/src/loaders/database-loader.ts (save, slottedSaveTarget) and its tests, inside PR #32214 (#31699 PR 1 of 3). Stop on breach; explain in the report.
Container & model: M, mode:thread, model: opus, effort: xhigh
Clause-②: yes (narrowing)
Metadata-protocol: narrowed
Responsibility: n/a — ADR-0150 child, carried by #31699's PR
Thread-read: 6801374615
Premise: holds (ruling 6801410166 on PR #32214 at cfb8f300; round 7 is unverified)
Serial constraints cleared: #32327 (#32183), #32407 and #32408 wait for this PR; no live claim names these files
Resume-from: claude/project-thread-3giljf@74a7e4cb6a
④ Hand-over: the last pushed sha on claude/project-thread-3giljf is 74a7e4cb6a (round 7 commit 0f93f8f133 answering ruling 6801410166, then a main merge). No round-7 report and no gate run exist for it; the new dev verifies it against the ruling's four pins, ablates once, and reports.
Closed by PR #32214 (merged 2026-11-12 03:12:44Z, f56354c2cd) through its Fixes line. This removes the pm:dispatched and pm:blocking state labels. Carried on: R7-C (stale stored body beats a fresh file after an edit), plus the follow-ups N9 / R8-A → #32488 and #32517, and the bundle-member keying in migrate → #32489. All are #31527 sub-issues, now in flight with the epic seats.
Activity
objectstack-fleet commentedon Nov 11, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage:
findingpromoted →domain:server· p1 ·pm:blocked· 2026-11-11T12:56ZBlocked-by: #32214
⛔ Not a claim.
en-US→fr-FR). The defect is onmainalready.Generated by Claude Code
objectstack-fleet commentedon Nov 11, 2026
epic:#31527#1 · os-justin · session_01QSeKYm8sWjp2Pk76warN7w
Epic note · 2026-11-11T14:52Z. This card's fix is pulled into PR #32214 (#31699) by epic ruling 6799056319. The boot priming pass on that head reaches the locale-blind save on every eager boot, so the save is made member-aware there, and the PR carries
Fixes #32422. ⛔ Do not claim this card separately.objectstack-fleet commentedon Nov 11, 2026
epic:#31527#1 · os-justin · session_01QSeKYm8sWjp2Pk76warN7w
Claim: epic seat, pulled into PR #32214 by epic ruling 6799056319
Session:
session_01QSeKYm8sWjp2Pk76warN7wAccount:
os-justinBranch:
claude/project-thread-3giljfWorktree:
objectstack-issue-31699Domain:
domain:serverSeat:
epic:#31527#1File surface:
packages/metadata/src/loaders/database-loader.ts(save,slottedSaveTarget) and its tests, inside PR #32214 (#31699 PR 1 of 3). Stop on breach; explain in the report.Container & model:
M,mode:subagent,model: opus,effort: highClause-②: yes (narrowing)
Metadata-protocol: narrowed
Responsibility: n/a — ADR-0150 child, carried by #31699's PR
Thread-read: 6799089061
Premise: holds (a save of
fr-FRinto a slot that holdsen-USoverwrote theen-USrow atf9f589da, measured in the round-6 before-state of report 6801182598; seat reading 2026-11-11T16:30Z)Serial constraints cleared: #32214's own round 6 carries the fix;
Fixes #32422sits in that PR's bodyDispatched 2026-11-11T16:30Z.
objectstack-fleet commentedon Nov 11, 2026
epic:#31527#1 · os-bill · session_01Utp6CYGYEUhpi29FpjLmxT
Takeover · #32422 · 2026-11-11T21:11Z (execution-duties.md 认领节, four parts)
① Release: claim 6801374615 · session_01QSeKYm8sWjp2Pk76warN7w (
os-justin). Order: the maintainer, in his project thread, 2026-11-11, verbatim 「前任 justin 没token了,他的工作你都接手」. Seat take-over ofepic:#31527#1is on #31527.② Assignee:
os-justin→os-bill, in this same write.③
Claim: epic seat take-over, PR #32214 round 7 resume (epic ruling 6801410166)
Session:
session_01Utp6CZu9RRx2o8sFUUpEPUAccount:
os-billBranch:
claude/project-thread-t7jkiz(pushes toclaude/project-thread-3giljffirst so PR #32214 keeps its history; if refused, a draft PR from this branch supersedes #32214)Worktree:
objectstack-issue-31699Domain:
domain:serverSeat:
epic:#31527#1File surface:
packages/metadata/src/loaders/database-loader.ts(save,slottedSaveTarget) and its tests, inside PR #32214 (#31699 PR 1 of 3). Stop on breach; explain in the report.Container & model:
M,mode:thread,model: opus,effort: xhighClause-②: yes (narrowing)
Metadata-protocol: narrowed
Responsibility: n/a — ADR-0150 child, carried by #31699's PR
Thread-read: 6801374615
Premise: holds (ruling 6801410166 on PR #32214 at
cfb8f300; round 7 is unverified)Serial constraints cleared: #32327 (#32183), #32407 and #32408 wait for this PR; no live claim names these files
Resume-from:
claude/project-thread-3giljf@74a7e4cb6a④ Hand-over: the last pushed sha on
claude/project-thread-3giljfis74a7e4cb6a(round 7 commit0f93f8f133answering ruling 6801410166, then amainmerge). No round-7 report and no gate run exist for it; the new dev verifies it against the ruling's four pins, ablates once, and reports.Generated by Claude Code
objectstack-fleet commentedon Nov 12, 2026
epic:#31527#1 · os-bill · session_01Utp6CYGYEUhpi29FpjLmxT
Closed by PR #32214 (merged 2026-11-12 03:12:44Z,
f56354c2cd) through itsFixesline. This removes thepm:dispatchedandpm:blockingstate labels. Carried on: R7-C (stale stored body beats a fresh file after an edit), plus the follow-ups N9 / R8-A → #32488 and #32517, and the bundle-member keying in migrate → #32489. All are #31527 sub-issues, now in flight with the epic seats.