@ultimat3/schema
Advanced tools
+16
-6
@@ -53,6 +53,8 @@ # @ultimat3/schema — agent notes | ||
| `SCHEMA_ERROR_CODES` in `errors.ts` is data, not a `registerErrorCodes()` call — this package is | ||
| tier 0 and cannot import `@ultimat3/core` to reach it. `@ultimat3/core`'s `schema-error-codes.ts` | ||
| carries a duplicate of these titles and registers them unconditionally, so every process gets the | ||
| real titles just by importing core. Add a code here **and** update that duplicate in the same | ||
| change — `schema-error-codes-pin.test.ts` in `@ultimat3/cli` fails the build if they disagree. | ||
| tier 0 and cannot import `@ultimat3/core` to reach it, and never will. `@ultimat3/core`'s | ||
| `schema-error-codes.ts` READS this object over the declared `core -> schema` edge and registers it | ||
| unconditionally, so every process gets the real titles just by importing core. **Adding a code here | ||
| is the whole edit `As of 2026-08-27`** — the title and its `terminal` retry classification are both | ||
| derived from this set, where they used to be a hand-kept duplicate in core plus a hand-written | ||
| retry list a fifth code would have been silently missing from. | ||
@@ -64,5 +66,13 @@ `ERROR_DOCS_URL` in `errors.ts` is the third deliberate tier-0 duplicate, beside `singleLine` and | ||
| `https://ultimate.dev/errors/<code>` was a 404 on every error and was deleted `As of 2026-08-23`. Change it | ||
| here and in `packages/core/src/error-codes.ts` in the same edit. **There is no pin test yet** — | ||
| one belongs in `@ultimat3/cli` beside `single-line-pin.test.ts`, which may legally import both. | ||
| here and in `packages/core/src/error-codes.ts` in the same edit. **It is pinned `As of 2026-08-27`** | ||
| — `packages/core/src/single-line-pin.test.ts` asserts a `SchemaError`'s `docs` equals an | ||
| `UltimateError`'s, which was the one copy with no mechanical check at all and the one that decides | ||
| where every schema refusal sends its reader. | ||
| **These three are the whole of the duplication that remains, and the edge does not reach them.** | ||
| `core -> schema` was declared 2026-08-27 and collapsed five copies on the CORE side; `singleLine`, | ||
| `ERROR_DOCS_URL` and `ULTIMATE_ERROR_BRAND` go the other way, and `schema -> core` stays forbidden | ||
| on its merits — `t` is in every bundle graph an app has, so a dependency here is a dependency | ||
| everywhere. | ||
| `MoneyValue` in `money-value.ts` — its own file, because it is the only builtin whose *shape* other | ||
@@ -69,0 +79,0 @@ packages alias — is the framework's **one** declaration of a money value. Tier 0 is |
+3
-2
| { | ||
| "name": "@ultimat3/schema", | ||
| "version": "17.0.0", | ||
| "version": "18.0.0", | ||
| "description": "Ultimate's validation seam: Standard Schema interface, the t namespace, JSON Schema output", | ||
| "license": "MIT", | ||
| "type": "module", | ||
| "sideEffects": false, | ||
| "repository": { | ||
@@ -27,3 +28,3 @@ "type": "git", | ||
| "engines": { | ||
| "bun": ">=1.3.0" | ||
| "bun": ">=1.4.0" | ||
| }, | ||
@@ -30,0 +31,0 @@ "scripts": { |
+1
-0
@@ -94,2 +94,3 @@ // Single responsibility: the public API of @ultimat3/schema. Explicit named exports only. | ||
| export { t } from './t'; | ||
| export { isIanaZoneName } from './time-zone-name'; | ||
| export type { | ||
@@ -96,0 +97,0 @@ NumberSchema, |
@@ -1,6 +0,10 @@ | ||
| // Single responsibility: is a string an IANA zone NAME? Tier 0's second statement of the one rule | ||
| // Single responsibility: is a string an IANA zone NAME? TIER 0'S ONE STATEMENT of the rule | ||
| // `@ultimat3/time` enforces everywhere above it — a zone is `Area/Location`, and `UTC` is the one | ||
| // exception. It is stated a third time because `schema` is tier 0 and may import neither | ||
| // `@ultimat3/time` nor `@ultimat3/core`; `packages/time/src/zone-canonical.ts` is where the rule | ||
| // and its reasoning are written down. | ||
| // exception. `@ultimat3/core` imported its own copy of this predicate until 2026-08-27 and now | ||
| // re-exports this one, over the declared `core -> schema` edge. | ||
| // | ||
| // `@ultimat3/time`'s `canonicalTimeZone` is NOT a fourth copy and is deliberately left alone: it | ||
| // answers a different question (the canonical SPELLING, memoised over ~445 listed zones plus a | ||
| // probe cache) and shares only the leading-sign rule below. Collapsing it into this predicate | ||
| // would trade a cache a request header can hit for one it cannot. | ||
@@ -25,6 +29,5 @@ /** | ||
| * | ||
| * `@ultimat3/core`'s `isIanaZoneName` is the same predicate for `app.config.ts`. Nothing below | ||
| * tier 5 can compare the two, so `timezone-validator-pin.test.ts` in `@ultimat3/cli` is the | ||
| * mechanical half — the arrangement `schema-error-codes-pin.test.ts` already uses for tier 0's | ||
| * other deliberate duplicate. | ||
| * `@ultimat3/core` re-exports THIS function for `app.config.ts`, so the edge validator and the | ||
| * config validator are one predicate. They were two, held equal by a 123-line pin test in | ||
| * `@ultimat3/cli` that no rule required to exist. | ||
| * | ||
@@ -31,0 +34,0 @@ * Of the three copies this is the one that guards CALLER input: `t.timezone` is a request body |
124095
0.8%2210
0.18%