Skip to content

[Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a–5d ✅ MERGED · Structural Consolidation A–E ✅ · 3× IMPL-EVAL APPROVED#17

Merged
rickylabs merged 524 commits into
feat/package-qualityfrom
feat/package-quality-wave5-apps
Jun 14, 2026
Merged

[Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a–5d ✅ MERGED · Structural Consolidation A–E ✅ · 3× IMPL-EVAL APPROVED#17
rickylabs merged 524 commits into
feat/package-qualityfrom
feat/package-quality-wave5-apps

Conversation

@rickylabs

@rickylabs rickylabs commented Jun 8, 2026

Copy link
Copy Markdown
Owner

✅ STATUS (2026-06-14): 5a + 5b + 5c + 5d (fresh) merged · Consolidation A–E landed · 3× IMPL-EVAL APPROVED

Umbrella tracking surface for Wave 5 of the S1 Package Quality track: the apps layer
@netscript/sdk, @netscript/service, @netscript/fresh, @netscript/fresh-ui → JSR
0.0.1-alpha.0. Umbrella merges to the track once, at full Wave 5 completeness.

Sub-wave scoreboard

Sub-wave Package Status
5a service ✅ COMPLETE — merged into umbrella
5b sdk ✅ COMPLETE — merged into umbrella (sdk lifted into root quality gates)
5c fresh-ui ✅ COMPLETE — merged into umbrella via PR #30 (da14cff). Runs 1 (5c1 foundation) + 2 (5c2 design system, PR #32 IMPL-EVAL'd). JSR dry-run PASS.
5d fresh ✅ COMPLETE — merged into umbrella

🔧 Structural Consolidation Run (post-merge) — feat-package-quality-wave5-apps--consolidation

Restructures the four merged apps-layer packages to the production-grade canonical doctrine
layering
used by the Wave 2/3 packages/plugin reference (src/ role folders, no forbidden folder
names, ≤500 LOC files, archetype-named docs). All four are Archetype 4 (DSL/Builder). PLAN-EVAL
waived in writing by the maintainer.

Phase Package What landed Commits
A service split service-builder.ts (604 LOC) → impl + rpc + listener seams; archetype docs a0e5bcc, e67edf1
B sdk collapse 8 root barrel folders + streams.ts into src/ as the single source root; subpath keys byte-stable (zero consumer edits). B1/B2 adapter/domain re-slice deferred (KISS — see drift) 5367093
C fresh-ui wrap runtime/src/runtime, primitivessrc/presentation; registry.manifest.ts left at root (CLI copy-out contract). Archetype 3→4 doc correction 29bcc30, bcbdf55
D fresh full src/ role layering; ./utils subpath removed (no compat alias); page-compat (1111 LOC) split into 7 type modules; builder/mod.tsx split; plugins/{workers,sagas} repointed @netscript/fresh/streamssrc/; 4 scratch files deleted. (Root shells initially kept — deleted in D2.) 43ffcc7
D-docs fresh README rewrite (Archetype 4 + entry-point table, ./utils dropped), architecture.md (src/ layout + subpath conventions), 3 orphan module READMEs co-located into src/ with repaired paths 09ab17d
D2 fresh no-backward-compat elimination: delete all 5 root re-export shells (server.ts, builders/mod.ts, route/mod.ts, query/mod.ts, config/vite.ts) + emptied dirs; root mod.ts → cache-entry helpers only (error re-export dropped — lives solely on ./error); repoint both CLI import-maps + generators-config_test + deno.json tasks + 7 builders test fixtures → src/; JSR exports unchanged. Scaffold E2E scaffold.runtime 41/41. c47fb46
D2-docs fresh README / architecture.md / vite module README → no-shell, no-compat reality; entry-point root row lists only cache helpers; harness commits/drift updated c5f1f0e, ca6c00a
E all full gates + WSL-native E2E + 3× independent IMPL-EVAL (MiniMax M3) → all APPROVED + closeout 6deaa22

🧪 Phase E — IMPL-EVAL results (independent evaluator sessions, OpenHands cloud · openrouter/minimax/minimax-m3 · iterations=600 · write-artifact-first)

All three returned VERDICT: APPROVED with summary_source=agent + agent_outcome=success (genuine completions, not iteration-cap fabrications). Full closeout: .llm/tmp/run/feat-package-quality-wave5-apps--consolidation/eval-results.md.

Package Run Verdict Evidence
@netscript/fresh 27507518739 ✅ APPROVED (8/8) check/lint/doc-lint/publish 0 · test 141/141 · E2E scaffold.runtime 41/41 · 0 backward-compat refs · max file 497 LOC
@netscript/service 27508042691 ✅ APPROVED (7/7) test 17/17 · max 408 LOC · no Hono/oRPC leak · RunningService.stop()+AbortSignal · README-drift 2/2
@netscript/sdk 27511443802 ✅ APPROVED (7/7) check 10/10 entrypoints · lint 57 files 0 · doc full-export 0 · test 14/14 · publish Success · byte-stable surface

Debt reconciliation: packages/fresh AP-1 (builders split → max 497 LOC) and F-7 (doc-lint clean) marked RESOLVED in .llm/harness/debt/arch-debt.md. packages/service presets/assets role-clarification (F-3/F-11) and scalar.min.js 3.3 MB (D-9) remain open + DEBT_ACCEPTED. sdk B1/B2 re-slice is a drift-recorded deferral (revisit when a second concrete adapter per port lands). Non-blocking note: a future per-entrypoint deno doc --lint on sdk would surface private-type-ref false positives (sibling-subpath types public on ./ports) — full-export is the authoritative gate.

Phase D / D2 verification (signed off)

  • @netscript/fresh: deno task check ✅ · doc-lint (12 files) ✅ · publish dry-run.
  • D2 scaffold E2E (deno task e2e:cli run scaffold.runtime): 41/41 PASSED with the repointed
    CLI import-map — proves locally-scaffolded apps resolve @netscript/fresh/* to src/ targets with
    zero re-export shells (re-confirmed inside the fresh IMPL-EVAL session).
  • Root deno task test: 632 passed / 11 failed / 12 ignored — all 11 failures pre-existing in
    packages/cli (plugin-registry / deploy / scaffold flows) and memory-queue; zero in
    packages/fresh
    . Repo-wide arch:check FAIL count is likewise pre-existing repo debt.

Routing & artifacts

Refactor/heavy-lifting executed via WSL codex (phone-visible host); all .md (docs + harness run
artifacts) authored by the lead. Run artifacts live under
.llm/tmp/run/feat-package-quality-wave5-apps--consolidation/ (research, plan, worklog+Design, drift,
commits, context-pack, eval-results).

Three architect throughlines

  1. Surface encapsulation — kill private-type-ref leaks via deliberate public-type design + F-16/F-18 cardinality discipline (fresh exposes 12 subpaths, zero compat shells).
  2. Forward-compatible seams (RFC 14 — protect, don't implement)defineFreshApp extension points + sdk Transport seam designed so unified mode never needs a breaking alpha change.
  3. CLI-readiness (Wave 6) — stable, documented, tested definePage/defineFreshApp presets, form/query factories, ./testing harnesses, feeding the post-5d scaffold revamp.

Out of scope

@netscript/ui-primitives (RFC-deferred — do NOT create) · @netscript/cli (Wave 6) ·
unified-mode/Nitro adapters (RFC 14 roadmap — seams only) · publishing/versioning/OIDC (S2/S3).

🤖 Generated with Claude Code

rickylabs added a commit that referenced this pull request Jun 8, 2026
…ave 4)

Apps layer (sdk/service/fresh/fresh-ui) prepared in parallel. Baseline: all 4 FAIL dry-run (re-architecture, not fine-tuning); 328 doc-lint / 138 private-type-ref / 20 over-cap; fresh is the long pole (splits 5d-1..5d-6). Refined per-unit archetypes (service A4+A3, sdk A3+A4, fresh-ui A4 Browser, fresh multi). PLAN-LOCK blocked on Wave 4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rickylabs rickylabs changed the title [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — UNBLOCKED · reconciled @ dfab7a4 · ready to open 5a Jun 10, 2026
@rickylabs rickylabs changed the title [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — UNBLOCKED · reconciled @ dfab7a4 · ready to open 5a [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a ✅ 5b ✅ 5c ✅ (mergeable) · 5d OPENING Jun 12, 2026
@rickylabs rickylabs changed the title [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a ✅ 5b ✅ 5c ✅ (mergeable) · 5d OPENING [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a ✅ 5b ✅ 5c ✅ MERGED · 5d IN PROGRESS Jun 12, 2026
openhands-agent and others added 25 commits June 13, 2026 09:48
…t 113/113, JSR dry-run artifact

- Adds explicit gate-to-slice map for all 18 Archetype-3 fitness gates.
- Reconciles doc-lint budget across slices 2, 3, 6 totaling 113/113.
- Reconciles JSR over-cap budget (58 excluded-module + 4 slow types) across slices 1, 9.
- Commits measurement artifacts jsr-dry-run-package-fresh.txt and doc-lint-raw.txt.
- Adds drift entries D-5d4-8 through D-5d4-10.
- Locks L-5d4-8/L-5d4-9 JSR publishability decisions.

Co-authored-by: openhands <openhands@all-hands.dev>
- Lock one-plan decision (28 slices <= 30 cap).
- Add actionable commit slice lock with files, gates, budgets.
- Enumerate slow-type / JSR private-type-ref risks.
- Complete design.md all 7 sections.
- Add verdict/decision sections and required tail section to plan.md.
- Append drift.md with D-5d2-1 (form-package visibility/JSDoc), D-5d2-2 (F-18 sub-barrel opt-outs), D-5d2-3 (slow-type opt-in pending).
- Update context-pack.md and worklog.md to resume-ready state.

Co-authored-by: openhands <openhands@all-hands.dev>
Three blockers remain unresolved:
1. Archetype-3 gate coverage: 8/18 required gates mapped (F-1, F-4, F-6, F-8, F-10, F-11, F-12, F-16, F-17, F-18 missing)
2. Doc-lint budget: 113 errors not assigned to named slices with arithmetic reconciliation
3. JSR-audit: dry-run executed but findings not assigned to slices; F-6 absent from Fitness Gates

Artifact inconsistency: drift.md references phantom locked decisions (L-5d4-8, L-5d4-9), phantom Slice 9, and phantom plan sections that do not exist in binding plan.md.

Clock-port blocker (L-5d4-7): RESOLVED by supervisor.

Co-Authored-By: qwen3.7-max <noreply@anthropic.com>
Fills all TODO/Placeholder markers in the 5d1 support-spine research artifact:
- per-file doc-lint breakdown + remediation cost (with error/handler.ts row)
- remaining private-type-ref enumeration and scope split
- exact doctrine F-1 cap (flag 500 / fail 800)
- inventory summaries for handler.ts, primitives.ts, mod.ts, components/ErrorDisplay.tsx, utils/mod.ts, cache-entry.ts, interactive.ts, hooks/use-promise.ts
- wrapper surface for config/vite.ts
- seam + relocation candidacy for error/, components/, hooks/
- curated-root policy question for mod.ts
- telemetry export maps (span/event shapes, OTel alignment) for defer/telemetry.ts vs form/telemetry.ts
- raw material synthesis for phase-2 design
- market rows (TanStack Start, Next.js App Router, Remix/React Router) with sources
- Gaps and blockers section

Drift updated with D-5d1-008 through D-5d1-011.
Sources: packages/fresh-ui/registry/components/ui/form-field.tsx,
control-props.ts, docs/l0-conventions.md; packages/fresh/form/types.ts
lines 82-141, 274-297; field-descriptors.ts lines 101-172.

Co-Authored-By: openhands <openhands@all-hands.dev>
Sources: schema-adapter.ts, types.ts; Standard Schema spec, Zod/Valibot/
ArkType docs, Remix/React Router/Next.js/TanStack Form docs.

Co-Authored-By: openhands <openhands@all-hands.dev>
D-5d5-1: root deno.json excludes packages/fresh/, causing 116
excluded-module dry-run errors; 23 from fresh/form. Cannot be closed
inside 5d5; owner is 5d6/umbrella final close.

Co-Authored-By: openhands <openhands@all-hands.dev>
…upport spine

Phase-2 PLAN artifacts for @netscript/fresh support spine.
- design.md: locked decisions for error taxonomy, telemetry convention,
  vite wrapper, interactive/utils normalization, root barrel, docs/testing.
- plan.md: 24-slice lock with gate-to-slice map, budget retirement, review map,
  assumptions, supervisor questions, dependencies, side-effect ledger.
- context-pack.md: resumable summary for PLAN-EVAL/IMPL sessions.
- drift.md: D-5d1-n capturing public-surface drift and deferred full doc-lint 0.

No implementation. PLAN only.

Co-Authored-By: openhands <openhands@all-hands.dev>
…inal surface

- Replace all TODO/Placeholder markers in research.md with measured data,
  sourced market research, RFC17 bridge analysis, RFC14 seam inputs, and
  supervisor questions.
- Update drift.md with D-5d6-2..D-5d6-6 reality divergences.

Co-authored-by: openhands <openhands@all-hands.dev>
rickylabs and others added 4 commits June 14, 2026 16:34
refactor(fresh-ui): introduce src/ as single source root [C1]

Move runtime island impls to src/runtime/ and primitives.tsx to
src/presentation/; keep root mod.ts/interactive.ts/primitives.tsx as
thin re-export shells (CLI scaffold local-path map + subpath keys
unchanged). registry.manifest.ts, registry.schema.ts, registry/ copy
payload and tokens/ JSON sources stay at package root (CLI copy-out
contract + build-script paths) -- registry manifest split (C2) deferred,
see run drift.md.

Gates (packages/fresh-ui): check, test (39), lint, fmt (changed files),
publish --dry-run, doc-lint (full export set) -- all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
docs(fresh-ui,sdk): align archetype docs with doctrine [C-docs]

Doctrine 06-archetypes.md classifies fresh-ui, sdk, service, fresh,
contracts and plugin as Archetype 4 (DSL/Builder). fresh-ui/docs/
architecture.md self-declared Archetype 3, contradicting the doctrine;
re-classify it as Archetype 4 with Archetype 3 runtime behavior folded in
(parallel to @netscript/service), keeping the Zag tiered-interactivity
ADR intact as the folded-in runtime contract.

Satisfy the doctrine "archetype named in README" checklist: add explicit
Archetype 4 package-role statements to fresh-ui and sdk READMEs (service
already named it). Docs only; no code or public-surface change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
Restructure @netscript/fresh under doctrine role folders, split oversized builder/page compatibility files, and repoint public exports to src roots while keeping CLI-required shell paths.

Co-Authored-By: Claude Opus 4.8 <claude-opus-4.8>
docs(fresh): rewrite README/architecture + co-locate module docs [D-docs]

Lead-owned docs pass for Phase D (codex never edits .md).

- README.md: add "Package role" (Archetype 4, src/ role layering, root
  shells), fix install to ^0.0.1-alpha.0, replace prose with a 12-row
  entry-point table, drop the removed ./utils section, add query-islands
  example + Validation/Docs sections.
- docs/architecture.md: Archetype 4 header + doctrine link, src/ source
  layout table, subpath conventions (explains ./utils removal), public
  surface stability.
- Relocate three orphan module READMEs left at root after the src/ move
  into their modules (define-page, form, vite) and repair stale
  "Related files" paths; remove the emptied root dirs.
- Transcribe Phase D into harness artifacts (commits/drift/worklog/
  context-pack): commit 43ffcc7, ./utils removal, root shells, and the
  pre-existing root-test failures (cli + memory-queue, zero in fresh).

Gates: fresh check + doc-lint + publish dry-run all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
@rickylabs rickylabs changed the title [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a ✅ 5b ✅ 5c ✅ 5d ✅ MERGED · Doc & Final Structure IN PROGRESS [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a–5d ✅ MERGED · Structural Consolidation: A–D ✅ · E (close) IN PROGRESS Jun 14, 2026
rickylabs and others added 2 commits June 14, 2026 20:01
… to src/ [D2]

Eliminate the 5 root re-export shells (server.ts, builders/mod.ts,
route/mod.ts, query/mod.ts, config/vite.ts) and their emptied dirs. No
backward-compat surface: root mod.ts now exposes only the cross-cutting
cache-entry helpers; error helpers live solely on ./error.

Repoint every consumer to the real src/ targets: both CLI local
import-maps (maintainer + scaffold kernel), generators-config_test
assertions, package deno.json check/fmt/lint tasks, and the builders test
fixtures. JSR exports map unchanged.

Scaffold E2E (scaffold.runtime) passed 41/41 with the repointed import-map.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
README, architecture.md, and the vite module README now describe the
no-shell reality: every published subpath resolves directly into src/,
the root entrypoint exports only the cross-cutting cache helpers, and
error handling lives solely on ./error. Removes all 're-export shell' and
backward-compat framing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rickylabs
rickylabs force-pushed the feat/package-quality-wave5-apps branch from b5512dc to c5f1f0e Compare June 14, 2026 18:03
…ts/drift

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rickylabs

Copy link
Copy Markdown
Owner Author

@openhands-agent model=openrouter/minimax/minimax-m3 output=pr-comment iterations=600 use harness

Activate SKILL

  • netscript-harness
  • netscript-doctrine
  • jsr-audit
  • deno-fresh

IMPL-EVAL — independent evaluator session for the Wave 5 @netscript/fresh consolidation (run feat-package-quality-wave5-apps--consolidation, Phase D + D2). You are the INDEPENDENT evaluator — you did NOT write this code. Your job is to rule, with evidence, whether the committed implementation on branch feat/package-quality-wave5-apps (HEAD ca6c00a) meets the doctrine and the no-backward-compat mandate. Evaluate against .llm/harness/evaluator/protocol.md, the doctrine under .claude/skills/netscript-doctrine/, and .llm/harness/gates/archetype-gate-matrix.md. Evaluation ONLY: zero edits to packages/, no implementation, no merging.

WRITE-ARTIFACT-FIRST (mandatory — prior OpenHands runs hit the iteration cap and fabricated summaries; do NOT repeat that): your FIRST action is to create .llm/tmp/run/feat-package-quality-wave5-apps--consolidation/impl-eval.md as a skeleton (one heading per Verify item below + a ## Verdict heading), then fill and re-save each ruling AS YOU GO. Budget your reading so the artifact AND the OPENHANDS_SUMMARY_PATH summary are BOTH written and committed well before the iteration cap. The summary's final line MUST be the verdict line. Uncommitted workspace files are committed back to the branch automatically at run end.

Scope under evaluation: packages/fresh — Archetype 4 (DSL/Builder) — restructured into doctrine src/ role folders, with ALL backward-compat re-export shells DELETED and every consumer (CLI import-maps, tests, package tasks) repointed to src/.

Verify (binary PASS/FAIL each, write each ruling into impl-eval.md as you go):

  1. No backward-compat surface remains. The 5 root re-export shells (server.ts, builders/mod.ts, route/mod.ts, query/mod.ts, config/vite.ts) and their emptied dirs are gone; the package root holds only README.md, deno.json, mod.ts, docs/, src/, tests/. Confirm grep -rn --include='*.ts' --include='*.tsx' --include='*.json' "packages/fresh/server.ts\|packages/fresh/builders/mod.ts\|packages/fresh/route/mod.ts\|packages/fresh/query/mod.ts\|packages/fresh/config/vite.ts" packages/ returns ZERO.

  2. Root surface is minimal and de-duplicated. Root .mod.ts exports ONLY the cache-entry helpers (hasAllCacheEntries, minCachedAt, projectCachedItemFromList + their types). It must NOT re-export the error helpers (those live solely on ./error). No "backward-compat" / "existing apps can keep" framing in the module doc.

  3. deno.json exports + tasks integrity. Every published subpath key resolves to an existing file under src/ (no dangling target); the exports map was NOT weakened. The check/fmt/fmt:check/lint tasks reference real src/ targets, not deleted shell paths.

  4. CLI import-map parity. Both packages/cli/src/maintainer/adapters/local-import-resolver.ts and packages/cli/src/kernel/adapters/scaffold/import-resolver.ts PACKAGE_TO_LOCAL_PATH fresh entries point at the SAME src/ targets as the JSR exports (builders→src/application/builders/mod.ts, query→src/application/query/mod.ts, route→src/application/route/mod.ts, server→src/runtime/server/mod.ts, vite→src/application/vite/vite.ts). generators-config_test.ts assertions match. No path references a deleted shell.

  5. Doctrine 05 structure. src/ uses only canonical role folders; NO forbidden folder names (utils/ common/ helpers/ interfaces/ core/); ≤12 children/dir, ≤4 depth; no file over the ~500 LOC ceiling without a debt entry.

  6. Archetype 4 gates (run them, paste evidence). From packages/fresh: deno task check, deno task lint, deno task doc-lint, deno publish --dry-run. Report each PASS/FAIL with command output. Flag any required gate from the matrix omitted without an N/A rationale.

  7. E2E import resolution. Confirm the scaffold E2E scaffold.runtime suite passes with the repointed import-map (a locally-scaffolded app must resolve @netscript/fresh/* to src/ targets, not shells). The generator claims 41/41; verify or, if you cannot run it, say so explicitly and rule on the static evidence instead of fabricating a pass.

  8. Docs truth. README.md, docs/architecture.md, and src/application/vite/README.md describe the no-shell reality — zero "re-export shell" / "backward-compat" language; the entry-point table's root row lists ONLY the cache helpers.

CRITICAL: reconcile drift.md and commits.md in the run dir against the actual committed tree — flag any harness-artifact claim not supported by the code.

Output: impl-eval.md committed to the run dir (binary PASS/FAIL per item + gate-by-gate evidence). Summary via OPENHANDS_SUMMARY_PATH ending with EXACTLY one verdict line: VERDICT: APPROVED or VERDICT: NEEDS-REVISION + remaining blockers. Evaluation ONLY — zero edits to packages/, no implementation, no merging. Do NOT emit any @openhands-agent block.

@rickylabs

rickylabs commented Jun 14, 2026

Copy link
Copy Markdown
Owner Author

OpenHands Agent — Completed

Model: openrouter/minimax/minimax-m3
Provider: OPENROUTER
Job status: success
Trace: .llm/tmp/run/openhands/pr-17/run-27507518739-1 (committed to the PR branch)
Artifact: openhands-agent-27507518739-1

OpenHands Run 27507518739-1 — IMPL-EVAL Wave 5 Apps Consolidation (Phase D + D2)

Summary

Independent evaluator session for the Wave 5 @netscript/fresh consolidation on branch
feat/package-quality-wave5-apps (HEAD ca6c00a, last consolidation commit c47fb46 +
doc c5f1f0e). The implementation deletes all 5 root re-export shells and repoints every
consumer to src/ — this eval verifies that the no-backward-compat mandate is satisfied
and that the package passes its Archetype 4 gates.

Changes

  • No edits to packages/ — evaluator session is read-only verification.
  • Created .llm/tmp/run/feat-package-quality-wave5-apps--consolidation/impl-eval.md
    the binary PASS/FAIL ruling artifact, written incrementally (skeleton first per the
    WRITE-ARTIFACT-FIRST mandate) and re-saved with full evidence at the end.
  • The file is committed back to the branch automatically at run end (per the run-loop).

Validation

All 8 evaluation items ruled PASS:

  1. No backward-compat surface — exact-mandated grep returns 0 matches; package root holds only README.md, deno.json, mod.ts, docs/, src/, tests/.
  2. Root surface minimal & de-duplicatedmod.ts re-exports only hasAllCacheEntries, minCachedAt, projectCachedItemFromList + types; no error re-exports; no "backward-compat" framing in doc.
  3. deno.json exports + tasks integrity — 12 exports keys, all targets exist; ./utils correctly removed; tasks reference real src/ paths.
  4. CLI import-map paritymaintainer/adapters/local-import-resolver.ts and kernel/adapters/scaffold/import-resolver.ts PACKAGE_TO_LOCAL_PATH maps both repointed to the same src/ targets; generators-config_test.ts (2 tests, 14 steps) passes.
  5. Doctrine 05 structure — 5 canonical role folders, no forbidden names, max depth 4, max 12 children/dir, max file 497 LOC (under 500 ceiling).
  6. Archetype 4 gates (run + paste evidence)deno task check (0), lint (0, 141 files), doc-lint (0, 12 files, only external @types/node/vite warnings), publish --dry-run (0, "Success Dry run complete"), fmt:check (0, 144 files), test --allow-all (141/141) — all PASS.
  7. E2E import resolutiondeno task e2e:cli run scaffold.runtime --cleanup --format prettypassed=41 failed=0 exit 0, verified by re-running the suite in this eval session.
  8. Docs truthREADME.md, docs/architecture.md, src/application/vite/README.md all describe the no-shell, no-backward-compat reality; entry-point root row lists only cache helpers.

Cross-artefact reconciliation: every claim in commits.md and drift.md matches the committed tree; no fabricated gate.

Responses to review comments or issue comments

N/A — this is an evaluator session, not a code-change PR session. The PR-comment channel
is not used by this run; the OPENHANDS_SUMMARY_PATH summary is the only output going
through the OpenHands workflow.

Remaining risks (non-blocking, for Wave 5 closeout pass)

  • .llm/harness/debt/arch-debt.md still marks two packages/fresh debt entries open
    (AP-1 Restructure and F-7 doc-lint residue). Both gating conditions are now met at
    HEAD. Lead should mark them closed in the closeout pass — flagged in impl-eval.md
    §"Remaining items".
  • Phase E (merge close-out) is explicitly IN PROGRESS per the PR title and is out of
    scope for this eval.

VERDICT: APPROVED

Run: https://github.com/rickylabs/netscript/actions/runs/27507518739

@rickylabs

Copy link
Copy Markdown
Owner Author

@openhands-agent model=openrouter/minimax/minimax-m3 output=pr-comment iterations=600 use harness

Activate SKILL

  • netscript-harness
  • netscript-doctrine
  • jsr-audit

IMPL-EVAL — independent evaluator session for the Wave 5 @netscript/service consolidation (run feat-package-quality-wave5-apps--consolidation, Phase A). You are the INDEPENDENT evaluator — you did NOT write this code. Rule, with evidence, whether the committed implementation on branch feat/package-quality-wave5-apps meets the doctrine and production-grade bar. Evaluate against .llm/harness/evaluator/protocol.md, the doctrine under .claude/skills/netscript-doctrine/, and .llm/harness/gates/archetype-gate-matrix.md. Evaluation ONLY: zero edits to packages/, no implementation, no merging.

WRITE-ARTIFACT-FIRST (mandatory — prior OpenHands runs on this PR hit the iteration cap and produced synthesized-after-limit summaries; do NOT repeat that): your FIRST action is to create .llm/tmp/run/feat-package-quality-wave5-apps--consolidation/impl-eval-service.md as a skeleton (one heading per Verify item + a ## Verdict heading), then fill and re-save each ruling AS YOU GO. Budget reading so the artifact AND the OPENHANDS_SUMMARY_PATH summary are BOTH written and committed well before the cap. The summary's final line MUST be the verdict line.

Scope: packages/service — Archetype 4 (DSL/Builder). Phase A split service-builder.ts (was 604 LOC) into src/builder/{service-builder,service-builder-impl,service-rpc,service-listener}.ts, introduced package-owned structural public types (ServiceContext, ServiceHandler, RunningService) in src/types.ts to reduce public coupling to Hono/oRPC, and added a DB-connectivity startup diagnostic. Single . export (mod.ts).

Verify (binary PASS/FAIL each, write each ruling into impl-eval-service.md as you go):

  1. Archetype 4 gates (run them, paste evidence). From packages/service: deno task check, deno task lint, deno task doc-lint, deno publish --dry-run. Report each PASS/FAIL with output. Flag any required gate from the matrix omitted without N/A rationale.
  2. Builder split quality. No file exceeds the ~500 LOC ceiling. The 4 builder modules have distinct single responsibilities (public builder vs impl vs rpc wiring vs listener); the builder's public API/behavior is unchanged; defineService preset still composes them.
  3. Surface encapsulation (F-16/F-18). The . public surface exposes ServiceContext/ServiceHandler/RunningService and does NOT leak Hono/oRPC vendor types into public signatures. RunningService exposes stop() + AbortSignal support. Confirm via deno doc / the type-assignability tests.
  4. Doctrine 05 structure. src/ top-level folders are builder/, diagnostics/, presets/, primitives/ + types.ts. presets/ + diagnostics/ are canonical; builder/ and primitives/ are NOT canonical role names — rule whether they are doctrine-acceptable for this archetype or a finding. No forbidden folder names (utils/ common/ helpers/ interfaces/ core/); ≤12 children/dir, ≤4 depth.
  5. Reconcile against the debt log. .llm/harness/debt/arch-debt.md records (a) presets/ + assets/ need role clarification (F-3, F-11) and (b) assets/scalar.min.js 3.3 MB vendored-in-publish (D-9). These are DEBT_ACCEPTED — categorize them as accepted deferral, do NOT double-count as new blockers. Flag any NEW doctrine violation NOT covered by an existing debt entry.
  6. Docs truth + completeness. README.md names Archetype 4 ("Package role") and its examples do not drift (there is a README-example drift test — confirm it passes). docs/{architecture,concepts,getting-started}.md are production-grade and accurate to the split surface.
  7. Artifact reconciliation. Reconcile the Phase A entries in commits.md (a0e5bcc, e67edf1) and drift.md against the committed tree — flag any claim not supported by the code.

Output: impl-eval-service.md committed to the run dir (binary PASS/FAIL per item + gate evidence). Summary via OPENHANDS_SUMMARY_PATH ending with EXACTLY one verdict line: VERDICT: APPROVED or VERDICT: NEEDS-REVISION + remaining blockers. Evaluation ONLY — zero edits to packages/, no implementation, no merging. Do NOT emit any @openhands-agent block.

@rickylabs

rickylabs commented Jun 14, 2026

Copy link
Copy Markdown
Owner Author

OpenHands Agent — Completed

Model: openrouter/minimax/minimax-m3
Provider: OPENROUTER
Job status: success
Trace: .llm/tmp/run/openhands/pr-17/run-27508042691-1 (committed to the PR branch)
Artifact: openhands-agent-27508042691-1

IMPL-EVAL — Wave 5 @netscript/service Consolidation (Phase A)

  • Branch: feat/package-quality-wave5-apps
  • Run: feat-package-quality-wave5-apps--consolidation
  • Scope: packages/service — Archetype 4 (Public DSL/Builder)
  • Output artifact: .llm/tmp/run/feat-package-quality-wave5-apps--consolidation/impl-eval-service.md
  • Evaluator session: independent, no edits to packages/, no implementation, no merging.

Summary

Independent IMPL-EVAL of the post-merge Phase A tree on the umbrella
branch. Phase A split packages/service/src/service-builder.ts (was
604 LOC) into
src/builder/{service-builder,service-builder-impl,service-rpc,service-listener}.ts,
introduced package-owned structural public types (ServiceContext,
ServiceHandler, RunningService, ...) in src/types.ts to remove
Hono/oRPC vendor types from public signatures, and added a
DB-connectivity startup diagnostic in src/diagnostics/. The single
. export (mod.ts) is unchanged at the symbol level.

All 7 evaluator verify items came back PASS with raw-evidence snippets
captured in the artifact. The two open packages/service debt entries
in .llm/harness/debt/arch-debt.md (role-clarification Refactor verdict
and D-9 assets/scalar.min.js 3.3 MB vendored) are DEBT_ACCEPTED with
explicit owner + target. The builder/+primitives/ folder-vocabulary
nuance is covered by the existing role-clarification debt entry and is
not a new violation.

Changes

No source-code changes (this is an eval-only session). Files written:

  • .llm/tmp/run/feat-package-quality-wave5-apps--consolidation/impl-eval-service.md
    (≈360 LOC) — the deliverable, with one ## Verify N heading per
    item, a ## Verdict heading, gate evidence, and a final verdict line
    that maps the protocol PASS to the trigger-comment
    VERDICT: APPROVED.
  • This summary file.

Validation

All gates run from the repository root and scoped to packages/service/:

Gate Command Result
Type check deno task check PASS
Lint .llm/tools/run-deno-lint.ts --root packages/service --ext ts,tsx PASS (17 files, 0 findings)
Format .llm/tools/run-deno-fmt.ts --root packages/service --ext ts,tsx PASS (17 files, 0 findings)
Doc-lint (F-5 family) .llm/tools/run-deno-doc-lint.ts --root packages/service --pretty PASS (0 privateTypeRef, 0 missingJSDoc, 0 other)
JSR publish dry-run deno publish --dry-run --allow-dirty PASS ("Success Dry run complete")
Tests deno task test PASS (17/17, 705 ms)
README-example drift test deno test --allow-all tests/_fixtures/readme-examples_test.ts PASS (2/2)
F-1 (file ≤500 LOC) wc -l src/builder/*.ts src/types.ts mod.ts PASS (max 408 LOC)
F-11 (folder vocab) find src -mindepth 1 -type d PASS (4 folders; no forbidden names; builder/+primitives/ flagged for tracking)
F-13 (runtime lifecycle) grep RunningService.stop + AbortSignal PASS (test "serve stops when external signal aborts" passes)
F-16/F-18 (vendor leak) `grep -cE "import .* (hono orpc)" src/types.ts`
F-3 (layering) builder / diagnostics / presets / primitives / types.ts roles consistent PASS

Quantitative structure checks (Doctrine 05):

  • src/ top-level children: 5 (4 folders + types.ts) — well under
    the ≤12 cap.
  • Max depth: 2 (src/<role>/<file>.ts) — under the ≤4 cap.
  • No forbidden folder names from F-11.

Responses to review comments or issue comments

n/a — this is an IMPL-EVAL pass (independent evaluator), not an
implementation iteration responding to PR review threads. No new
findings to record beyond what is captured in impl-eval-service.md.
The single pre-existing drift entry
(2026-06-14 — carried-in plan path absent (significant)) is a
harness-process reconciliation: the user-cited prior plan.md path
does not exist locally, but the prior OpenHands output is already
merged into the umbrella branch and the re-baseline was re-derived
from the live tree. The inspected tree itself is the prior work's
result, so no code-level drift was introduced.

Remaining risks

  • The builder/ + primitives/ folder-vocabulary nuance (singular
    builder/ instead of doctrine-A4 application/builders/, and the
    use of primitives/ for handler factories) is tracking-only in
    the existing packages/service — doctrine verdict Refactor debt
    entry (F-3, F-11). Future waves should refine the role names; this
    evaluator did not block Phase A on it because the open debt entry
    already names it.
  • assets/scalar.min.js (3.3 MB) is intentionally vendored in the
    JSR publish per locked decision D-9. The asset is included in the
    publish-target list but deno publish --dry-run still reports
    "Success Dry run complete". No new risk.
  • doc-lint is provided at the repo wrapper level
    (.llm/tools/run-deno-doc-lint.ts); the package's own deno.json
    does not declare a doc-lint task. This matches every other
    package in the workspace and is not a finding.
  • No new debt entry was created in this pass. The two existing
    packages/service debt entries remain open and DEBT_ACCEPTED.

Verdict

VERDICT: APPROVED

Run: https://github.com/rickylabs/netscript/actions/runs/27508042691

@rickylabs

Copy link
Copy Markdown
Owner Author

@openhands-agent model=openrouter/minimax/minimax-m3 output=pr-comment iterations=600 use harness

Activate SKILL

  • netscript-harness
  • netscript-doctrine
  • jsr-audit

IMPL-EVAL — independent evaluator session for the Wave 5 @netscript/sdk consolidation (run feat-package-quality-wave5-apps--consolidation, Phase B). You are the INDEPENDENT evaluator — you did NOT write this code. Rule, with evidence, whether the committed implementation on branch feat/package-quality-wave5-apps meets the doctrine and production-grade bar. Evaluate against .llm/harness/evaluator/protocol.md, the doctrine under .claude/skills/netscript-doctrine/, and .llm/harness/gates/archetype-gate-matrix.md. Evaluation ONLY: zero edits to packages/, no implementation, no merging.

WRITE-ARTIFACT-FIRST (mandatory — prior OpenHands runs on this PR hit the iteration cap and produced synthesized-after-limit summaries; do NOT repeat that): your FIRST action is to create .llm/tmp/run/feat-package-quality-wave5-apps--consolidation/impl-eval-sdk.md as a skeleton (one heading per Verify item + a ## Verdict heading), then fill and re-save each ruling AS YOU GO. Budget reading so the artifact AND the OPENHANDS_SUMMARY_PATH summary are BOTH written and committed well before the cap. The summary's final line MUST be the verdict line.

Scope: packages/sdk — Archetype 4 (DSL/Builder). Phase B collapsed 8 root barrel folders + streams.ts into src/ as the single source root, keeping the 10 published subpath keys byte-stable (claimed zero consumer edits). The B1/B2 adapter/domain re-slice into canonical role folders was DEFERRED (KISS — see drift). ports/ holds the RFC-14 Transport seam.

Verify (binary PASS/FAIL each, write each ruling into impl-eval-sdk.md as you go):

  1. Archetype 4 gates (run them, paste evidence). From packages/sdk: deno task check, deno task lint, deno task doc-lint, deno publish --dry-run. Report each PASS/FAIL with output. Flag any required gate from the matrix omitted without N/A rationale.
  2. Single source root. Every published subpath key in deno.json exports resolves to a file under src/ (the keys: ., ./cache, ./client, ./collections, ./discovery, ./ports, ./query, ./query-client, ./streams, ./telemetry). No dangling target. No package source lives outside src/ except mod.ts. Barrel-collapse is complete (no leftover root barrel folders).
  3. Byte-stable public surface. The subpath keys are unchanged vs pre-consolidation (the drift claims zero consumer edits were required). Confirm no key was renamed/removed and the surface was not weakened; spot-check that consumer imports elsewhere in the repo still resolve.
  4. Doctrine 05 structure. src/ top-level = cache/ client/ collections/ discovery/ openapi/ ports/ presets/ query/ query-client/ telemetry/ + streams.ts. ports/ + presets/ are canonical; the feature folders (cache, client, discovery, query, query-client, collections, telemetry, openapi) are NOT canonical role names. Rule whether this is doctrine-acceptable or a finding — BUT note the B1/B2 adapter/domain re-slice is explicitly DEFERRED in drift.md; categorize it as accepted deferral, not a new blocker, IF the drift entry documents it. No forbidden names (utils/ common/ helpers/ interfaces/ core/); ≤12 children/dir, ≤4 depth.
  5. RFC-14 Transport seam. src/ports/transport.ts + the service-client seam are designed so a future unified mode needs no breaking alpha change (protect-don't-implement). Confirm the seam types are public and coherent (./ports).
  6. Docs truth + completeness. README.md names Archetype 4; docs/architecture.md is production-grade and accurate to the single-source-root layout and the deferred re-slice.
  7. Artifact reconciliation. Reconcile the Phase B entry in commits.md (5367093) and the B1/B2-deferral drift entry against the committed tree — flag any claim not supported by the code.

Output: impl-eval-sdk.md committed to the run dir (binary PASS/FAIL per item + gate evidence). Summary via OPENHANDS_SUMMARY_PATH ending with EXACTLY one verdict line: VERDICT: APPROVED or VERDICT: NEEDS-REVISION + remaining blockers. Evaluation ONLY — zero edits to packages/, no implementation, no merging. Do NOT emit any @openhands-agent block.

@rickylabs

rickylabs commented Jun 14, 2026

Copy link
Copy Markdown
Owner Author

OpenHands Agent — Completed

Model: openrouter/minimax/minimax-m3
Provider: OPENROUTER
Job status: success
Trace: .llm/tmp/run/openhands/pr-17/run-27511443802-1 (committed to the PR branch)
Artifact: openhands-agent-27511443802-1

IMPL-EVAL Summary — Wave 5 @netscript/sdk Consolidation (Phase B)

  • Run: feat-package-quality-wave5-apps--consolidation
  • Branch: feat/package-quality-wave5-apps
  • Scope: packages/sdk — Archetype 4 (Public DSL/Builder)
  • Evaluator: independent session (no edits to packages/)

Summary

Evaluated the committed Phase B for @netscript/sdk against the doctrine and the
Archetype 4 gate matrix. The work collapsed 8 root barrel folders + streams.ts
into src/ (B3) and held the 10 published subpath keys byte-stable, claiming
zero consumer edits. The B1/B2 adapter/domain re-slice was deferred with a
reasoned KISS justification recorded in drift.md (2026-06-14 "Phase B
narrowed to B3 (barrel collapse); B1/B2 deferred"). All seven verify items
passed.

Validation

Gate evidence (run from packages/sdk):

  • deno task check → 10/10 entrypoints type-check, exit 0
  • deno task lint → Checked 57 files, 0 errors
  • deno doc --lint (full-export over all 10 entrypoints) → Checked 10 files, 0 errors
  • deno task fmt → Checked 60 files, 0 errors
  • deno task test → 14 passed, 0 failed (incl. live-discovery round-trip, retry
    exhaustion, cancellation, KV persister, query-factory key stability, README
    doctest fences)
  • deno task publish:dry-run → "Success Dry run complete" (38 source files
    listed, all under src/ plus root mod.ts)

Per-entrypoint deno doc --lint <single-file> reports 9 private-type-ref
warnings across 4 files; these are misattribution because the "private"
type lives in a sibling subpath (e.g. ports/cache-store.ts) that is public
on ./ports. The full-export invocation above resolves this and is the
authoritative gate per the doc-score rule.

Structural findings (Verify 2 / 3 / 4):

  • packages/sdk/ has no root .ts files other than mod.ts; no root
    barrel folders; src/ is the single source root.
  • src/ has 11 children (10 dirs + streams.ts); max depth 1; no forbidden
    names (utils/ common/ helpers/ interfaces/ core/ absent).
  • All 10 deno.json exports keys resolve to files under src/; no dangling
    targets.
  • Subpath keys are byte-stable pre/post consolidation; live workspace
    consumers (packages/fresh, packages/queue, packages/cli) all resolve against
    the new targets.

Doctrine references verified:

  • Doctrine 05 (05-folder-structure.md) vocabulary — ports/ and presets/
    are canonical role names; the feature folders (cache, client, discovery,
    query, query-client, collections, telemetry, openapi) are
    non-canonical. The drift entry records the B1/B2 re-slice deferral with a
    reasoned KISS justification (co-location argument + port-seams-satisfied).
    Per the evaluator protocol, this is an accepted deferral, not a new
    blocker.
  • Archetype gate matrix — F-1 through F-18 (universal A4 required) addressed
    by the six static gates above; F-13 n/a for A4; F-CLI-* n/a; browser
    validation subtype n/a for sdk (A4-Browser routes are fresh/fresh-ui
    scope, not sdk).

RFC-14 Transport seam (Verify 5): src/ports/transport.ts exports
ServiceTransport with a 'http' | 'in-process' mode discriminator, re-
exported via ./ports. The seam is public, exported, and protected-don't-
implemented; docs/architecture.md "Transport Seam Audit" section documents
the intent.

Docs (Verify 6): packages/sdk/README.md line 12 names "Archetype 4
(DSL/Builder)"; §3 has a 10-row entry-point table.
packages/sdk/docs/architecture.md has a layer map (L0 ports / L1
primitives / L2 factories / L3 preset) that matches the on-disk tree, an
accurate transport-seam audit, and a "Contributor Path" section.

Artifact reconciliation (Verify 7): commits.md entry 5367093 exists on
the branch with the stated message; the B1/B2 drift entry is the canonical
record of the deferral; no claim in commits.md or drift.md is
contradicted by the committed tree.

Changes

None — evaluation-only run, zero edits to packages/. The deliverable is the
artifact at
.llm/tmp/run/feat-package-quality-wave5-apps--consolidation/impl-eval-sdk.md
(479 lines, 7 verify items + verdict table + closing line), committed back to
the run dir automatically by the harness on exit.

Responses to Review Comments

n/a (no review thread comments on this run's task; the user-side thread is the
original IMPL-EVAL comment that triggered the run).

Remaining Risks

  • B1/B2 deferral revisit trigger. The drift entry's "Revisit if a second
    concrete adapter per port ever lands" is the only known revisit condition.
    Until a sibling adapter is added (e.g. a second CacheStore technology
    beyond KV), the current feature-folder shape is correct and the
    re-slice is not a blocker. The drift entry is the closing-gate record.
  • Per-entrypoint deno doc --lint artifact. If a future gate script
    invokes deno doc --lint per-file (rather than full-export), the
    private-type-ref misattribution will need a sibling-type-resolution
    script to avoid false positives. The full-export gate above is the
    authoritative one and is the pattern used by Wave 2/3 (packages/plugin
    reference). Recorded for the lead.

VERDICT: APPROVED

Run: https://github.com/rickylabs/netscript/actions/runs/27511443802

openhands-agent and others added 3 commits June 14, 2026 20:52
…OVED [E]

Three independent OpenHands IMPL-EVAL sessions (MiniMax M3, iterations=600,
write-artifact-first) on PR #17 returned VERDICT: APPROVED with
summary_source=agent (genuine, not iteration-cap fabrications):

- fresh   run 27507518739 — 8/8 PASS, E2E 41/41
- service run 27508042691 — 7/7 PASS, max 408 LOC, no vendor leak
- sdk     run 27511443802 — 7/7 PASS, byte-stable surface

- eval-results.md: closeout summary + evidence + non-blocking follow-ups
- commits.md: eval trace commits + Phase E entry
- arch-debt.md: packages/fresh AP-1 (builders split) + F-7 (doc-lint) RESOLVED

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rickylabs rickylabs changed the title [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a–5d ✅ MERGED · Structural Consolidation: A–D ✅ · E (close) IN PROGRESS [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a–5d ✅ MERGED · Structural Consolidation A–E ✅ · 3× IMPL-EVAL APPROVED Jun 14, 2026
@rickylabs
rickylabs merged commit 82c1185 into feat/package-quality Jun 14, 2026
rickylabs added a commit that referenced this pull request Jun 14, 2026
PR #17 (Wave 5 Application surfaces umbrella) merged into the track at 82c1185.
All 4 sub-waves + structural consolidation A-E + 3x IMPL-EVAL APPROVED (MiniMax M3).
phase-registry: Wave 5 -> merged with closeout subsection; Wave 6 (cli) -> unblocked
(last remaining S1 wave). commits.md: append Wave 2-5 track merges.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rickylabs
rickylabs deleted the feat/package-quality-wave5-apps branch June 22, 2026 21:34
rickylabs added a commit that referenced this pull request Jul 11, 2026
… (#681)

- Proposal #4: identical raw-Request stream-proxy exception callout in chat/02,
  how-to/build-a-durable-chat, ai/durable-chat.
- Proposal #5: bind the turn POST URL to a shared createRouteReference contract
  (contracts/routes/chat-turn.ts) in chat/03 + chat/06.
- Matrix: show the dynamic [sessionId] route typed in chat/02; honest
  useIslandQuery-scope note in chat/03.
- Proposal #17: chat index lede names the differentiator + contrast sentence.


Claude-Session: https://claude.ai/code/session_01VifzAytcxBk5odEMaCXihM

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
rickylabs added a commit that referenced this pull request Jul 11, 2026
…rp-sync/workspace series (#661) (#682)

Proposal #17: erp-sync + workspace index ledes name the differentiator each series proves plus a 'what this replaces' contrast sentence. Proposal #18: erp-sync/05-deploy + workspace/06-deploy surface the one-command scaffold-to-Aspire story explicitly. Matrix #3: workspace/03-workspace-data strengthens the typed-data-layer differentiator framing. Showcase-only edits; no code blocks or chapter structure changed; 05-route-authz untouched (owned elsewhere).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
rickylabs added a commit that referenced this pull request Jul 11, 2026
…ries polish (#684)

* docs(storefront): add typed storefront UI chapter, renumber deploy (proposal #6)

Add 06-storefront-ui.md showcasing the frontend typed spine the storefront
series never touched: a bound route contract (createRouteReference /
defineRouteContract / bindRoutePattern), a per-service createServiceClient +
createServiceQueryUtils clients module, and a Fresh island reading with
useIslandQuery and beginning checkout with useIslandMutation. Deploy renumbered
06 -> 07; prev/next/learningPath/xref navigation rewired across the series.

Every API grounded via deno doc + two scratch deno checks against packages/sdk
and packages/fresh; the island uses contract-derived keys with typed client
calls (the SDK queryOptions/mutationOptions result is not raw-spreadable into
the zero-arg island hooks).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VifzAytcxBk5odEMaCXihM

* docs(storefront): index differentiator lede, deploy one-command framing, PORT note

- index.md: name the differentiator the series proves + a 'what this replaces'
  contrast sentence (proposal #17).
- 02-catalog-service.md: note that Aspire injects PORT and services.<name>.port
  in netscript.config.ts is the typed source of truth (proposal #7).
- 07-deploy.md one-command scaffold-to-Aspire framing shipped with commit 1;
  worklog records the full run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VifzAytcxBk5odEMaCXihM

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants