@marktiderman/genesis 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +53 -0
  2. package/package.json +7 -7
package/README.md CHANGED
@@ -28,3 +28,56 @@ Web bundlers never pull in React Native code unless a consumer explicitly
28
28
  imports `@marktiderman/genesis/native` — `react-native` is an optional peer
29
29
  dependency. Each granular package remains independently installable as an
30
30
  escape hatch for rare subpaths not mirrored here.
31
+
32
+ ## The Genesis version coordinate
33
+
34
+ `@marktiderman/genesis`'s own version is the **single canonical coordinate for
35
+ the whole Genesis system** — the one number that answers "which Genesis am I
36
+ on?" for a consuming repo. Pin one umbrella version and the entire set is
37
+ determined:
38
+
39
+ - **Sub-packages.** The umbrella depends on `@marktiderman/genesis-{core,ui,
40
+ design-system,switchboard,ui-native}` via `workspace:*`, which pnpm replaces
41
+ with the **exact** published version at pack time. So `@marktiderman/genesis@X`
42
+ resolves one reproducible, pinned set — not a caret range that drifts. Each
43
+ granular package keeps its own independent semver train; the umbrella version
44
+ is the coordinate that names a specific combination of them.
45
+ - **Vendored harness.** `scripts/harness/genesis-sync.sh` stamps
46
+ `GENESIS_SOURCE_VERSION` in a child's `.genesis/source` from this same umbrella
47
+ version (`GENESIS_SOURCE_SHA` stays the precise git-HEAD pointer). So a child's
48
+ harness stamp and its `@marktiderman/genesis` npm pin read the **same** number.
49
+ - **Plugin / marketplace.** `.claude-plugin/plugin.json`'s `version` tracks the
50
+ umbrella coordinate, kept in lockstep by `scripts/harness/sync-plugin-version.mjs`
51
+ (run automatically in the release "version packages" step).
52
+
53
+ The coordinate advances whenever any pinned sub-package is released. The deciding
54
+ option is changesets' `updateInternalDependents` (default `"out-of-range"`) — **not**
55
+ `updateInternalDependencies`: because the umbrella pins each sub-package via
56
+ `workspace:*`, which changesets resolves to the dependency's **exact** current
57
+ version, any sub-package release moves that dependency out of the umbrella's pinned
58
+ range, so `out-of-range` pulls the umbrella into the same release plan and bumps it.
59
+ (`updateInternalDependencies`, default `"patch"`, only sets the resulting bump
60
+ _type_ once the umbrella is already in the plan — it does not decide whether the
61
+ umbrella is bumped.) The `workspace:*` exact pin is what makes this automatic — a
62
+ caret range would let a patch stay in range and skip the umbrella — so `PKG-04`
63
+ enforces the exact pin. The release step then re-syncs the plugin stamp. One pinned
64
+ umbrella version therefore means every sub-component **and** the harness is already
65
+ "in the system," versioned and pinned together.
66
+
67
+ Because this auto-advance rests on a changesets **default** rather than an explicit
68
+ config key — a top-level `updateInternalDependents` is silently ignored in changesets
69
+ 2.30.0 (the option is read only from the `___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH`
70
+ namespace) — the invariant is made upgrade-safe two ways instead: `@changesets/cli` is
71
+ pinned to `~2.30.0` so a minor bump can't silently flip the default, and `PKG-05`
72
+ empirically re-asserts the umbrella auto-bump on every run (it drives changesets' own
73
+ release-plan assembly with a synthetic sub-package-only changeset). A future changesets
74
+ change that broke the coordinate would fail CI loudly instead of shipping silently.
75
+
76
+ **Caveat — the release-PR window.** The umbrella version bumps via a changesets
77
+ "version packages" PR, not on the feature-PR merge itself. So there is a brief,
78
+ transient window — feature PR merged, "version packages" PR not yet merged — where
79
+ `main`'s `packages/genesis/package.json` still carries the _previous_ umbrella version.
80
+ A child that runs `genesis-sync.sh` during that window stamps the new harness contents
81
+ with that previous version number. Nothing is silently lost: `GENESIS_SOURCE_SHA` (git
82
+ HEAD) is always exact and is the precise pointer; only the human-readable coordinate can
83
+ lag by one release until the "version packages" PR merges.
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@marktiderman/genesis",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
- "description": "Genesis — one-install umbrella for the Genesis DS. Re-exports @marktiderman/genesis-core, -ui, -design-system, -switchboard, and -ui-native (as /native) via subpath exports. Holds no code of its own; each granular package remains independently installable.",
7
+ "description": "Genesis — one-install umbrella and single version coordinate for the Genesis system. Re-exports @marktiderman/genesis-core, -ui, -design-system, -switchboard, and -ui-native (as /native) via subpath exports and exact-pins each to a reproducible set. Holds no code of its own; each granular package remains independently installable.",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/marktiderman/genesis.git",
@@ -68,11 +68,11 @@
68
68
  }
69
69
  },
70
70
  "dependencies": {
71
- "@marktiderman/genesis-core": "^1.0.0",
72
- "@marktiderman/genesis-ui": "^1.1.1",
73
- "@marktiderman/genesis-design-system": "^1.0.0",
74
- "@marktiderman/genesis-switchboard": "^1.0.0",
75
- "@marktiderman/genesis-ui-native": "^2.0.0"
71
+ "@marktiderman/genesis-core": "1.0.0",
72
+ "@marktiderman/genesis-ui": "1.2.0",
73
+ "@marktiderman/genesis-design-system": "1.1.0",
74
+ "@marktiderman/genesis-switchboard": "1.0.0",
75
+ "@marktiderman/genesis-ui-native": "2.0.1"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "react": "^19.0.0",