create-geonosis 2.3.1 → 2.4.3

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,290 @@
1
+ # create-geonosis
2
+
3
+ ## 2.4.3
4
+
5
+ ### Patch Changes
6
+
7
+ - @geonosis/cli@2.4.3
8
+
9
+ ## 2.4.2
10
+
11
+ ### Patch Changes
12
+
13
+ - @geonosis/cli@2.4.2
14
+
15
+ ## 2.4.1
16
+
17
+ ### Patch Changes
18
+
19
+ - @geonosis/cli@2.4.1
20
+
21
+ ## 2.4.0
22
+
23
+ ### Patch Changes
24
+
25
+ - Updated dependencies [4962ed6]
26
+ - Updated dependencies [bef73fb]
27
+ - @geonosis/cli@2.4.0
28
+
29
+ ## 2.3.1
30
+
31
+ ### Patch Changes
32
+
33
+ - @geonosis/cli@2.3.1
34
+
35
+ ## 2.3.0
36
+
37
+ ### Minor Changes
38
+
39
+ - 3dac9a7: **`create-geonosis --plan <dir>` (#92, #98).** The hand-written adoption brief becomes a computed
40
+ report over the tree it is about: the files and keys `--check` reads as missing, the rules each
41
+ preset brings against the ones already enabled, the rules left out until somebody answers their
42
+ option, the counters, the tiers and the doors a block needs declared. Runtime and backend are read
43
+ off the lockfile and the manifests; a `packages/ui` with no `--ui` is refused rather than guessed,
44
+ because the tier decides which half of the rule set the plan proposes. Writes nothing.
45
+ - 3dac9a7: **A typecheck step that has been watched failing (#296).** The first step of every fast tier — the
46
+ kit's own and every scaffolded repo's — declared no plant, so it read `PASS (unproven)` for ever and
47
+ nobody asked which step for a week. A scaffolded tier now plants a type error into a workspace
48
+ `src/` and requires `TS2322`: unlike a lint rule it needs no preset, no option and no engine, so it
49
+ holds on any repo.
50
+
51
+ The scaffolded ratchet also gains one `testFailures` counter per workspace, running that
52
+ workspace's own test script and reading the report that script writes — the reports the scaffold
53
+ was already writing and nothing was reading.
54
+
55
+ ### Patch Changes
56
+
57
+ - 3dac9a7: `rulesFor` writes an answer for any rule the presets bring, not only for one that would refuse without it — an inert default is still a default the scaffold owns (D-031). The scaffold hands `no-runtime-dead-affordance` the same element→atom map it gives `no-raw-html-atoms`; the doctor over a scaffolded tree stops answering UNJUDGED for a control no probe could render.
58
+ - Updated dependencies [3dac9a7]
59
+ - Updated dependencies [3dac9a7]
60
+ - Updated dependencies [3dac9a7]
61
+ - Updated dependencies [3dac9a7]
62
+ - Updated dependencies [3dac9a7]
63
+ - Updated dependencies [3dac9a7]
64
+ - Updated dependencies [3dac9a7]
65
+ - Updated dependencies [3dac9a7]
66
+ - @geonosis/cli@2.3.0
67
+
68
+ ## 2.2.0
69
+
70
+ ### Minor Changes
71
+
72
+ - d15a654: **The scaffold installs its hooks, and a worktree does not fail the install (#271).** The scaffold
73
+ shipped `lefthook` and a `lefthook.yml` and nothing that installed the hooks — measured: the root
74
+ manifest declared no `prepare` at all. It writes one now, `scripts/install-hooks.mjs`, built for the
75
+ tree every Opus agent works in: a worktree's `.git` is a FILE and `git rev-parse --git-common-dir`
76
+ answers with the ORIGINAL checkout's, so hooks installed from inside a worktree land in the tree
77
+ somebody else is in. The installer skips there with the sentence saying where to install them
78
+ instead, says so when lefthook is not on disk yet, and never fails the install that ran it.
79
+ - d15a654: **A `--backend medusa` scaffold declares the engine its rules presume (#228, decided).** The scaffold
80
+ turned the Medusa rules on over a tree that declared no `@medusajs/*` anywhere, so the doctor's
81
+ `exercised` check WARNed nine times out of the box — nine rules with no possible finding, which read
82
+ exactly like a clean tree. The backend workspace now declares `@medusajs/framework` and
83
+ `@medusajs/medusa` at `^2.19.0`, the version the one Medusa consumer of this kit runs (measured
84
+ 2026-09-02), and `--medusa <range>` is how a repo on another one says so. `--kit` no longer drops a
85
+ workspace's third-party declarations along with the kit's own floors: an engine dropped there is an
86
+ engine the doctor cannot find. The scaffolded-doctor gate holds the Medusa shape at zero WARNs.
87
+
88
+ ### Patch Changes
89
+
90
+ - Updated dependencies [d15a654]
91
+ - Updated dependencies [d15a654]
92
+ - Updated dependencies [d15a654]
93
+ - Updated dependencies [d15a654]
94
+ - @geonosis/cli@2.2.0
95
+
96
+ ## 2.1.0
97
+
98
+ ### Patch Changes
99
+
100
+ - e0da9a3: **D-060 made mechanical, and the sweep it found (#220).** A published README or dist comment may name a consumer as the SOURCE of a pattern — that is attribution of the user's own products — and may not describe what is inside one. `tooling/provenance.ts` reads every publishable package's README and `dist/`, and fails on a consumer's name followed within the sentence by an internals noun (table, plane, column, schema, migration, incident, outage, postmortem, `apps/`, `packages/`) with no provenance phrase between them; the consumer names come from `geonosis.json`'s declared smoke snapshots, never from a list of its own — the kit's `no-brand-names` rule refuses a brand written into this repo, so a name enters that vocabulary only by being declared a consumer. It found nineteen sentences across nine packages — their file paths, their table and selector names, their line counts, their incident — and every one is reworded rather than stripped of its attribution.
101
+ - 849f72e: **A scaffolded tree earns no WARN of its own (#215).** `create-geonosis` and `geonosis init` left six out of the box, and a scaffold whose own doctor is dirty teaches every repo it makes that a WARN is scenery. The root now declares a `prove` script and the `full` tier names it when the root has one, so the counters are proved rather than only compared; `sync:graph` names the ledger bin the scaffold already runs, from the same one list `finish` runs it from; and `--kit` declares at the root exactly what a registry install would, instead of every package it linked so the bins resolve. Two of the six were the doctor contradicting itself: a `jsPlugins` entry is a caller with no bin to call — pnpm 11.8.0 resolves only DIRECT dependencies from a directory, so dropping that declaration is how a root config stops linting — and a `geonosis.json` block whose reader the declared door brings is read by something, which is the shape #177 asks a root to have.
102
+ - Updated dependencies [c1f894d]
103
+ - Updated dependencies [849f72e]
104
+ - Updated dependencies [f252d95]
105
+ - Updated dependencies [511b449]
106
+ - Updated dependencies [c54d6a9]
107
+ - @geonosis/cli@2.1.0
108
+
109
+ ## 2.0.0
110
+
111
+ ### Minor Changes
112
+
113
+ - 233b21d: `create-geonosis <dir> --check` says what an existing repo is missing of what the scaffold writes
114
+ today — files it never had and keys inside the JSON it has — and writes nothing. Contents and
115
+ values are never compared, and the sample workspaces are out of the question.
116
+ - e9a41a7: **One scaffold source, two doors (#198).** `geonosis init` and `create-geonosis` each built the
117
+ `verify` tiers from their own literals, so a repo's gates depended on which command had made it: one
118
+ door planted the lint proof and skipped the formatter, the other did the reverse. Both now write
119
+ from `tiersFor` in `@geonosis/cli`, and `build` / `format:check` are named only when the root
120
+ declares that script — `pnpm build` in a `create-geonosis` tree exits 1 with "Command build not
121
+ found". `tooling/one-scaffold-source.test.ts` runs both doors over one tree and reads the tiers back
122
+ through verify's own reader.
123
+ - 55fd4e3: **`--domains <a,b>` writes the composition root.** The app workspace gets `src/platform.ts` in the
124
+ two lifetimes it has: `definitionsOf` once per isolate — the emit door with `source` spelled ONCE
125
+ from runtime config (D-057) and the `@geonosis/db` session seam — and `inScope` per request, where
126
+ the tenant transaction opens FIRST and every domain store is built inside it, so a store that could
127
+ run outside the session that named its tenant does not exist to be held (D-014, structural). The
128
+ domains it takes are the ones the kit ships (`search` today); a name nothing publishes is refused
129
+ before a file is written. `--kit` links the floors too, and repoints the declaring workspace's
130
+ manifest rather than only the root's. `tooling/scaffolded-platform.test.ts` typechecks the generated
131
+ file in a scratch consumer with the workspace linked, through the real `tsc`.
132
+
133
+ ### Patch Changes
134
+
135
+ - 9c80a99: **`--check` sees the composition root.** Every file under a seeded workspace is skipped, because
136
+ `packages/core/src/money.ts` is a sample a repo is entitled to have thrown away. The composition
137
+ root is not: it is what `--domains` was asked for, and the file the doctor's uncomposed-battery line
138
+ sends a repo to write. A repo that asked for a domain and has no `src/platform.ts` is now named,
139
+ with the seeded sample beside it still out of the question.
140
+ - Updated dependencies [bcf0788]
141
+ - Updated dependencies [38889b1]
142
+ - Updated dependencies [35502e0]
143
+ - Updated dependencies [e9a41a7]
144
+ - Updated dependencies [539a96c]
145
+ - Updated dependencies [3258f5f]
146
+ - Updated dependencies [ccfc3c3]
147
+ - Updated dependencies [533f24d]
148
+ - Updated dependencies [6d14aa2]
149
+ - @geonosis/cli@2.0.0
150
+
151
+ ## 1.4.0
152
+
153
+ ### Patch Changes
154
+
155
+ - @geonosis/cli@1.4.0
156
+
157
+ ## 1.3.0
158
+
159
+ ### Minor Changes
160
+
161
+ - 2d1d841: **An unknown flag became `true` and vanished (#66).** Anything starting with `--` outside the valued
162
+ set was recorded as a switch nobody reads, so a misspelled `--runtim pnpm` refused with "--runtime is
163
+ required" and never named the typo. A flag in neither the valued set nor the switch set is now
164
+ refused by name, pointing at `--help`.
165
+
166
+ **It also answers `--print-config-shape` (#75)**, naming the files it writes and where to ask for each shape.
167
+
168
+ ### Patch Changes
169
+
170
+ - c340de0: **`drift`: a geonosis bin a git hook cannot start (#106).** dielime's first hooked commit was
171
+ "refused" on 2026-08-30 and the ledger never ran: a git hook's PATH is not the shell's — no nvm
172
+ shim, no corepack shim — so `pnpm` was not FOUND, and the sentence its author read was a version
173
+ manager's failure wearing a gate's refusal costume. That is the worst shape a gate has, because it
174
+ is indistinguishable from the gate working. The fix was one word: call
175
+ `./node_modules/.bin/geonosis-ledger` directly.
176
+
177
+ Every committed hook — `lefthook.yml`, `.husky/*`, `.githooks/*` — is now read, and a line running a
178
+ geonosis bin through `pnpm`, `npx`, `bunx` or `yarn` is a FAIL naming the direct call that replaces
179
+ it. A hook file naming no geonosis bin is a SKIP with the sentence, never a vacuous OK.
180
+
181
+ **And the hook `create-geonosis` writes follows its own rule.** It wrote `npx oxfmt` / `bunx oxlint`
182
+ into the `lefthook.yml` it scaffolds — the same shape, printed by the kit, into the file where it
183
+ breaks. Both lines are now `node_modules/.bin/…`, with the reason in a comment above them.
184
+ - Updated dependencies [0a7673c]
185
+ - @geonosis/cli@1.3.0
186
+
187
+ ## 1.2.0
188
+
189
+ ### Patch Changes
190
+
191
+ - @geonosis/cli@1.2.0
192
+
193
+ ## 1.1.0
194
+
195
+ ### Patch Changes
196
+
197
+ - Updated dependencies [7fca7b6]
198
+ - Updated dependencies [749239a]
199
+ - @geonosis/cli@1.1.0
200
+
201
+ ## 1.0.1
202
+
203
+ ### Patch Changes
204
+
205
+ - 1c2ee0b: **Every package ships its declarations and says where they are.** `@geonosis/visual-diff` and
206
+ `@geonosis/verify` emitted no `.d.ts` at all (TS7016 in a consumer: the comparator every visual test
207
+ calls became `any` at the one seam that decides whether a screenshot regressed), and no package
208
+ declared `types` — the nineteen that worked did so through the sibling-file fallback, which ends the
209
+ day `exports` gains a condition. Every export now carries a `types` condition beside `default`, every
210
+ manifest a `types` field, and `tooling/types.test.ts` holds all twenty-one to it after the build.
211
+
212
+ `geonosis-verify-arch` prints a check once when its label is its id ("direction, orphan", not
213
+ "direction direction").
214
+ - Updated dependencies [1c2ee0b]
215
+ - Updated dependencies [7dcae6a]
216
+ - @geonosis/cli@1.0.1
217
+
218
+ ## 1.0.0
219
+
220
+ ### Major Changes
221
+
222
+ - 75f613e: **`create-geonosis` — a third repo that passes its own gates on day one.** `create-geonosis <dir>
223
+ --runtime pnpm|bun --backend medusa|sagaflow-cf|none --ui tiered-shadcn|atoms-only|none` writes a
224
+ workspace with one catalog of shared versions, an `exports` map and no barrel in every package,
225
+ `typecheck` + `lint` + `test` in EVERY workspace (each asking vitest for its own JSON report), a law
226
+ under sixty lines, the five config files, a lefthook, a CI workflow with nothing switched off in it,
227
+ an empty skills lock and a `.claude/settings.json` that installs the plugin.
228
+
229
+ There is no default for the three answers that decide the shape of the tree. A default borrowed from
230
+ dielime or during.day would be one repo's stack hardcoded into every repo this ever writes.
231
+
232
+ - **The edges table is the one place the graph is written.** `docs/architecture.md` carries it, and
233
+ the scaffold runs `geonosis-ledger sync --target turbo` and `--target layer-walls` over it, so
234
+ turbo's boundaries and the linter's layers are generated from the same table and cannot drift.
235
+ - **The baseline starts at zero, except where zero would be a lie**: `lawLineCount` starts at the
236
+ measured length of the `CLAUDE.md` just written.
237
+ - **`lint-corpus/`** is a reach corpus in the new repo's own vocabulary, for the three rules whose
238
+ reach is repo-specific — `layer-walls`, `no-brand-names`, `plugin-route-namespaced` — because the
239
+ plugin's shipped corpus says `acme` and `layers/core` and is no evidence about anybody else.
240
+
241
+ `@geonosis/cli`'s `rulesFor` now takes a map of pre-built rule options instead of a brand, so `init`
242
+ and the scaffold answer the same question in one place. The plugin gains a `create` layer, walled
243
+ against every gate it configures; planted in `dogfood.test.ts`.
244
+ - f60a869: **The six defects the 1.0.0 reviews filed, before the release: two of them about being installable
245
+ at all, three about refusing honestly, one about counting a finding twice.**
246
+
247
+ `geonosis-review` read its command line OUTSIDE `main`'s try, so `--definitely-not-a-flag` reached
248
+ node uncaught: a stack trace and exit **1** — the one code the contract reserves for "the review was
249
+ read and REFUSED", so a caller branching on the code read a typo as a rejection. Parsing happens
250
+ inside now, every command-line mistake is 2 on one line, and the README's exit codes are a table
251
+ that says which is which (#50).
252
+
253
+ `@geonosis/testbed`'s `bin` named `dist/cli.js`, the only bin in the kit that pointed at a build
254
+ output. `pnpm install` links bins BEFORE anything is built, so a fresh clone printed
255
+ `Failed to create bin … ENOENT` and had no `geonosis-testbed` — including the copy `@geonosis/cli`
256
+ spawns for its `testbed` door. It has a committed `bin/geonosis-testbed.mjs` shim like every other
257
+ package, and `tooling/bins.test.ts` holds every `bin` entry to a file git carries (#51).
258
+
259
+ Two shims — `create-geonosis` and `geonosis-mcp` — were **committed at mode 644**. pnpm sets the
260
+ executable bit on the link it creates, so the mode was right everywhere except where it is kept, and
261
+ the flip only ever surfaced as an unrelated diff in somebody else's commit. Both are 755, and the
262
+ test reads the mode **git records**, which is the mode a clone gets (#52). Measured on this base:
263
+ `doctor` and `verify-arch`, the two the review named, were already executable.
264
+
265
+ `geonosis-testbed matrix` crashed on a malformed `testbed.matrix`: a block spelling `majors` as
266
+ `postgres` reached the renderer, which read `.length` off `undefined` — a TypeError at exit 1 for a
267
+ config error one line long. `readDbMatrix` checks the block first and refuses with **2**, naming
268
+ every wrong key at once (a missing one and an unknown one are two findings, and being told one at a
269
+ time means editing the file twice). Hand-rolled, not Zod: this package has no runtime dependencies
270
+ and a test that keeps it that way (#45).
271
+
272
+ `no-mock-db-in-integration` reported an imported handle **twice at one position**: an
273
+ ImportSpecifier's `imported` and its `local` are two nodes over the same span when nothing is
274
+ renamed. One report per place now — the corpus carries the fixture that shows it, and a finding
275
+ counted twice is a finding a ratchet counter banks twice (#46).
276
+
277
+ `geonosis-ledger sync --write` refused a config that did not already carry the fragment
278
+ (`"boundaries": no such key`), so the command whose job is to write the config could not write the
279
+ first one and hand-authoring the generated shape was the way in. It creates the key now — in a
280
+ `turbo.json` with no `boundaries`, in a config that has never named `layer-walls`, in a package with
281
+ no `no-restricted-imports`, and the `rules` object itself if that is missing too — and still writes
282
+ only that fragment. A rule is grown as `["error", { … }]`, the severity being the one thing no
283
+ generator can read off the table (#34).
284
+
285
+ ### Patch Changes
286
+
287
+ - Updated dependencies [88d7bf6]
288
+ - Updated dependencies [75f613e]
289
+ - Updated dependencies [40cc71c]
290
+ - @geonosis/cli@1.0.0
@@ -17,11 +17,25 @@ const newest = (dir) =>
17
17
  }, 0)
18
18
  : 0
19
19
  const src = join(here, '..', 'src')
20
- if (existsSync(src) && newest(src) > newest(join(here, '..', 'dist'))) {
21
- process.stderr.write(
22
- 'create-geonosis: dist is older than srcrun pnpm build before trusting this bin.\n',
23
- )
24
- process.exit(2)
20
+ const dist = join(here, '..', 'dist')
21
+ // `newest` answers 0 for a directory that is NOT THERE and for one that is merely old, so the
22
+ // two conditions were one comparison and one sentence and the staleness sentence was printed
23
+ // over trees that had never been built at all, blocking a turn in a fresh git worktree, which
24
+ // has no dist because dist is not committed (#357). Only the second is evidence of a mistake.
25
+ if (existsSync(src)) {
26
+ const built = newest(dist)
27
+ if (built === 0) {
28
+ process.stderr.write(
29
+ 'create-geonosis: this tree has never been built — run pnpm build. No dist here at all, which is what a fresh clone or a linked git worktree starts with; nothing is stale.\n',
30
+ )
31
+ process.exit(2)
32
+ }
33
+ if (newest(src) > built) {
34
+ process.stderr.write(
35
+ 'create-geonosis: dist is older than src — run pnpm build before trusting this bin.\n',
36
+ )
37
+ process.exit(2)
38
+ }
25
39
  }
26
40
 
27
41
  await import('../dist/create-geonosis-cli.js')
@@ -24,12 +24,25 @@ var SEARCH = {
24
24
  "import { pgFtsSearchIndex, type SearchIndex, type SearchProjections } from '@geonosis/search'"
25
25
  ],
26
26
  name: "@geonosis/search",
27
- version: "0.3.5"
27
+ version: "0.3.6"
28
28
  };
29
- var DOMAINS = [SEARCH];
29
+ var DOCUMENT = {
30
+ at: "domains/document",
31
+ built: [" document: DOCUMENT_ENTITIES,"],
32
+ declarations: [
33
+ "/** Every `Document.extend` this repo declares, by the name its rows carry \u2014 grow this map. */",
34
+ "const DOCUMENT_ENTITIES = documentEntities({})"
35
+ ],
36
+ field: "document",
37
+ fieldType: "ReturnType<typeof documentEntities>",
38
+ imports: ["import { documentEntities } from '@geonosis/document'"],
39
+ name: "@geonosis/document",
40
+ version: "0.1.0"
41
+ };
42
+ var DOMAINS = [SEARCH, DOCUMENT];
30
43
  var DOMAIN_NAMES = DOMAINS.map((one) => one.field);
31
44
  var FOUNDATIONS = [
32
- { at: "foundations/db", name: "@geonosis/db", version: "0.6.0" },
45
+ { at: "foundations/db", name: "@geonosis/db", version: "0.7.0" },
33
46
  { at: "foundations/events", name: "@geonosis/events", version: "2.1.0" }
34
47
  ];
35
48
  var domainsNamed = (named) => named.map((one) => {
@@ -408,7 +421,7 @@ var workspacesOf = (answers) => {
408
421
 
409
422
  // src/files.ts
410
423
  import { countersFor, LAW_SOURCE, rulesFor, tiersFor } from "@geonosis/cli";
411
- var VERSION = "2.3.1";
424
+ var VERSION = "2.4.3";
412
425
  var SCHEMA = "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxlint/configuration_schema.json";
413
426
  var CATALOG = {
414
427
  "@types/node": "^24.3.0",
@@ -11,7 +11,7 @@ import {
11
11
  parseArgs,
12
12
  wantsInstall,
13
13
  writeScaffold
14
- } from "./chunk-CT3CTASI.js";
14
+ } from "./chunk-PQVSQ44M.js";
15
15
 
16
16
  // src/create-geonosis-cli.ts
17
17
  import { existsSync as existsSync2 } from "fs";
package/dist/index.js CHANGED
@@ -23,7 +23,7 @@ import {
23
23
  wantsInstall,
24
24
  workspacesOf,
25
25
  writeScaffold
26
- } from "./chunk-CT3CTASI.js";
26
+ } from "./chunk-PQVSQ44M.js";
27
27
  export {
28
28
  BACKENDS,
29
29
  CORPUS_DIR,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-geonosis",
3
- "version": "2.3.1",
3
+ "version": "2.4.3",
4
4
  "types": "./dist/index.d.ts",
5
5
  "description": "Scaffold a microcompany repo that passes its own geonosis gates on day one.",
6
6
  "keywords": [
@@ -30,11 +30,12 @@
30
30
  }
31
31
  },
32
32
  "files": [
33
+ "CHANGELOG.md",
33
34
  "bin",
34
35
  "dist"
35
36
  ],
36
37
  "dependencies": {
37
- "@geonosis/cli": "2.3.1"
38
+ "@geonosis/cli": "2.4.3"
38
39
  },
39
40
  "engines": {
40
41
  "node": ">=22"