Wave 5b (sdk): research + proposed plan & design [PLAN-EVAL pending]#29
Conversation
Generator artifacts for sub-wave 5b: measure-first baseline (check PASS, combined doc-lint 29 with 7/9 ptr attributed upstream to plugin-streams-core, dry-run 2 slow types + 37 excluded-module from root exclude), architecture-mandate research (composability layer map, transport seam audit, RFC 14/17), proposed 19-slice plan (A3+A4 gate union; ports rename, QueryClientPort/ServiceQueryUtils typing, defineServices L3 preset, cross-package streams type exports), design checkpoint, drift log (4 entries), context pack for PLAN-EVAL. No implementation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@openhands-agent model=openrouter/qwen/qwen3.7-max output=pr-comment use harness proceed to PLAN-EVAL for this PR. If surface areas of further/additional improvements/fine tuning/deep dive/... are not too broad proceed with them directly and give verdict afterwards all in one run. |
OpenHands Agent — successModel: openrouter/qwen/qwen3.7-max Summary — PLAN-EVAL for PR #29 (Wave 5b: @netscript/sdk)SummaryPASS verdict for Wave 5b package-quality plan covering Changes
No code changes. No commits made (evaluator session). ValidationPLAN-EVAL checklist walk-through
Spot-checks against treeVerified: interfaces/ folder exists (F-11), discovery file size (~642L, over-cap), Responses to review commentsThis is a PLAN-EVAL (pre-implementation) pass, not review-thread responses. The trigger No review thread comments to respond to. Remaining risksNon-blocking advisories (captured in plan-eval.md)
No implementation before generator receives PASSThe generator session should update plan.md status from "PROPOSED — awaiting PLAN-EVAL" Run: https://github.com/rickylabs/netscript/actions/runs/27343770321 |
Slice 1/19 — D-12 Package task block | Unit: @netscript/sdk | Archetype: A3∪A4
|
Slice 2/19 — D-1 Move implementation under
|
| Field | Evidence |
|---|---|
| Gate(s) | Static slice gate: package-local entrypoint check; stale moved-path scan. |
| Changed | Implementation files moved under packages/sdk/src/ while existing public subpath entries remain as thin facades. core/ dissolved into src/cache/ and src/query/; src/interfaces/ is retained for the planned slice-3 ports rename. |
| Gate results | Raw Deno.Command: deno task check from packages/sdk PASS / exit 0 with known pre-slice-19 root-exclude warning No matching files found. Stale-path scan found no references to removed implementation locations (../core, old KV adapter path, old query-client/discovery/openapi/telemetry implementation siblings). |
| Drift | none |
| Commits | impl 0cbd962; docs a353ba2 |
Slice 3/19 — D-2
|
| Field | Evidence |
|---|---|
| Gate(s) | Static slice gate: sdk package check; consumer gate: Fresh compile check; rename scan. |
| Changed | Renamed packages/sdk/src/interfaces/ to src/ports/; renamed public subpath facade ./interfaces to ./ports; updated packages/sdk/deno.json, root barrel, sdk facades/internal imports, and the Fresh consumer packages/fresh/builders/define-page/types.ts. |
| Gate results | Raw Deno.Command: deno task check from packages/sdk PASS / exit 0 with known pre-slice-19 root-exclude warning. Raw Deno.Command: deno task check from packages/fresh PASS / exit 0 with known root-exclude warning. Rename scan over packages/plugins/services found no remaining @netscript/sdk/interfaces, src/interfaces, ./interfaces, or ../interfaces references. |
| Drift | none |
| Commits | impl 998c4d6; docs be6a4ec |
Slice 4/19 — D-3 Fold
|
| Field | Evidence |
|---|---|
| Gate(s) | Static slice gate: sdk package check; removed-subpath scan. |
| Changed | Removed ./adapters and ./openapi exports and facades. KvCacheStore is now exported from @netscript/sdk/cache; OpenAPI helpers are exported from the root barrel. Updated sdk README/example references and completed B1 research wording correction. |
| Gate results | Raw Deno.Command: deno task check from packages/sdk PASS / exit 0 with known pre-slice-19 root-exclude warning. SDK-only removed-subpath scan found no remaining @netscript/sdk/adapters, @netscript/sdk/openapi, sdk/adapters, sdk/openapi, ./adapters/mod.ts, or ./openapi/mod.ts references. |
| Drift | none |
| Commits | impl 8759d99; docs 8a8db64 |
Slice 5/19 — D-4 Stream type export chain | Unit: @netscript/sdk | Archetype: A3∪A4
|
Slice 6/19 — D-5
|
| Field | Evidence |
|---|---|
| Gate(s) | Static slice gate: sdk package check; public-surface leak scan. |
| Changed | Added package-owned structural QueryClientPort in src/ports/query-client.ts, exported it through root/./ports/./query-client, changed createNetScriptQueryClient() to return the port, and changed collection options to accept the port with an internal TanStack boundary cast. |
| Gate results | Raw Deno.Command: deno task check from packages/sdk PASS / exit 0 with known pre-slice-19 root-exclude warning. Focused query-client/collections doc-lint probe no longer reports the QueryClient private-type-ref; remaining probe findings are known later-slice jsdoc/return issues. Static scan shows upstream QueryClient only in internal imports/casts, not public signatures. |
| Drift | none |
| Commits | impl 9585851; docs aec7674 |
Slice 7/19 — D-6a
|
| Field | Evidence |
|---|---|
| Gate(s) | Type inference fixture; upstream return assignability fixture; scoped lint/fmt; focused doc-lint on new port + contract algebra; package check wrapper |
| Changed | Added packages/sdk/src/ports/service-query-utils.ts with package-owned structural ServiceQueryUtils<TContract> and named option/result aliases. Exported through ./ports, ./query-client, and root. Added compile-only fixtures for sdk contract inference and upstream createTanstackQueryUtils() return assignability. Runtime createServiceQueryUtils() remains unchanged for slice 8. |
| Gate results | deno check --no-config --unstable-kv ./packages/sdk/tests/type-fixtures/service-query-utils-contract_type.ts ./packages/sdk/tests/type-fixtures/service-query-utils-upstream_type.ts PASS exit 0; deno lint --no-config ./packages/sdk/src/ports/service-query-utils.ts ./packages/sdk/tests/type-fixtures/service-query-utils-contract_type.ts ./packages/sdk/tests/type-fixtures/service-query-utils-upstream_type.ts PASS exit 0; deno fmt --config .llm/tmp/run/feat-package-quality-wave5-apps--5b-sdk/deno-format-sdk.json --check <slice-7 files> PASS exit 0; deno doc --lint ./packages/sdk/src/ports/service-client.ts ./packages/sdk/src/ports/service-query-utils.ts PASS checked 2 files; deno task check from packages/sdk PASS exit 0 with known pre-slice-19 root-exclude warning. |
| Drift | none |
| Commits | impl 82abaa6; docs 5909aff |
Slice 8/19 — D-6b typed
|
| Field | Evidence |
|---|---|
| Gate(s) | Factory inference fixture; service-query-utils type fixtures; scoped lint/fmt; focused doc-lint; package check wrapper |
| Changed | Typed createServiceQueryUtils() as createServiceQueryUtils<TContract>(client: ServiceClient<TContract>, options?): ServiceQueryUtils<TContract>. Removed the public any bridge. Added ServiceClientContract<TContract>/ServiceClientShape<TContract> so TContract infers from a ServiceClient<TContract> value. Added service-query-utils-factory_type.ts to prove zero-annotation factory inference. |
| Gate results | deno check --config .llm/tmp/run/feat-package-quality-wave5-apps--5b-sdk/deno-check-sdk.json --unstable-kv ./packages/sdk/src/query-client/create-service-query-utils.ts ./packages/sdk/tests/type-fixtures/service-query-utils-factory_type.ts ./packages/sdk/tests/type-fixtures/service-query-utils-contract_type.ts ./packages/sdk/tests/type-fixtures/service-query-utils-upstream_type.ts PASS exit 0; deno lint --no-config ./packages/sdk/src/query-client/create-service-query-utils.ts ./packages/sdk/src/ports/service-client.ts ./packages/sdk/tests/type-fixtures/service-query-utils-factory_type.ts PASS exit 0; deno fmt --config .llm/tmp/run/feat-package-quality-wave5-apps--5b-sdk/deno-format-sdk.json --check <slice-8 files> PASS exit 0; deno doc --lint ./packages/sdk/src/ports/service-client.ts ./packages/sdk/src/ports/service-query-utils.ts ./packages/sdk/src/query-client/create-service-query-utils.ts PASS checked 3 files; deno task check from packages/sdk PASS exit 0 with known pre-slice-19 root-exclude warning. |
| Drift | none |
| Commits | impl b0eca88; docs 077e74c |
Slice 13/19 — D-11 JSDoc sweep + inflight state decision | Unit: @netscript/sdk | Archetype: A3∪A4
Decision recorded: |
Slice 14/19 — module docs | Unit: @netscript/sdk | Archetype: A3∪A4
Lock hygiene: only run-local check/doc import maps and run-local lock expanded for root entrypoint dependencies; root |
Slice 15/19 — README + architecture docs | Unit: @netscript/sdk | Archetype: A3∪A4
Remote verified: |
Slice 16/19 — doctest runner + unit tests | Unit: @netscript/sdk | Archetype: A3∪A4
|
Slice 17/19 — type-level assignability fixtures | Unit: @netscript/sdk | Archetype: A3∪A4
|
Slice 18/19 — live service-client integration | Unit: @netscript/sdk | Archetype: A3∪A4
|
Slice 19/19 — D-14 root-exclude lift + full gate sweep | Unit: @netscript/sdk | Archetype: A3∪A4
|
Unit COMPLETE — @netscript/sdk | Archetype: A3∪A4Commit range after PLAN-EVAL lock:
Slice-19 Full Validation Sweep
|
|
READY FOR IMPL-EVAL Remote head verified with
Implementation session complete; no self-evaluation or merge performed. |
|
@openhands-agent model=openrouter/qwen/qwen3.7-max output=pr-comment use harness proceed to IMPL-EVAL for this PR. In addition to the standard IMPL-EVAL gate replay: you MUST also run the E2E CLI suite (full If E2E or gate failures surface and their fix areas are not too broad, proceed to fix them straight away and give the verdict afterwards, all in one run. |
OpenHands Agent — successModel: openrouter/qwen/qwen3.7-max OpenHands Agent SummaryOpenHands did not start or did not produce a summary. This is a workflow failure, not a task verdict. Diagnostics
See the uploaded Actions artifact for bootstrap.log and agent.log when present. Run: https://github.com/rickylabs/netscript/actions/runs/27356774781 |
|
@openhands-agent model=openrouter/qwen/qwen3.7-max output=pr-comment use harness proceed to IMPL-EVAL for this PR. In addition to the standard IMPL-EVAL gate replay: you MUST also run the E2E CLI suite (full If E2E or gate failures surface and their fix areas are not too broad, proceed to fix them straight away and give the verdict afterwards, all in one run. |
OpenHands Agent — successModel: openrouter/qwen/qwen3.7-max OpenHands Agent SummaryOpenHands did not start or did not produce a summary. This is a workflow failure, not a task verdict. Diagnostics
See the uploaded Actions artifact for bootstrap.log and agent.log when present. Run: https://github.com/rickylabs/netscript/actions/runs/27356820996 |
Sub-wave 5b —
@netscript/sdk(generator hand-off)Scope: RESEARCH + PLAN & DESIGN only. No implementation. Plan is PROPOSED, not locked — PLAN-EVAL is a separate session.
Run dir:
.llm/tmp/run/feat-package-quality-wave5-apps--5b-sdk/(research.md, plan.md, worklog.md, drift.md, context-pack.md, commits.md, measure-5b.json).Measured baseline (raw deno, local)
deno checkPASS across all 12 entrypointsplugin-streams-core(unexported package-owned types surfaced via sdk's./streamsfacade), not in sdk (drift D-1)any-bridges) + 37 excluded-module from rootdeno.jsonexclude (drift D-2, predicted by 5a)interfaces/folderArchitecture mandate (umbrella drift, 2026-06-11 user feedback)
Plan §2 delivers the composability layer map: L0
src/ports/(ContractLike algebra, CacheStore, ServiceTransport/ClientLinkFactory, QueryClientPort) → L1 primitives (CacheQuery SWR, KV store, discovery, otel) → L2 factories (createServiceClient, query factories/utils, collections) → L3 one-linerdefineServices()whose outputs ARE the L2 values (no-cliff escape hatch). RFC 14 transport seam protected via internal link-factory port (D-8) — unified mode NOT implemented.Plan highlights (19 slices, gates A3 ∪ A4)
interfaces/→src/ports/(./interfaces→./ports), subpaths 12→10QueryClientPort+ServiceQueryUtils<TContract>+QueryCollection<TItem>kill the tanstack leaks/slow typesdefineServices()L3 preset (D-9, mandated; descopeable)For PLAN-EVAL — review hot-spots
ServiceQueryUtils<TContract>typing budget (2 slices) — enough?defineServices— new surface during quality wave; name bikeshedQueryClientPortwiden-on-drift vs F-15 waiverNext step: PLAN-EVAL session reviews + locks (or bounces)
plan.md.🤖 Generated with Claude Code