release: WRNexusJS 0.3.1

This commit is contained in:
2026-07-22 18:42:20 +05:30
parent 07d8fb59d6
commit 304819dfe9
62 changed files with 158 additions and 103 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ai",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/authz",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/cli",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+20 -3
View File
@@ -30,7 +30,7 @@ import { spawnSync } from "node:child_process";
import { dirname, join, resolve } from "node:path";
import { pathToFileURL } from "node:url";
import { AI_GUIDE, CLAUDE_MD } from "./ai-guide.ts";
import { inspectProject } from "./doctor.ts";
import { inspectProject, type DoctorCheck } from "./doctor.ts";
/** The version of the CLI currently running (its own package.json). */
function cliVersion(): string {
@@ -952,6 +952,15 @@ const MIGRATIONS: Migration[] = [
}
},
},
{
version: "0.3.1",
id: "pending-update-marker-verification-fix",
description:
"Allows warning-level doctor checks during pre-commit update verification so successfully verified migrations can commit their new version marker.",
apply() {
// CLI-only transaction fix. No generated application files require migration.
},
},
];
/** Release tooling uses this to require an explicit migration entry per version. */
@@ -1093,11 +1102,19 @@ export function verificationCommands(scripts: Record<string, string>): string[][
return commands;
}
export function blockingVerificationChecks(checks: DoctorCheck[]): DoctorCheck[] {
return checks.filter((check) => !check.ok && check.level !== "warning");
}
function verifyApp(app: UpdatedApp): boolean {
const health = inspectProject(app.root);
const failed = health.filter((check) => !check.ok && check.name !== "configuration");
const failed = blockingVerificationChecks(health);
if (failed.length) {
for (const check of failed) console.error(`${check.name}: ${check.detail}`);
for (const check of failed) {
console.error(`${check.name}: ${check.detail}`);
}
return false;
}
+39 -1
View File
@@ -2,7 +2,7 @@ import { expect, test } from "bun:test";
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { updateApp, verificationCommands } from "../src/update.ts";
import { blockingVerificationChecks, updateApp, verificationCommands } from "../src/update.ts";
test("updateApp migrates project files without marking an unverified update complete", () => {
const root = mkdtempSync(join(tmpdir(), "wrnexus-update-"));
@@ -188,3 +188,41 @@ test("0.3 WRN source normalization is conservative and idempotent", async () =>
expect(migrated).toContain("data-config={{ nested: true }}");
expect(migrateWrnSource(migrated)).toBe(migrated);
});
test("update verification allows pending marker and configuration warnings", () => {
expect(
blockingVerificationChecks([
{
name: "update marker",
ok: false,
detail: "project last migrated to 0.2.79",
level: "warning",
},
{
name: "configuration",
ok: false,
detail: "No wrnexus.config file; framework defaults will be used",
level: "warning",
},
]),
).toEqual([]);
});
test("update verification still blocks real doctor errors", () => {
const fatal = {
name: "WRN language",
ok: false,
detail: "10 files, 1 errors, 0 warnings",
};
expect(
blockingVerificationChecks([
fatal,
{
name: "update marker",
ok: false,
detail: "project last migrated to 0.2.79",
level: "warning",
},
]),
).toEqual([fatal]);
});
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/compiler",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/core",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/csr",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/db",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-server",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-toolbar",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"sideEffects": false,
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/encryption",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/helpers",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/i18n",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/jwt",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/mobile",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/native",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/oauth",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/plugin",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/pubsub",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/queue",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/reactive",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/router",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ssr",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/styles",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/syntax",
"version": "0.3.0",
"version": "0.3.1",
"type": "module",
"main": "src/index.ts",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/test",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/tracking",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ui",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/uploader",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/validation",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"type": "module",
"main": "src/index.ts",