diff --git a/.changeset/append-to-file-create-if-missing.md b/.changeset/append-to-file-create-if-missing.md deleted file mode 100644 index 0d920b3..0000000 --- a/.changeset/append-to-file-create-if-missing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"stanza-cli": patch ---- - -Fix `stanza add monorepo turbo` hard-failing on existing projects that lack a root `.gitignore`. - -The `append-to-file` codemod gains an optional `createIfMissing` arg: when set and the target file is absent, it creates the file containing just the wrapped marker block instead of throwing. `monorepo-turbo` now passes `createIfMissing: true` for its `.turbo/` `.gitignore` entry, so `stanza add monorepo turbo` works on a pre-existing project with no `.gitignore` (previously the whole add rolled back). The flag is additive and off by default — modules appending to peer-owned files (a Prisma schema, a framework's `globals.css`) keep the original "missing file is a peer-ordering bug" throw. diff --git a/.changeset/extract-schema-package.md b/.changeset/extract-schema-package.md deleted file mode 100644 index 234fbeb..0000000 --- a/.changeset/extract-schema-package.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@withstanza/schema": minor -"stanza-cli": patch ---- - -Extract the schema/contract layer into a standalone, npm-published `@withstanza/schema` package. - -`@withstanza/schema` now owns the `stanza.json` manifest schema, the registry module/index schemas, the contract types, the canonical `CATEGORIES` taxonomy, and the package-manager + registry-config schemas — everything previously bundled into the private `@withstanza/registry`. It's published so third-party registry authors and editor tooling can validate against the exact same Zod source of truth the CLI uses; `StanzaManifestSchema` backs the JSON Schema served at . A new private `@withstanza/utils` package holds the shared path-safety (`safeRelativePath`) and env-file (`appendEnvVar`) helpers. - -No change to CLI behavior — this is an internal restructure. `@withstanza/registry` keeps only the resolver, install-field synthesis, and template rendering, depending on `@withstanza/schema`. The static registry build moves out of the registry package to the standalone `scripts/compile-registry.ts` (writing `index.json` + `modules/*.json` directly under its output dir, no `registry/` wrapper), and the manifest JSON Schema is served by the web app's `/schema.json` route rather than emitted as a build artifact. diff --git a/.changeset/registry-blob-origin.md b/.changeset/registry-blob-origin.md deleted file mode 100644 index 2fcead6..0000000 --- a/.changeset/registry-blob-origin.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"@withstanza/schema": minor -"stanza-cli": patch ---- - -Serve the first-party registry and manifest schema from Vercel Blob as the single origin. - -The registry index, per-module manifests, and the manifest JSON Schema are now hosted on Vercel Blob and served path-transparently from `stanza.tools` via rewrites: `stanza.tools/registry/index.json`, `stanza.tools/registry/-.json` (latest), `stanza.tools/registry/-@.json` (immutable pin), and `stanza.tools/schema.json` / `schema@.json`. The HTML browse pages (`/registry`, `/registry/`, `/registry//`) are unchanged. `DEFAULT_REGISTRY_URL` and `MANIFEST_SCHEMA_URL` keep their values, so the CLI and every manifest's `$schema` are unaffected. - -`@withstanza/schema` gains `compileManifestJsonSchema()` (the shared schema compiler) and `REGISTRY_BASE_URL` (`https://stanza.tools/registry`). `scripts/publish-registry.ts` compiles the registry and uploads it to Blob on every push to `main` that touches `registry/**` or the schema source — so a module change goes live without a release. Latest files overwrite each run; `@version` pins are written once and immutable. A `pull_request` CI guard (`scripts/check-module-versions.ts`) fails when a changed module's content differs from its published pin without a version bump. - -`compile-registry` now emits a flat layout (`-.json` + `index.json`, no `modules/` subdir) that maps 1:1 onto the Blob store, and a module's `package.json` version is the single source of truth (stamped into the compiled module; `module.ts`'s `version` field is no longer authoritative). The web app reads its own build-time compiled copy (`apps/web/.registry/`, gitignored) for prerendering and SSR; the schema is no longer served by an app route. No CLI behavior change — the read path for pinned versions is deferred to the upcoming `swap`/`update` verbs. diff --git a/apps/cli/CHANGELOG.md b/apps/cli/CHANGELOG.md index e461630..1b4c140 100644 --- a/apps/cli/CHANGELOG.md +++ b/apps/cli/CHANGELOG.md @@ -1,5 +1,27 @@ # stanza-cli +## 0.1.1 + +### Patch Changes + +- [#18](https://github.com/jakejarvis/stanza/pull/18) [`04a196e`](https://github.com/jakejarvis/stanza/commit/04a196e4e9f3e4ea65445a191421f643d1fe3510) - Fix `stanza add monorepo turbo` hard-failing on existing projects that lack a root `.gitignore`. + + The `append-to-file` codemod gains an optional `createIfMissing` arg: when set and the target file is absent, it creates the file containing just the wrapped marker block instead of throwing. `monorepo-turbo` now passes `createIfMissing: true` for its `.turbo/` `.gitignore` entry, so `stanza add monorepo turbo` works on a pre-existing project with no `.gitignore` (previously the whole add rolled back). The flag is additive and off by default — modules appending to peer-owned files (a Prisma schema, a framework's `globals.css`) keep the original "missing file is a peer-ordering bug" throw. + +- [#16](https://github.com/jakejarvis/stanza/pull/16) [`ea2d8c4`](https://github.com/jakejarvis/stanza/commit/ea2d8c45bdde5df23005f4b739b7c5d029e9be2d) - Extract the schema/contract layer into a standalone, npm-published `@withstanza/schema` package. + + `@withstanza/schema` now owns the `stanza.json` manifest schema, the registry module/index schemas, the contract types, the canonical `CATEGORIES` taxonomy, and the package-manager + registry-config schemas — everything previously bundled into the private `@withstanza/registry`. It's published so third-party registry authors and editor tooling can validate against the exact same Zod source of truth the CLI uses; `StanzaManifestSchema` backs the JSON Schema served at . A new private `@withstanza/utils` package holds the shared path-safety (`safeRelativePath`) and env-file (`appendEnvVar`) helpers. + + No change to CLI behavior — this is an internal restructure. `@withstanza/registry` keeps only the resolver, install-field synthesis, and template rendering, depending on `@withstanza/schema`. The static registry build moves out of the registry package to the standalone `scripts/compile-registry.ts` (writing `index.json` + `modules/*.json` directly under its output dir, no `registry/` wrapper), and the manifest JSON Schema is served by the web app's `/schema.json` route rather than emitted as a build artifact. + +- [#18](https://github.com/jakejarvis/stanza/pull/18) [`04a196e`](https://github.com/jakejarvis/stanza/commit/04a196e4e9f3e4ea65445a191421f643d1fe3510) - Serve the first-party registry and manifest schema from Vercel Blob as the single origin. + + The registry index, per-module manifests, and the manifest JSON Schema are now hosted on Vercel Blob and served path-transparently from `stanza.tools` via rewrites: `stanza.tools/registry/index.json`, `stanza.tools/registry/-.json` (latest), `stanza.tools/registry/-@.json` (immutable pin), and `stanza.tools/schema.json` / `schema@.json`. The HTML browse pages (`/registry`, `/registry/`, `/registry//`) are unchanged. `DEFAULT_REGISTRY_URL` and `MANIFEST_SCHEMA_URL` keep their values, so the CLI and every manifest's `$schema` are unaffected. + + `@withstanza/schema` gains `compileManifestJsonSchema()` (the shared schema compiler) and `REGISTRY_BASE_URL` (`https://stanza.tools/registry`). `scripts/publish-registry.ts` compiles the registry and uploads it to Blob on every push to `main` that touches `registry/**` or the schema source — so a module change goes live without a release. Latest files overwrite each run; `@version` pins are written once and immutable. A `pull_request` CI guard (`scripts/check-module-versions.ts`) fails when a changed module's content differs from its published pin without a version bump. + + `compile-registry` now emits a flat layout (`-.json` + `index.json`, no `modules/` subdir) that maps 1:1 onto the Blob store, and a module's `package.json` version is the single source of truth (stamped into the compiled module; `module.ts`'s `version` field is no longer authoritative). The web app reads its own build-time compiled copy (`apps/web/.registry/`, gitignored) for prerendering and SSR; the schema is no longer served by an app route. No CLI behavior change — the read path for pinned versions is deferred to the upcoming `swap`/`update` verbs. + ## 0.1.0 ### Minor Changes diff --git a/apps/cli/package.json b/apps/cli/package.json index 0d5f14b..0567220 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "stanza-cli", - "version": "0.1.0", + "version": "0.1.1", "description": "Modular monorepo template CLI — shadcn for stacks.", "keywords": [ "boilerplate", diff --git a/packages/create-stanza/CHANGELOG.md b/packages/create-stanza/CHANGELOG.md index 2e6a2cc..d5df6cc 100644 --- a/packages/create-stanza/CHANGELOG.md +++ b/packages/create-stanza/CHANGELOG.md @@ -1,5 +1,12 @@ # create-stanza +## 0.1.1 + +### Patch Changes + +- Updated dependencies [[`04a196e`](https://github.com/jakejarvis/stanza/commit/04a196e4e9f3e4ea65445a191421f643d1fe3510), [`ea2d8c4`](https://github.com/jakejarvis/stanza/commit/ea2d8c45bdde5df23005f4b739b7c5d029e9be2d), [`04a196e`](https://github.com/jakejarvis/stanza/commit/04a196e4e9f3e4ea65445a191421f643d1fe3510)]: + - stanza-cli@0.1.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/create-stanza/package.json b/packages/create-stanza/package.json index 79968c3..cee5555 100644 --- a/packages/create-stanza/package.json +++ b/packages/create-stanza/package.json @@ -1,6 +1,6 @@ { "name": "create-stanza", - "version": "0.1.0", + "version": "0.1.1", "description": "`npm init stanza` — the canonical entry point to the stanza wizard.", "keywords": [ "cli", diff --git a/packages/schema/CHANGELOG.md b/packages/schema/CHANGELOG.md new file mode 100644 index 0000000..991850f --- /dev/null +++ b/packages/schema/CHANGELOG.md @@ -0,0 +1,19 @@ +# @withstanza/schema + +## 0.1.0 + +### Minor Changes + +- [#16](https://github.com/jakejarvis/stanza/pull/16) [`ea2d8c4`](https://github.com/jakejarvis/stanza/commit/ea2d8c45bdde5df23005f4b739b7c5d029e9be2d) - Extract the schema/contract layer into a standalone, npm-published `@withstanza/schema` package. + + `@withstanza/schema` now owns the `stanza.json` manifest schema, the registry module/index schemas, the contract types, the canonical `CATEGORIES` taxonomy, and the package-manager + registry-config schemas — everything previously bundled into the private `@withstanza/registry`. It's published so third-party registry authors and editor tooling can validate against the exact same Zod source of truth the CLI uses; `StanzaManifestSchema` backs the JSON Schema served at . A new private `@withstanza/utils` package holds the shared path-safety (`safeRelativePath`) and env-file (`appendEnvVar`) helpers. + + No change to CLI behavior — this is an internal restructure. `@withstanza/registry` keeps only the resolver, install-field synthesis, and template rendering, depending on `@withstanza/schema`. The static registry build moves out of the registry package to the standalone `scripts/compile-registry.ts` (writing `index.json` + `modules/*.json` directly under its output dir, no `registry/` wrapper), and the manifest JSON Schema is served by the web app's `/schema.json` route rather than emitted as a build artifact. + +- [#18](https://github.com/jakejarvis/stanza/pull/18) [`04a196e`](https://github.com/jakejarvis/stanza/commit/04a196e4e9f3e4ea65445a191421f643d1fe3510) - Serve the first-party registry and manifest schema from Vercel Blob as the single origin. + + The registry index, per-module manifests, and the manifest JSON Schema are now hosted on Vercel Blob and served path-transparently from `stanza.tools` via rewrites: `stanza.tools/registry/index.json`, `stanza.tools/registry/-.json` (latest), `stanza.tools/registry/-@.json` (immutable pin), and `stanza.tools/schema.json` / `schema@.json`. The HTML browse pages (`/registry`, `/registry/`, `/registry//`) are unchanged. `DEFAULT_REGISTRY_URL` and `MANIFEST_SCHEMA_URL` keep their values, so the CLI and every manifest's `$schema` are unaffected. + + `@withstanza/schema` gains `compileManifestJsonSchema()` (the shared schema compiler) and `REGISTRY_BASE_URL` (`https://stanza.tools/registry`). `scripts/publish-registry.ts` compiles the registry and uploads it to Blob on every push to `main` that touches `registry/**` or the schema source — so a module change goes live without a release. Latest files overwrite each run; `@version` pins are written once and immutable. A `pull_request` CI guard (`scripts/check-module-versions.ts`) fails when a changed module's content differs from its published pin without a version bump. + + `compile-registry` now emits a flat layout (`-.json` + `index.json`, no `modules/` subdir) that maps 1:1 onto the Blob store, and a module's `package.json` version is the single source of truth (stamped into the compiled module; `module.ts`'s `version` field is no longer authoritative). The web app reads its own build-time compiled copy (`apps/web/.registry/`, gitignored) for prerendering and SSR; the schema is no longer served by an app route. No CLI behavior change — the read path for pinned versions is deferred to the upcoming `swap`/`update` verbs. diff --git a/packages/schema/package.json b/packages/schema/package.json index d186b06..abfb531 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -1,6 +1,6 @@ { "name": "@withstanza/schema", - "version": "0.0.0", + "version": "0.1.0", "description": "JSON Schema and contract types for the Stanza manifest (stanza.json).", "keywords": [ "json-schema",