geonosis 3.1.0 → 3.3.0

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 CHANGED
@@ -1,5 +1,60 @@
1
1
  # geonosis
2
2
 
3
+ ## 3.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - fb08b28: The metapackage declares the `geonosis` command itself (#68). pnpm links only the bins of a direct dependency, so with `pnpm add -D geonosis` alone the documented door did not exist; `npx` found it only because npm hoists. `geonosis` now ships `bin/geonosis.mjs`, which runs `@geonosis/cli`'s command through its new `@geonosis/cli/bin` export, and answers exactly as the cli does.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [fb08b28]
12
+ - Updated dependencies [fb08b28]
13
+ - Updated dependencies [fb08b28]
14
+ - Updated dependencies [fb08b28]
15
+ - Updated dependencies [fb08b28]
16
+ - Updated dependencies [fb08b28]
17
+ - Updated dependencies [fb08b28]
18
+ - Updated dependencies [fb08b28]
19
+ - Updated dependencies [fb08b28]
20
+ - Updated dependencies [fb08b28]
21
+ - Updated dependencies [de03c7c]
22
+ - Updated dependencies [fb08b28]
23
+ - Updated dependencies [fb08b28]
24
+ - Updated dependencies [fb08b28]
25
+ - Updated dependencies [fb08b28]
26
+ - Updated dependencies [fb08b28]
27
+ - Updated dependencies [fb08b28]
28
+ - Updated dependencies [fb08b28]
29
+ - @geonosis/cli@3.3.0
30
+
31
+ ## 3.2.0
32
+
33
+ ### Minor Changes
34
+
35
+ - deef511: `geonosis-ledger shape lock --from <manifest>` validates a brief's manifest, resolves its red commit to a full hash and writes the runner-owned `.geonosis/brief.json`, a path the plugin refuses an agent's write to, so the engineer cannot loosen the lock it works under. `geonosis-ledger shape check [--brief <manifest>]` judges an engineer's diff against the RED commit a brief was committed as (D-072). The manifest names `ticket`, `red`, `files`, `locked` and optional `exports`; every path that differs from the red commit, committed, staged, unstaged or untracked, is judged. A locked test that was changed, deleted or moved, a file the manifest does not list, an exported name the red commit held and the file no longer exports, and an exported name neither the red commit nor `exports` names are each refused by path (exit 1); a body-only diff passes; a missing or malformed manifest, or a red commit the tree cannot diff against, is exit 2. New exports of `@geonosis/ledger`: `shapeCheck`, `lockManifest`, `readManifest`, `formatShape`, `MANIFEST_PATH`, `BriefManifest`, `ShapeOutcome`, `ShapeRefusal`. `@geonosis/ratchet` gains `exportedNamesOf(path, source)`, the sorted names a TypeScript or JavaScript source exports (types, destructured bindings, re-exports and `export *` included), read with the parser the counters use.
36
+ The plugin's Bash guard runs `shape check` on `git commit` while `.geonosis/brief.json` is present and refuses the commit with the lock's own lines; a lock that could not run lets the commit through and says so. The engineer definition says to start on the RED commit and that the shape lock is the gate, and the `geonosis-plan` skill says how to commit the applied brief and lock the manifest.
37
+ - deef511: A repo whose `geonosis.json → stack` is not TypeScript passes the doctor with a SKIP that names the language, and gets the method scaffolded without the TypeScript stack. `geonosis-doctor` SKIPs `exercised` as it already did `loaded` (`stack.language is "py"`, so there is no oxlint rule for a corpus to be asked to reach), and `drift` SKIPs, instead of warning "no manifest declares it", a `geonosis.json` block of a kit package in a repo with no package manifest at all; the doctor no longer refuses a tree with no `package.json` and no `.oxlintrc.json` as "nothing here to examine" when `geonosis.json` declares a stack oxlint does not read. `stack` gains `extensions` (`.py .pyi`), the files `stack.format` and `stack.parse` own: with it, the plugin formats only those with `stack.format`, and `pre-edit` and `post-bash` parse them with `stack.parse` (exit non-zero is a parse error; a parser that cannot run says nothing). `stack.parse` without `extensions` applies to no file. A repo with no `stack` behaves as before.
38
+ `create-geonosis <dir> --language py` writes a uv project (`pyproject.toml`, a package, a test), `geonosis.json` with the stack, three `fast` steps with plants and a `full` tier that proves and runs the ratchet (`ruff format --check`, `ruff check`, `pytest`), `LAW.md` from the new `pythonLawSummary` of `@geonosis/cli`, the two language-neutral counters and their baseline, the kit's rule files, `.claude/settings.json` and a CI workflow; it refuses `--runtime`, `--backend`, `--ui`, `--domains`, `--medusa`, `--themekit`, `--brand`, `--kit`, `--presets` and `--check` by name.
39
+
40
+ ### Patch Changes
41
+
42
+ - 5404b2a: Dependencies move to their newest release the install policy accepts: `@modelcontextprotocol/sdk` 1.32.1 (`@geonosis/mcp`), `oxc-parser` 0.153.0 (`@geonosis/ratchet`, `@geonosis/verify`), and the `squawk-cli` 2.68.0 that `@geonosis/release` and `geonosis` ask for as an exact optional peer, so the install line a refusal prints is `squawk-cli@2.68.0`. A scaffold written by `create-geonosis` pins `oxlint` ^1.87.0, `oxfmt` ^0.72.0, `vitest` ^5.0.3 and `@types/node` ^26.6.4.
43
+ - dd5f57a: The `geonosis` package ships `GROUP-CHANGELOG.md`: what one group version bought, every sentence any member carries once with the members that carry it. A member whose version heading held nothing of its own now points there instead of standing blank, which read as "nothing changed" (#356). `pnpm release:cut` writes both.
44
+ - Updated dependencies [f5632b7]
45
+ - Updated dependencies [dd5f57a]
46
+ - Updated dependencies [f5632b7]
47
+ - Updated dependencies [9b1ce78]
48
+ - Updated dependencies [a4a7bba]
49
+ - Updated dependencies [58eaf3a]
50
+ - Updated dependencies [58eaf3a]
51
+ - Updated dependencies [58eaf3a]
52
+ - Updated dependencies [58eaf3a]
53
+ - Updated dependencies [58eaf3a]
54
+ - Updated dependencies [deef511]
55
+ - Updated dependencies [58eaf3a]
56
+ - @geonosis/cli@3.2.0
57
+
3
58
  ## 3.1.0
4
59
 
5
60
  ### Patch Changes
package/README.md CHANGED
@@ -7,10 +7,11 @@ pnpm add -D geonosis # or: bun add -d geonosis
7
7
  npx geonosis --help
8
8
  ```
9
9
 
10
- That line installs `@geonosis/cli` and every gate it runs — the plugin, the doctor, the ratchet,
11
- verify, verify-arch, lint-parity, the ledger, release, review, testbed, observability, walk and
12
- visual-diff — all on the same version, because the whole group publishes as one fixed set. The
13
- commands come from the packages it pins; this package ships no bin of its own.
10
+ That line installs `@geonosis/cli` and every gate it runs — `@geonosis/base`, the helpers they
11
+ share, the plugin, the doctor, the ratchet, verify, verify-arch, lint-parity, the ledger, release,
12
+ review, testbed, observability, walk and visual-diff — all on the same version, because the whole
13
+ group publishes as one fixed set. The commands come from the packages it pins; this package ships no
14
+ bin of its own.
14
15
 
15
16
  `geonosis update --to <version>` bumps every pin in every workspace afterwards, in one command.
16
17
 
@@ -26,7 +27,7 @@ for everyone, whatever it is called.
26
27
  |---|---|---|
27
28
  | `playwright` | `@geonosis/walk` | `pnpm add -D playwright` · `bun add -d playwright` |
28
29
  | `posthog-node` | `@geonosis/observability` | `pnpm add -D posthog-node` · `bun add -d posthog-node` |
29
- | `squawk-cli` | `@geonosis/release` (postgres, mikro-orm-ts) | `pnpm add -D squawk-cli@2.66.0` |
30
+ | `squawk-cli` | `@geonosis/release` (postgres, mikro-orm-ts) | `pnpm add -D squawk-cli@2.68.0` |
30
31
 
31
32
  The peers everybody does pay for are `oxlint`, because every gate lints and oxlint is what loads the
32
33
  plugin, and `zod` and `better-result`, because `@geonosis/review` and `@geonosis/observability`
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bun
2
+ // Generated by pnpm generate:shims. In the kit's own tree src/ sits beside dist/, and a dist older
3
+ // than src once answered for a fix it did not carry (#62); a published package ships no src/.
4
+ import { existsSync } from 'node:fs'
5
+
6
+ if (existsSync(new URL('../src', import.meta.url))) {
7
+ const { guardBuild } = await import('../../../tooling/bin-guard.mjs')
8
+ guardBuild(new URL('..', import.meta.url), 'geonosis')
9
+ }
10
+
11
+ await import('../dist/geonosis.js')
@@ -0,0 +1,2 @@
1
+ // src/geonosis.ts
2
+ import"@geonosis/cli/bin";
@@ -1,44 +1,14 @@
1
- /**
2
- * What `geonosis` in a manifest actually brings, as data.
3
- *
4
- * The list is checked against the workspace by this package's own test rather than remembered,
5
- * because a metapackage is the one place where "we added a package and nobody updated the list" is
6
- * invisible from the outside: it installs whatever its dependency happens to depend on.
7
- */
8
1
  export declare const TOOLCHAIN: string[];
9
- /**
10
- * Published in the same fixed group and NOT installed by this one line: libraries a repo imports
11
- * from its own source, and the scaffolder, which is run with `npm create` rather than depended on.
12
- * They move on the same version, so `geonosis@1.4.0` still tells you which one to add.
13
- *
14
- * A FLOOR package is not here and cannot be: `@geonosis/events` versions on a line of its own
15
- * (D-053), so this number says nothing about which one to install.
16
- */
2
+ /** Floor packages are absent: each versions on its own line (D-053). */
17
3
  export declare const BY_NAME: string[];
18
- /**
19
- * A peer everybody pays for, and the reason. Anything not here is optional, and a command that
20
- * needs it refuses at run time with the install line rather than making every consumer carry it.
21
- *
22
- * Measured while this package was written, on a scratch consumer against a local registry: **bun
23
- * 1.4.0 installs a non-optional peer without being asked**, pnpm 11.8.0 does not. On the bun
24
- * consumer a required peer IS a dependency for everyone — which is what makes this list a cost and
25
- * not a note.
26
- */
4
+ /** bun 1.4.0 installs a non-optional peer unasked; pnpm 11.8.0 does not. */
27
5
  export declare const REQUIRED_PEERS: Record<string, string>;
28
6
  export type OptionalBinary = {
29
- /** The install line, in both managers' spellings. */
30
7
  install: string;
31
8
  name: string;
32
- /** The package that refuses without it, at run time, naming this line. */
33
9
  needs: string;
34
10
  why: string;
35
11
  };
36
- /**
37
- * #73 — `@geonosis/release` brought a pinned `squawk-cli` with platform binaries for three
38
- * architectures, and a Medusa storefront's lockfile grew 395 lines for a Postgres linter it had no
39
- * dialect for. One manifest line multiplies that by the whole group, so every binary that only some
40
- * consumers need is an OPTIONAL peer here and the command that wants it prints this line.
41
- */
12
+ /** #73: a pinned `squawk-cli` grew a Medusa storefront's lockfile by 395 lines. */
42
13
  export declare const OPTIONAL_BINARIES: OptionalBinary[];
43
- /** The line to print when a command refuses for want of a binary nobody was made to install. */
44
14
  export declare const installLineFor: (name: string) => string | undefined;
package/dist/toolchain.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/toolchain.ts
2
2
  var TOOLCHAIN = [
3
+ "@geonosis/base",
3
4
  "@geonosis/cli",
4
5
  "@geonosis/doctor",
5
6
  "@geonosis/ledger",
@@ -43,7 +44,7 @@ var OPTIONAL_BINARIES = [
43
44
  why: "the sink is one exporter among several, and a repo with no sink configured should not carry its client"
44
45
  },
45
46
  {
46
- install: "pnpm add -D squawk-cli@2.66.0 · bun add -d squawk-cli@2.66.0",
47
+ install: "pnpm add -D squawk-cli@2.68.0 · bun add -d squawk-cli@2.68.0",
47
48
  name: "squawk-cli",
48
49
  needs: "@geonosis/release",
49
50
  why: "the postgres and mikro-orm-ts migration dialects need it; a repo whose release.migrations names only sqlite needs none of it"
package/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "geonosis",
3
- "version": "3.1.0",
3
+ "version": "3.3.0",
4
4
  "types": "./dist/index.d.ts",
5
+ "bin": {
6
+ "geonosis": "bin/geonosis.mjs"
7
+ },
5
8
  "description": "One manifest line pins the whole toolchain: the geonosis CLI and every gate it runs, on one version.",
6
9
  "keywords": [
7
10
  "monorepo",
@@ -29,16 +32,17 @@
29
32
  },
30
33
  "files": [
31
34
  "CHANGELOG.md",
35
+ "bin",
32
36
  "dist"
33
37
  ],
34
38
  "dependencies": {
35
- "@geonosis/cli": "3.1.0"
39
+ "@geonosis/cli": "3.3.0"
36
40
  },
37
41
  "peerDependencies": {
38
42
  "oxlint": ">=1.77",
39
43
  "playwright": ">=1.40.0",
40
44
  "posthog-node": ">=5.49.0",
41
- "squawk-cli": "2.66.0"
45
+ "squawk-cli": "2.68.0"
42
46
  },
43
47
  "peerDependenciesMeta": {
44
48
  "playwright": {
@@ -54,6 +58,19 @@
54
58
  "engines": {
55
59
  "node": ">=22"
56
60
  },
61
+ "devEngines": {
62
+ "runtime": [
63
+ {
64
+ "name": "bun",
65
+ "version": "^1.4.2",
66
+ "onFail": "download"
67
+ },
68
+ {
69
+ "name": "node",
70
+ "onFail": "ignore"
71
+ }
72
+ ]
73
+ },
57
74
  "publishConfig": {
58
75
  "access": "public"
59
76
  },