Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

plugin-charts / plugin-dashboard 测试套件仍有真实网络逃逸(ECONNREFUSED) — 根因与 #3339 不同,需独立定位 #4106

Closed

Description

@yinlianghui

Re-homed from #3339 (comment 5232664054 recorded the same ECONNREFUSED noise class in these two packages) at that card's close — PR #4105 fixed the plugin-detail escape and its dev VERIFIED these two have a different root cause: neither package reaches useRecordEditable or DetailView at all, so the #4105 fix does not cover them and the bisect must start fresh.

Known facts (inherited from #3339 / PR #4105)

  • Noise shape: real fetch under happy-dom escaping to 127.0.0.1:3000, tests green (fail-open), stderr polluted with connect ECONNREFUSED.
  • The efficient localization method is on record in PR test(plugin-detail): serve the record-level explain probe from a double, not the network #4105: instrument fetch/XMLHttpRequest/EventSource in the root setup files and attribute every escape to its file + call site — attribution beats file-by-file bisection.
  • The fix discipline is also on record: test-side doubles scoped to the escaping files, recording every URL so new escapes fail an assertion; NO global error swallowing; product fallbacks stay untouched; MSW only if the repo ever stands up a real MSW harness (it has none today — declared devDependency, zero imports).
  • Acceptance bar: the packages' suites run from repo root with zero ECONNREFUSED lines in stderr, no assertion weakened.

Not yet known

Which test files / call sites in plugin-charts and plugin-dashboard emit the requests, and what endpoint(s) they hit. That is this card's work.

Filed unassigned for the queue; observation provenance stays on #3339's thread.

Activity

  1. self-assigned this
    on Aug 10, 2026
  2. yinlianghui commented on Aug 10, 2026

    @yinlianghui
    ContributorAuthor

    Claim: PM loop round 5 (rolling slot refill — batch mode retired per maintainer, seat keeps 5 concurrent)
    Session: session_017Qqyix2QcnpUC9XeYVDzx3 · Branch: claude/issue-4106-charts-dashboard-net-escape · Worktree: objectui-issue-4106
    File surface: packages/plugin-charts + packages/plugin-dashboard test files (product code only if a bug is FOUND, which then needs its own premise verification). Serial constraints: disjoint from #3528/#3853/#3830/#3810 in flight.
    Container & model: S, mode:subagent, model: opus


    Generated by Claude Code

  3. yinlianghui commented on Aug 10, 2026

    @yinlianghui
    ContributorAuthor

    ACCEPT (objectui seat PM, session session_017Qqyix2QcnpUC9XeYVDzx3, review of record) — PR #4115.

    Attribution closed the count exactly (12 escapes × 2 lines = 24, zero unexplained) and corrected both of the card's assumptions with measurements: plugin-dashboard emits nothing (it already answers the endpoint from a double — which became the precedent this fix follows), and the escape is one effect in four files, not scattered. The doubles reproduce the exact observable state the swallowed rejection produced ({} → null maps), so no assertion changed meaning; each file's afterEach turns any NEW escape into a failing assertion. Reverse verification restores exactly 24 lines with the suite still green — the escape never had a watcher, now it does.

    The real find is #4114: the bare-fetch read is a genuine product bug (ObjectChart reads SchemaRendererContext at :253 yet ignores its apiFetch, bypassing the hosted console's authenticated channel — the convention is documented in useRecordEditable and implemented in ObjectGantt and useViewData), demonstrated by a test mounting a real provider whose probe still escapes. Correctly reported instead of silently fixed in a hygiene card. This seat is grading it bug and dispatching it into the freed slot now.

    Flipping ready + auto-merge.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions