fix(fresh-ui): export 7 *Namespace types to clear private-type-ref deno doc lint#58
Conversation
|
@openhands-agent model=openrouter/qwen/qwen3.7-max output=pr-comment iterations=300 use harness ROLE — IMPL-EVAL (slice G3-FUI, fresh-ui namespace-type exports)You are the IMPL-EVAL evaluator for PR #58 ( Branch tip to evaluate: What landed (1 commit, 8 files, all under
|
OpenHands Agent — CompletedModel: openrouter/qwen/qwen3.7-max IMPL-EVAL Evaluation Summary - PR #58Verdict: FAIL_FIXSummaryPR #58 attempts to clear 7 Changes
ValidationPrimary Gate (deno doc --lint): PASSType Checking: PASSScope Verification: PASS✓ All files under Lint Verification: FAILBaseline comparison:
All 42 new violations are in the namespace type definitions across the 7 component files (Accordion, Dialog, Drawer, Popover, Sheet, Tabs, Tooltip). Ruling on Central Question: (b)Reject the minimal/lossy The implementation must preserve type precision by:
Rationale:
Remaining Risks
RecommendationRe-issue this slice with direction (b): export the underlying subcomponent functions and preserve
Run: https://github.com/rickylabs/netscript/actions/runs/27782247051 |
🤖 Augment PR SummarySummary: Unblocks
🤖 Was this summary useful? React with 👍 or 👎 |
| /** Compound accordion namespace type with root and item subcomponents. */ | ||
| export type AccordionNamespace = Readonly<{ | ||
| Item: (props: any) => unknown; | ||
| ItemContent: (props: any) => unknown; |
There was a problem hiding this comment.
The (props: any) => unknown signatures here make Accordion.Item/etc no longer type as valid JSX components for consumers (return type unknown) and they introduce any into the public API surface.
Severity: high
Other Locations
packages/fresh-ui/src/runtime/dialog/Dialog.tsx:59packages/fresh-ui/src/runtime/drawer/Drawer.tsx:59packages/fresh-ui/src/runtime/popover/Popover.tsx:83packages/fresh-ui/src/runtime/sheet/Sheet.tsx:59packages/fresh-ui/src/runtime/tabs/Tabs.tsx:47packages/fresh-ui/src/runtime/tooltip/Tooltip.tsx:59
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
… PR #58 + IMPL-EVAL Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018fq9V7ujx7e1rWXi57qkPG
|
@openhands-agent model=openrouter/qwen/qwen3.7-max output=pr-comment iterations=300 use harness IMPL-EVAL cycle 2 (slice G3-FUI) — remediation of the cycle-1
|
OpenHands Agent — CompletedModel: openrouter/qwen/qwen3.7-max IMPL-EVAL Cycle 2 Evaluation — PR #58Verdict:
|
| Namespace | Sample member |
|---|---|
AccordionNamespace |
Root: typeof AccordionRoot; Item: typeof AccordionItem; ... |
DialogNamespace |
Root: typeof DialogRoot; Close: typeof DialogClose; ... |
PopoverNamespace |
Root: typeof PopoverRoot; Arrow: typeof PopoverArrow; ... |
All subcomponent functions are declared export function in their source *.tsx files and re-exported from packages/fresh-ui/interactive.ts. The private-type-ref root cause is structurally eliminated — subcomponents are public, typeof targets are public.
Type precision is preserved; no fallback to (props: any) => unknown. Ruling (b) genuinely implemented, not faked with a looser type.
Responses to Cycle-1 Review (ruling b)
- ✅ Lint failure blocks merge → resolved: 0
no-explicit-anyviolations (was 42). - ✅ Type information loss → resolved:
typeof <Subcomponent>preserved in all 7*Namespacetypes; no API precision degradation. - ✅ Incomplete solution → resolved: both problems (private-type-ref + no-explicit-any) solved cleanly by exporting subcomponents.
Remaining Risks
None. This is cycle 2, second eval pass. All gates green, ruling (b) fulfilled. Verdict PASS.
Artifacts Written
.llm/tmp/run/openhands/pr-58/run-27783995605-1/evaluate.md/home/runner/work/_temp/openhands/27783995605-1/summary.md(this file)
Run: https://github.com/rickylabs/netscript/actions/runs/27783995605
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018fq9V7ujx7e1rWXi57qkPG
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018fq9V7ujx7e1rWXi57qkPG
Pages A3 deploy GREEN and live at /netscript/. check-test regression on the umbrella root-caused to PR #58 stamping `props: unknown): unknown` on fresh-ui interactive runtime components (satisfies A1 doc-lint, breaks JSX/consumer typecheck guard). Scorecard cannot PASS until fixed (WSL Codex lane). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018fq9V7ujx7e1rWXi57qkPG
…type fix Ready-to-dispatch implementation brief for the check-test regression blocker: replace the over-broad `(props: unknown): unknown` signatures stamped by #58 on the 7 interactive runtime component families with the already-imported concrete prop types + `JSX.Element` return, satisfying both check-test (consumer-render guard) and A1 doc-lint. Not yet dispatched (awaits daemon-attached Codex thread). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018fq9V7ujx7e1rWXi57qkPG
… repro Root cause refined: #58 individually exported the interactive part-functions (main only exposed the namespaces), forcing the (props:unknown):unknown stamp to silence private-type-ref. Fix must return VNode (NOT JSX.Element, which resolves to the private JSXInternal.Element) + concrete props + export the prop/namespace types (approved public-surface expansion). Both gates: deno task test AND deno doc --lint ./mod.ts ./interactive.ts ./primitives.tsx exit 0. Routed to WSL Codex. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018fq9V7ujx7e1rWXi57qkPG
…sue/PR numbers) (#655) * docs: de-internalize public framework docs (neutral provenance, no issue/PR numbers) Replaces internal-app provenance ("eis-chat ... the app NetScript is dogfooded against") with neutral "a production chat application built on NetScript" framing across the workspace tutorial and services-sdk pages, keeping the technical substance. Removes reader-facing PR/issue-number citations from the fresh-ui surface note (PR #58) and the workers published-mode caution (#638 link + stale caveat marker), rephrasing the worker caveat factually and verified against the issue #638 diagnosis. Legitimate technical "internal" uses (OTel SpanKind, internal spans/surfaces, "internalizing") are kept unchanged. docs/site `deno task verify` green: build (516 files), 24055 links resolve, 27 caveat markers resolve. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiTbVL2p3zLYc9AxxpK8iG * docs: neutralize eischat stream identifiers in the streams example --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Slice G3-FUI — export fresh-ui
*Namespacetypes (clearprivate-type-ref)Part of the
release/jsr-readinessprogram (Group 3). Implemented by a daemon-attached WSL Codex thread (019edc0d-8e77-7931-9cd7-8f7cb93b2b2d), supervised — not self-certified. IMPL-EVAL (OpenHands qwen 3.7 max, separate session) follows.What & why
@netscript/fresh-uiwas the only unit in the 26-unit publish census failingdeno doc --lint— 7error[private-type-ref]: each public component const (Accordion,Dialog,Drawer,Popover,Sheet,Tabs,Tooltip) was annotated by a private*Namespacetype. This blocked fresh-ui's A1 scorecard gate. The fix exports the 7 namespace types and re-exports them from the public entry (interactive.ts).Evidence (independently re-verified by supervisor)
deno doc --lint packages/fresh-ui/{mod.ts,interactive.ts,primitives.tsx}→ exit 0 (was 7 errors).deno check --unstable-kvon the 3 public entries → exit 0.8c26459; 8 files, all underpackages/fresh-ui/(7 components +interactive.ts); no version/catalog/scaffold-versions edits;deno.lockuntouched; no unrelated churn.To clear the secondary private-type-refs that surfaced once the namespace types became public, the implementation changed each member from
typeof <Subcomponent>(e.g.Item: typeof AccordionItem) to(props: any) => unknown. This keeps the public export surface minimal but:Accordion.Itemetc. lose real prop types, andanyinto the published surface (please verifydeno task check+deno linton fresh-ui forno-explicit-any).Alternative approach: export the underlying subcomponent functions (
AccordionItem, …) and keeptypeof, preserving full type precision at the cost of a larger named-export surface.Please rule: ship the minimal/lossy approach as-is, or require the
typeof-preserving approach (re-steer the Codex thread). State whether it blocks PASS.🤖 Generated with Claude Code