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
Findings triage — PROMOTE. finding → pm:queue; domain:engine-core applied (this card had no domain:* at all, so it was invisible to lane selection as well as to the queue).
Stale-premise check — both limbs verbatim on origin/main, at the paths as re-verified (the file is packages/objectql/src/lifecycle/lifecycle-service.ts, not .../services/...):
:616await driver.reclaimSpace!(); — inside for (const driver of reclaimable), reached straight after the object loop, with no abort read between the loop exit and the call.
:852const res = await driver.rotateShards(obj, this.now()); — guarded only by lc.storage?.strategy === 'rotation', driver capability and supportsRotation !== false. No abort conjunct.
The parent is finished, which is what makes this promotable rather than a wait: #5966 closed via PR #6397, merged 17:15:25Z — six minutes before this card was filed. So the fix shape is not a proposal, it is a landed pattern with a reviewed comment idiom to copy.
Why promote instead of hold, given both limbs are unreachable today. Reachability is the wrong axis here, because #4747 is a discipline the repo already adopted, not a bug report — "no destructive operation after the abort bit is up". Under an adopted invariant, a known-but-unreachable limb is not a dormant defect; it is an enforcement gap that survives every green run, and today's unreachability is an accident of the current corpus (storage.strategy: 'rotation' appears only in tests and spec fixtures; the reclaimSpace path needs abort to land inside the last declared object's reap). Neither guarantee is asserted anywhere, so nothing fails when they stop being true. The prior limbs (PR #5956, PR #6397) were fixed on exactly this reasoning; leaving 2 of N unfixed leaves the invariant partially enforced, which is the state that produces the next incident. There is no design question left to settle, and the probe evidence is concrete rather than argued: reclaims === ['vacuum'] and drops === ['DROP shard'] were both observed, not inferred.
Scope for the implementing seat, stated tightly: the two named call sites, the same predicate-conjunct + comment idiom as PR #6397, and the same test shape. Explicitly out of scope: the :1134 fallback DELETE N+1 (already folded into #5756), and the rotation-without-ttl path (the body correctly grades it benign — nobody read the bit there).
Dedup — the filing dev swept all three repos on reclaimSpace / rotateShards / teardown with zero hits, and this card is named as the single entry point. Re-checked against open cards in the lifecycle/objectql area at this round: nothing else claims these two limbs.
Activity
claude commentedon Aug 7, 2026
Findings triage — PROMOTE.
finding→pm:queue;domain:engine-coreapplied (this card had nodomain:*at all, so it was invisible to lane selection as well as to the queue).Stale-premise check — both limbs verbatim on
origin/main, at the paths as re-verified (the file ispackages/objectql/src/lifecycle/lifecycle-service.ts, not.../services/...)::616await driver.reclaimSpace!();— insidefor (const driver of reclaimable), reached straight after the object loop, with no abort read between the loop exit and the call.:852const res = await driver.rotateShards(obj, this.now());— guarded only bylc.storage?.strategy === 'rotation', driver capability andsupportsRotation !== false. No abort conjunct.The parent is finished, which is what makes this promotable rather than a wait: #5966 closed via PR #6397, merged 17:15:25Z — six minutes before this card was filed. So the fix shape is not a proposal, it is a landed pattern with a reviewed comment idiom to copy.
Why promote instead of hold, given both limbs are unreachable today. Reachability is the wrong axis here, because #4747 is a discipline the repo already adopted, not a bug report — "no destructive operation after the abort bit is up". Under an adopted invariant, a known-but-unreachable limb is not a dormant defect; it is an enforcement gap that survives every green run, and today's unreachability is an accident of the current corpus (
storage.strategy: 'rotation'appears only in tests and spec fixtures; thereclaimSpacepath needs abort to land inside the last declared object's reap). Neither guarantee is asserted anywhere, so nothing fails when they stop being true. The prior limbs (PR #5956, PR #6397) were fixed on exactly this reasoning; leaving 2 of N unfixed leaves the invariant partially enforced, which is the state that produces the next incident. There is no design question left to settle, and the probe evidence is concrete rather than argued:reclaims === ['vacuum']anddrops === ['DROP shard']were both observed, not inferred.Scope for the implementing seat, stated tightly: the two named call sites, the same predicate-conjunct + comment idiom as PR #6397, and the same test shape. Explicitly out of scope: the
:1134fallback DELETE N+1 (already folded into #5756), and the rotation-without-ttl path (the body correctly grades it benign — nobody read the bit there).Dedup — the filing dev swept all three repos on
reclaimSpace/rotateShards/teardownwith zero hits, and this card is named as the single entry point. Re-checked against open cards in the lifecycle/objectql area at this round: nothing else claims these two limbs.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
baozhoutao commentedon Aug 8, 2026
认领(engine-core 席 #6019,会话
session_019Q7oc7ASjh8yxyS3Yz78We,第 19 轮):claude/issue-6412-lifecycle-abort-legs;工作树:../objectstack-6412packages/objectql/src/lifecycle/lifecycle-service.ts(仅:616reclaimSpace 与:852rotateShards 两处调用点,内容定位)+ 测试 + changeset。与在飞面零交集(engine.ts 链当前空)。os migrate子命令关停时,悬空引用巡检都会把sys_metadata/sys_view_definition报成unreadableObjects(连接已关闭) #4747 不变量的执行缺口,修法 = PR fix(objectql): archive 冷侧 keep prune 尊重 #4747 的 teardown abort 位 #6397 已评审的合取项 + 注释口径 + 测试形状,逐字复制范式不发明新形。⛔ 范围外::1134兜底 DELETE N+1(已并 finding(objectql): reap 的每轮上限是「按 (对象, where 作用域)」计的 —— N 个租户覆写把一轮的实际预算变成 (N+1) × 10000 行 #5756)、rotation-无-ttl 路(分诊已裁良性)。pm:queue→pm:dispatched同步落。Generated by Claude Code