PR-C: alpha-1 legacy/deprecated purge + hygiene (breaking)#114
Conversation
…alpha1-legacy-purge--purge)
|
@openhands-agent model=openrouter/minimax/minimax-m3 output=pr-comment use harness You are the PLAN-EVAL evaluator for PR #114 (run SKILLActivate and follow these repo skills before evaluating (read each SKILL.md):
Inputs (on the PR branch
|
OpenHands Agent — CompletedModel: openrouter/minimax/minimax-m3 Run summary — PR-C PLAN-EVAL cycle 2 (
|
…end caller / startWorkersStreamMirror canonical / aspire DependsOn vs canonical dependsOn)
|
[PHASE: IMPL] [SLICE: S1] Tier-1 legacy surface purge landed and pushed. Scope
Commit
Evidence
Notes
|
|
[PHASE: IMPL] [SLICE: S2] Aspire legacy Scope
Commit
Precondition Evidence
Evidence
Notes
|
|
[PHASE: IMPL] [SLICE: S3] Hygiene H1/H2 landed and pushed. Scope
Commit
Evidence
Notes
|
PR-C S4 implementation: fresh wording + arch-debt foldingCommit: Scope:
Evidence:
Lock/cast hygiene:
Note: formatting churn is confined to touched docs/harness Markdown files from the scoped formatter run. |
|
@openhands-agent model=openrouter/qwen/qwen3.7-max output=pr-comment use harness — you are the IMPL-EVAL evaluator for PR-C (#114), running in a separate session Scope under evaluationPR-C = project-wide alpha-1 legacy/deprecated purge + folded hygiene. Branch
Run artifacts (read first)
What to verify
OutputWrite SKILL
|
OpenHands Agent — CompletedModel: openrouter/qwen/qwen3.7-max IMPL-EVAL Summary - PR-C alpha-1 legacy/deprecated purgeVerdict: PASSEvaluation ScopeEvaluated PR-C (branch chore/alpha1-legacy-purge at 7d91fbb) against approved plan for project-wide alpha-1 legacy/deprecated purge + folded hygiene. Verification Results
Changes MadeNone. This is an evaluation run only; no source code modifications. Remaining Risks (Non-Blocking)
Recommended ActionMerge PR #114 as-is with BREAKING CHANGE note calling out: aspire DependsOn alias removed (use canonical ServiceReferences / dependsOn); 3 Tier-1 compat exports removed. Per DEBT-1, no version bump. Run: https://github.com/rickylabs/netscript/actions/runs/27995582550 |
…ported ServiceEnv (#114) (#125) JSR rejects publishing `@netscript/service@0.0.1-alpha.2`: modifying global types is not allowed file:///src/auth/hono-context.ts:10:16 `deno publish --dry-run` did NOT catch this — it is a server-side JSR check — so both local and CI dry-runs passed green while the real publish aborted at service, landing 18/31 packages then failing (the 12 queued after it never uploaded). Root cause: `hono-context.ts` used `declare module 'hono' { interface ContextVariableMap { ... } }` to globally augment every Hono app's context variables. JSR forbids ambient global-type modification in published packages. Fix (behavior-identical for this package's own code): - Remove the `declare module 'hono'` augmentation. - Export `ServiceVariables` + `ServiceEnv` from hono-context.ts as the JSR-compliant opt-in: consumers type their app `new Hono<ServiceEnv>()` instead of relying on global pollution. Re-exported from `@netscript/service/auth`. - Drop the three now-dead `import './hono-context.ts'` side-effect imports (types.ts, auth-middleware.ts, service-builder-impl.ts). The service's own plumbing already typed contexts as plain `Context` / `MiddlewareHandler` (env defaults to `any`), so `c.get('principal')` / `c.set('principal')` / `c.get('logger')` resolve identically before and after. The test suite owns its `AuthTestEnv` and never depended on the augmentation. Validation: - deno check --unstable-kv ./mod.ts ./src/auth/mod.ts — clean - deno test ./tests/ — 57 passed, 0 failed Claude-Session: https://claude.ai/code/session_014gW4zfhMMQU6txC828ijct Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* chore(release): bump workspace to 0.0.1-alpha.3 Native `deno bump-version prerelease` across all 32 workspace members plus the root workspace version, in lockstep for the alpha.3 JSR release train. No source or lock changes — version fields only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014gW4zfhMMQU6txC828ijct * fix(release): repair 3 alpha.3 JSR release-train defects The alpha.3 publish itself succeeded (all 31 members live), but every release-triggered workflow went red on post-publish defects. None affect the published packages; all three are fixed here. 1. jsr-set-package-settings: send ONE PATCH per changed field. JSR's `PATCH /scopes/{scope}/packages/{package}` deserializes into the externally-tagged enum `ApiUpdatePackageRequest`, which accepts exactly one field per request. The merged readmeSource+description+runtimeCompat body failed server-side with HTTP 400 `malformedRequest` for all 31 packages, so the readmeSource toggle / description / runtimeCompat were never applied. Now one PATCH per field; interface/env/dry-run unchanged. 2. e2e-cli-prod + e2e harness: add `--minimum-dependency-age=0` on every JSR-mode install/check so Deno 2.9's supply-chain recency guard stops refusing the just-published CLI and its `jsr:@netscript/*` deps (<24h old). Gated on JSR mode only; local/maintainer e2e is byte-identical. 3. packages/cli/deno.json: declare `@netscript/{aspire,config,plugin}` jsr imports. JSR records dependencies from the import map, not the monorepo workspace array, so a standalone-installed CLI bin (added in alpha.3) could not resolve its `@netscript/*` siblings ("Import @netscript/plugin not a dependency"). deno.lock gains the 3 matching entries. Refs #114 #116. Pages tag-policy defect (v* deploy ref) already fixed via the github-pages environment. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014gW4zfhMMQU6txC828ijct --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Whole-workspace version bump 0.0.1-alpha.3 -> 0.0.1-alpha.4 across all 32 members + the workspace-root deno.json. Cuts the alpha.4 release that exercises the three alpha.3 release-train fixes (#131) end-to-end: the per-field JSR settings PATCH, the Deno 2.9 --minimum-dependency-age=0 e2e installs, and the standalone-CLI @netscript/* import resolution. - `deno bump-version prerelease` bumped all 32 workspace members and (being workspace-aware) the packages/cli @netscript/{aspire,config,plugin} import ranges to ^0.0.1-alpha.4. - The workspace-root deno.json version and the 3 matching deno.lock dependency entries were bumped manually: native bump-version only touches workspace[] members, so it skips the publish:false root meta-version and the lock's dependency mirror. Validated: whole-workspace `deno publish --dry-run` succeeds (import ranges and lock are consistent; all member tarballs build). Refs #114 #116. Claude-Session: https://claude.ai/code/session_014gW4zfhMMQU6txC828ijct Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…accepts them (#139) The v0.0.1-alpha.5 whole-workspace publish partial-failed: @netscript/fresh-ui and @netscript/plugin were rejected with "The import attribute type of 'text' is unsupported", which also skipped @netscript/cli and 5 other dependents (23 of 31 members published). Root cause is a deno publish defect, not a config gap. The publish module-graph build (deno_graph crate) never sets unstable_text_imports, so it rejects `with { type: 'text' }` import attributes even though text imports are otherwise stable and pass deno check / deno info / deno publish --dry-run. No CLI flag or deno.json lever force-enables it on the publish path: text imports are stable (so there is deliberately no flag), and --unstable-raw-imports only toggles the separate `bytes` feature, which this workspace does not use. The flag added in a prior attempt was therefore a no-op for the text error and is reverted here. Fix: the assets-barrel generator now inlines each asset's content as a plain string constant (`const template_NNN = "...";`) instead of importing it via `with { type: 'text' }`. The three generated barrels keep their exact export shapes (EMBEDDED_TEMPLATE_CONTENT, PLUGIN_SKELETON_TEMPLATE_CONTENT, FRESH_UI_REGISTRY_CONTENT as Record<..., string>), so every consumer is unchanged and the runtime asset-read path is identical. Plain string constants carry no import attribute, so the publish graph builder has nothing to reject. To keep determinism and formatting green, the generator pipes its rendered output through `deno fmt` before writing, so the committed barrels are already fmt-canonical: check:assets-barrel (regen + git diff --exit-code) and fmt:check both stay byte-stable. Also removes the now-dead `raw-imports` entry from the workspace-root unstable list (no bytes imports exist repo-wide and text imports are stable). Gates: check:assets-barrel exit 0 (deterministic), deno task check 0 findings (1735 files), lint 0, fmt:check 0 findings, fresh-ui barrel+consumer type-check exit 0, asset consumer unit tests 5/5 (including "reads embedded content without hydration" and "no direct Deno.read"). Follow-up: deno publish --dry-run is a blind spot for this failure class (it tolerates text imports the real publish rejects); a real-publish-equivalent preflight is tracked under the deterministic JSR release/publish e2e (#114). An upstream deno issue for the publish-graph unstable_text_imports gap will be filed. Claude-Session: https://claude.ai/code/session_014gW4zfhMMQU6txC828ijct Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
PR-C — project-wide alpha-1 legacy/deprecated purge + folded hygiene
Third and final slice of the JSR-readiness program after PR-A (additive) and PR-B #113 (breaking
prod-readiness removals, merged). Removes the remaining alpha-1 legacy/deprecated surface that PR-B
did not own, and folds in the mechanical hygiene cleanup (PR-D dissolved into this PR).
Status: draft — plan + research committed; PLAN-EVAL (OpenHands minimax-M3) pending. No
implementation slice until PLAN-EVAL returns PASS.
Baseline: branched off PR-B's merged main
abb6e9a4; every item re-grepped against that tip.Breaking change
This is a breaking (subtractive) change at the alpha-1 pre-1.0 line. Per the lockstep single-version
scheme, no per-package version bump — the repo-wide breaking bump lands once at JSR-publish prep
(recorded as DEBT-1). Versions hold at
0.0.1-alpha.0.Removal manifest (final, post-re-verification)
Tier 1 (low-consumer aliases / dead stubs):
updatePluginRegistryno-op stub (cli plugin workspace-mutator) — config-driven path superseded itsafeExtendZod-compat alias (fresh pagination-types) — 0 call consumersstartWorkersStreamMirrorback-compat wrapper (plugins/workers producer) — 1 consumer, renamedTier 2 (the substantive slice):
ServiceEntry.DependsOn?(@deprecated → ServiceReferences) + back-compat merge branch — 6consumers. Gated on proving
ServiceReferencesis a complete replacement before removal.Two inventory items re-verified and EXCLUDED (re-baselining caught these):
packagesAsWorkspaceMembers— a live, load-bearing scaffold seam (dynamichasLocalPackageWorkspace, real=== true/() => falsebranches), NOT a dead always-trueoption. Not touched.
streams/schema.ts schedule?— deprecation ties to the deferred workers-cron→triggersunification (CRON-SUBSYSTEM-DUP) and is still wired into a projection mask. Deferred with that work.
Folded hygiene
.llm/tmp/init-json-smoke/accidental test-output + close the.gitignoregap (root cause)FreshAppTelemetryOptions(WORDING ONLY — these are canonical API; removal is a trap)arch-debt folded (record-only; not implemented here)
RUN-ARTIFACT-ARCHIVAL-POLICY, PAGEBUILDER-LEGACY-COMPAT-TREE, FORMPAGEPROPS-PLAYGROUND-MIGRATION,
REDIS-LEGACY-VALUE-FALLBACK, plus DEBT-1 (version timing) and DEBT-2 (db-init e2e flake) carried from
PR-B.
Gates (at IMPL-EVAL)
Scoped check/lint/fmt (src ts/tsx);
deno doc --lintper package; per-packagedeno task test;pre-delete grep gate over templates/docs/scaffold;
deno task arch:check;deno task publish:dry-run;deno task e2e:cli run scaffold.runtime --cleanup --format pretty. Nodeno.lockchurn; zero-cast.
Run artifacts:
.llm/tmp/run/chore-alpha1-legacy-purge--purge/(research.md, plan.md).