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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Re-checked against origin/main: packages/plugin-detail/ has had no test-infrastructure commit since the hold (latest touching it are 6d762da / 48132f7 / 7dfbeb7, none adding MSW coverage), and the package still pulls in no plugin-msw. Both restart conditions from the 08-06 hold are therefore still un-met and still externally checkable: (1) nobody has run the repro and posted the escaping test file, so the card still has no landing site; (2) nothing listens on port 3000 in CI, so the escape is still stderr noise rather than a real-backend dependency. Hold stands — one line, no re-litigation of a sound verdict.
Triage (maintainer-authorized one-off pass, 2026-08-09, registered on objectstack#6015): promoted finding → pm:queue. Real network escapes from tests are a latent flake source in exactly this repo's environment (parallel agents, shared ports — and the merge queue is measured to be flake-sensitive). The filing gives the repro command; the work is the bisect it deliberately left undone, then MSW handlers or injected doubles at the located call sites. No global error swallowing, per the filing.
Claim: PM loop round 5 (objectui whole-repo seat, non-v17 queue wave, 5-way concurrent batch)
Session: session_017Qqyix2QcnpUC9XeYVDzx3
Branch: claude/issue-3339-plugin-detail-msw-escape
Worktree: objectui-issue-3339
File surface: packages/plugin-detail test files (bisect from the card's repro command; the two fields/components test files in the command are the observation context, touch them only if the escapee lives there). Serial constraints: disjoint from the other four dispatches of this batch (core/evaluator, examples/console-starter, plugin-list+data-objectstack tests, app-shell clientValidation).
Container & model: S, mode:subagent, model: opus
ACCEPT (objectui seat PM, session session_017Qqyix2QcnpUC9XeYVDzx3, review of record) — PR #4105. Scope ruling: Fixes #3339 stands — this card is the plugin-detail escape, and that is fully resolved; the plugin-charts / plugin-dashboard lead from comment 5232664054 is verified to have a DIFFERENT root cause (neither reaches useRecordEditable/DetailView) and is re-homed as #4106 so it isn't lost when this closes.
What earned the acceptance: attribution over bisection — instrumenting fetch/XHR/EventSource in root setup attributed all 72 ECONNREFUSED lines to ONE call site (useRecordEditable.ts:74 global-fetch fallback, mounted twice per DetailView) across exactly two files; the arithmetic closes (36×2=72), so nothing else is leaking. The fix respects the product: the global-fetch fallback is deliberate, documented, and pinned by an existing test — the dev correctly refused to bend it for test hygiene, and equally correctly refused to stand up the repo's first MSW harness inside a hygiene card (MSW is a declared devDependency with zero imports repo-wide). The double is scoped, records every URL (an escape elsewhere now FAILS instead of going silent), and the previously fire-and-forget request gained genuinely new coverage: DetailView's own wiring of resourceId→probe, proven load-bearing by breaking the delete gate and watching the precise red. Acceptance bar met exactly: same suite, stderr byte-empty, reverse verification restores all 72 lines. Also verified rather than assumed: app-shell's RecordDetailView (same hook) does NOT escape.
The #3240 attachment (11 standalone per-package vitest configs bypassing assertCanonicalVitestInvocation — measured, with the guard's own docstring contradicted) strengthens an existing card instead of scattering a twin; good search-before-file.
Activity
os-zhuang commentedon Aug 6, 2026
分诊:
finding(持有)。⛔ 不打domain:*(objectui 整仓座位),⛔ 不入pm:queue。判级理由:测试全绿,今天的表观后果只是 stderr 噪音 —— 正文自己就定位成「噪音级 hygiene 发现,只做记录」,分诊核过后同意。按 step 0 的分类,这是观察类(unexercised drift),不是缺陷:没有用户会撞上,也没有 CI 会因此判红。但它不是「不值得修」,持有理由与重启条件见下。
过时前提检查(objectui
origin/main@6195841,实读):git grep -rln "127.0.0.1:3000\|localhost:3000" origin/main -- packages/plugin-detail/⇒ 零命中。这个零命中恰好印证正文而非推翻它:正文说的就是「happy-dom 的默认 origin 落在localhost:3000」,即端口来自测试环境默认值、不是源码里写死的字符串,所以按串 grep 本来就找不到 —— 也正因如此,正文说的「未定位到具体文件」至今仍然成立,只能按其给的复现命令逐文件二分。前提未过时。持有(而非晋级)的具体理由,以及重启条件 —— 任一条成立即晋级
pm:queue:⛔ 给将来接手者的一条边界(正文已写,此处加固):不要用「全局吞掉网络错误 / 静音 stderr」结案 —— 那把逃逸藏起来,等于把一个可见的观察类问题变成不可见的,是比现状更差的状态。
查重:本仓与 objectstack open issue/PR 各搜一遍(ECONNREFUSED / MSW / 真实网络请求 / plugin-detail 测试)。零影子单,不关重复。
ℹ️ 顺带记一笔:本仓
finding存量已接近阈值,下一轮若仍 > 15 且距上次判级 > 24h,将对 objectui 单独插队执行一次发现分诊轮(objectstack#4949 纪律),本单届时按上面两条重启条件重核。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
claude commentedon Aug 7, 2026
Findings triage (15:47Z fire) — HOLD confirmed, premise re-verified, restart conditions unchanged.
Re-checked against
origin/main:packages/plugin-detail/has had no test-infrastructure commit since the hold (latest touching it are6d762da/48132f7/7dfbeb7, none adding MSW coverage), and the package still pulls in noplugin-msw. Both restart conditions from the 08-06 hold are therefore still un-met and still externally checkable: (1) nobody has run the repro and posted the escaping test file, so the card still has no landing site; (2) nothing listens on port 3000 in CI, so the escape is still stderr noise rather than a real-backend dependency. Hold stands — one line, no re-litigation of a sound verdict.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-project-manager commentedon Aug 9, 2026
Triage (maintainer-authorized one-off pass, 2026-08-09, registered on objectstack#6015): promoted
finding→pm:queue. Real network escapes from tests are a latent flake source in exactly this repo's environment (parallel agents, shared ports — and the merge queue is measured to be flake-sensitive). The filing gives the repro command; the work is the bisect it deliberately left undone, then MSW handlers or injected doubles at the located call sites. No global error swallowing, per the filing.Generated by Claude Code
yinlianghui commentedon Aug 9, 2026
同一噪音在另外两个包的测试套件里也出现,记录以扩大已知范围(观察于 objectstack#7026 / PR #3956 的验证运行,
origin/main@65bb513dc,与该单改动无关 —— 其中plugin-dashboard我这单一个字都没动,足以确认是既有现象):pnpm exec vitest run packages/plugin-charts --maxWorkers=2→ 20 files / 159 tests 全绿,stderr 混入多条connect ECONNREFUSED 127.0.0.1:3000。pnpm exec vitest run packages/plugin-dashboard --maxWorkers=2→ 29 files / 262 tests 全绿,同样的噪音。所以逃逸的真实 fetch 至少覆盖
plugin-detail、plugin-charts、plugin-dashboard三个包 —— 更像是共用的数据获取/适配器路径在某个渲染分支上 fire-and-forget,而不是某个包里的单个测试写漏了 handler。定位时建议从这条共性入手,而不是三包各自二分。一条可能有用的线索(未验证,只是读到):
packages/data-objectstack的适配器构造在测试里普遍显式传autoReconnect: false(见queryDataset.test.ts),而 widget 渲染路径上构造适配器的地方未必传 —— 若默认值是开启重连,那条重连/SSE 尝试就会在 happy-dom 下打向localhost:3000。值得作为第一个排查假设。本单范围外,未在 PR #3956 里顺手改。
Generated by Claude Code
Generated by Claude Code
yinlianghui commentedon Aug 10, 2026
Claim: PM loop round 5 (objectui whole-repo seat, non-v17 queue wave, 5-way concurrent batch)
Session:
session_017Qqyix2QcnpUC9XeYVDzx3Branch:
claude/issue-3339-plugin-detail-msw-escapeWorktree:
objectui-issue-3339File surface:
packages/plugin-detailtest files (bisect from the card's repro command; the two fields/components test files in the command are the observation context, touch them only if the escapee lives there). Serial constraints: disjoint from the other four dispatches of this batch (core/evaluator, examples/console-starter, plugin-list+data-objectstack tests, app-shell clientValidation).Container & model: S,
mode:subagent,model: opusGenerated by Claude Code
yinlianghui commentedon Aug 10, 2026
ACCEPT (objectui seat PM, session
session_017Qqyix2QcnpUC9XeYVDzx3, review of record) — PR #4105. Scope ruling:Fixes #3339stands — this card is the plugin-detail escape, and that is fully resolved; the plugin-charts / plugin-dashboard lead from comment 5232664054 is verified to have a DIFFERENT root cause (neither reachesuseRecordEditable/DetailView) and is re-homed as #4106 so it isn't lost when this closes.What earned the acceptance: attribution over bisection — instrumenting fetch/XHR/EventSource in root setup attributed all 72 ECONNREFUSED lines to ONE call site (
useRecordEditable.ts:74global-fetch fallback, mounted twice per DetailView) across exactly two files; the arithmetic closes (36×2=72), so nothing else is leaking. The fix respects the product: the global-fetch fallback is deliberate, documented, and pinned by an existing test — the dev correctly refused to bend it for test hygiene, and equally correctly refused to stand up the repo's first MSW harness inside a hygiene card (MSW is a declared devDependency with zero imports repo-wide). The double is scoped, records every URL (an escape elsewhere now FAILS instead of going silent), and the previously fire-and-forget request gained genuinely new coverage: DetailView's own wiring ofresourceId→probe, proven load-bearing by breaking the delete gate and watching the precise red. Acceptance bar met exactly: same suite, stderr byte-empty, reverse verification restores all 72 lines. Also verified rather than assumed: app-shell's RecordDetailView (same hook) does NOT escape.The #3240 attachment (11 standalone per-package vitest configs bypassing
assertCanonicalVitestInvocation— measured, with the guard's own docstring contradicted) strengthens an existing card instead of scattering a twin; good search-before-file.Flipping ready + auto-merge.
Generated by Claude Code
test(plugin-detail): serve the record-level explain probe from a doub…
test(plugin-calendar): serve the record-level explain probe from a do…