From c015e2d4027b50d14bb60e4fc10b1fc233d82842 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 22 Jun 2026 15:11:55 +0000 Subject: [PATCH 1/5] deps: update aontu to GitHub main for both languages Track aontu main (commit 529f8eca) ahead of the npm/Go releases. aontu's dependency stack moved from jsonicjs/* to @tabnas/*. - go: aontu/go v0.1.3 -> main pseudo-version (v0.1.4-0.20260622134345-529f8eca01f5); go.sum + indirect deps follow the @tabnas/* migration. Build/vet/test clean. - ts: aontu 0.46.0 -> 0.47.0 from main. The npm package lives in a monorepo subdir, so it is vendored as ts/vendor/aontu-0.47.0.tgz (npm pack) and referenced via file:. Whitelisted in .gitignore against the global *.tgz rule. - ts: aontu's parser is now @tabnas/jsonic; the CLI bin required the hoisted-transitive jsonic, which is gone. Add @tabnas/jsonic as an explicit dependency and require it directly. - docs: AGENTS.md documents the vendored-tarball convention and how to bump. make build clean; make test green (TS 22/22, Go all pass). --- .gitignore | 2 ++ AGENTS.md | 12 ++++++++++++ go/go.mod | 14 ++++++++------ go/go.sum | 30 ++++++++++++++++++------------ ts/bin/voxgig-model | 2 +- ts/package.json | 7 ++++--- ts/vendor/aontu-0.47.0.tgz | Bin 0 -> 139875 bytes 7 files changed, 45 insertions(+), 22 deletions(-) create mode 100644 ts/vendor/aontu-0.47.0.tgz diff --git a/.gitignore b/.gitignore index d95345e..d247aec 100644 --- a/.gitignore +++ b/.gitignore @@ -64,6 +64,8 @@ typings/ # Output of 'npm pack' *.tgz +# ...except the vendored aontu build (tracks aontu GitHub main; not yet on npm) +!ts/vendor/*.tgz # Yarn Integrity file .yarn-integrity diff --git a/AGENTS.md b/AGENTS.md index e96b2e2..bba536c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -92,6 +92,18 @@ Go **1.24+** is required (the `aontu/go` dependency declares `go 1.24.7`). 5. **Generated test fixtures go in `ts/test/_gen/`** (gitignored). Tests write their own fixtures there at runtime; do not commit them. +6. **`aontu` tracks GitHub `main` via a vendored tarball.** The npm package + lives in a monorepo subdir (`rjrodger/aontu` → `ts/`), which npm cannot + install from git, and `main` is ahead of the npm release. So + `ts/vendor/aontu-.tgz` is committed (whitelisted in `.gitignore` + against the global `*.tgz` rule) and referenced as + `"aontu": "file:vendor/aontu-.tgz"`. To bump: `git clone` aontu at + the target commit, `npm pack` its `ts/`, drop the new `.tgz` in + `ts/vendor/` (remove the old one), update the `file:` ref, then + `npm install && npm run build && npm test`. aontu's parser is + `@tabnas/jsonic`; the CLI bin requires it directly (an explicit dep, since + it is no longer hoisted transitively). + ## The Go port diff --git a/go/go.mod b/go/go.mod index c34dd17..445b1fb 100644 --- a/go/go.mod +++ b/go/go.mod @@ -2,12 +2,14 @@ module github.com/voxgig/model/go go 1.24.7 -require github.com/rjrodger/aontu/go v0.1.3 +require github.com/rjrodger/aontu/go v0.1.4-0.20260622134345-529f8eca01f5 require ( - github.com/jsonicjs/directive/go v0.1.4 // indirect - github.com/jsonicjs/expr/go v0.1.3 // indirect - github.com/jsonicjs/jsonic/go v0.1.22 // indirect - github.com/jsonicjs/multisource/go v0.1.6 // indirect - github.com/jsonicjs/path/go v0.1.2 // indirect + github.com/tabnas/directive/go v0.2.0 // indirect + github.com/tabnas/expr/go v0.2.0 // indirect + github.com/tabnas/json/go v0.2.0 // indirect + github.com/tabnas/jsonic/go v0.2.0 // indirect + github.com/tabnas/multisource/go v0.3.0 // indirect + github.com/tabnas/parser/go v0.2.0 // indirect + github.com/tabnas/path/go v0.2.0 // indirect ) diff --git a/go/go.sum b/go/go.sum index c1f1ed7..85ca17c 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,12 +1,18 @@ -github.com/jsonicjs/directive/go v0.1.4 h1:K7ai2ccoh8d23mjCK8/YMjEDbzb6+jWcepOL3YubpKo= -github.com/jsonicjs/directive/go v0.1.4/go.mod h1:PMjJ3EulIhdo1R0o9bOUvSUOTCPvM/xCzo1O35VBiXs= -github.com/jsonicjs/expr/go v0.1.3 h1:D7x+5AIM/CLX6A6VUiHBzfvRxufuGzXYB6gmPb1lv+A= -github.com/jsonicjs/expr/go v0.1.3/go.mod h1:6kmd1o4p4/FL4DVuCxwYAqX5YRYjF20hbIrHQM81Qoc= -github.com/jsonicjs/jsonic/go v0.1.22 h1:sam238fTyjDq0nby9TYS+aCCHprLl91ArQPWLCg2O0Y= -github.com/jsonicjs/jsonic/go v0.1.22/go.mod h1:ObNKlCG7esWoi4AHCpdgkILvPINV8bpvkbCd4llGGUg= -github.com/jsonicjs/multisource/go v0.1.6 h1:FGOySI7hmFjsmcI/mbnBF04DFFOb5FqR2fOydOCoSuA= -github.com/jsonicjs/multisource/go v0.1.6/go.mod h1:XzgM6nuW2MOAsVySsGtpp7fWSx9PTCXd4eIRSCAA/6o= -github.com/jsonicjs/path/go v0.1.2 h1:Pk7PZIiRq64iodssEVtaJw+4jHiJe84aFtmKDUasXAo= -github.com/jsonicjs/path/go v0.1.2/go.mod h1:ffXuSMg950pdfU3wapeK6QnyvZrV5yHFSj4ifwmsgmU= -github.com/rjrodger/aontu/go v0.1.3 h1:jEMxKpN8C7ijCaFCmXCL8r3YI7wtvYkeyVGYSbO4pCw= -github.com/rjrodger/aontu/go v0.1.3/go.mod h1:wvCO27yvs2Rdr8bLD/hEn4e0+Qxz6rQImkhC3y8lgzc= +github.com/rjrodger/aontu/go v0.1.4-0.20260622134345-529f8eca01f5 h1:+L9Chn8R8o7G4Ibhg/jOt/ACyHeeH4XoQNWu2xqXJZY= +github.com/rjrodger/aontu/go v0.1.4-0.20260622134345-529f8eca01f5/go.mod h1:8Zr5tBVyW8/U+rwknohvMetWE54P1tRHixT8WEP+c1w= +github.com/tabnas/debug/go v0.2.0 h1:7NvwsdMdv0h/AS0lqxe1Fj3i+GzC4CDsRCND222YYI8= +github.com/tabnas/debug/go v0.2.0/go.mod h1:ScInhnXqJuXIiVuCCrLiX6R7sMhmviUk3535FJgnoi4= +github.com/tabnas/directive/go v0.2.0 h1:d9tzwQG2fyJ3W1l4kTHPjWYmqLf9QzRndU+uQOV1icI= +github.com/tabnas/directive/go v0.2.0/go.mod h1:NCXUWyi24dYonJV0V8MUzCNNb46jaNNKRAah22AzCTc= +github.com/tabnas/expr/go v0.2.0 h1:cS/t6B8ieRYUYPjyqTXs9ou3gmiRnV31MuAZ81RXiCc= +github.com/tabnas/expr/go v0.2.0/go.mod h1:aDMV8YKvH8pkilgHVqtFWSrOc/YBfMN3dBOzrY63vDI= +github.com/tabnas/json/go v0.2.0 h1:M2T6kMOHp7NGP48VoLKX9nvDNXibxgMHdvXgoD29jQw= +github.com/tabnas/json/go v0.2.0/go.mod h1:YrCYGqqvz3RWi2Rq9nzuTRf8YGvvNTeEbhmTT0394io= +github.com/tabnas/jsonic/go v0.2.0 h1:AHMrfPQ/NvB+2fxQT26byzNMTYC6a5C6fPoK8SuJLf8= +github.com/tabnas/jsonic/go v0.2.0/go.mod h1:u8tWdcVasozUrbHddZrj5qMPq0WwQ3Q4aDbjxhaSkhE= +github.com/tabnas/multisource/go v0.3.0 h1:wHvr2IU9ZlP760TAyZpm7AfzTZHLpX5ryXaVZ+sMZEs= +github.com/tabnas/multisource/go v0.3.0/go.mod h1:1jwWdrNmfu2KqYgfP5gkQcj9G6i/2TTKZFL4MqqJfFo= +github.com/tabnas/parser/go v0.2.0 h1:jpnX0kXTCX/1EKnL242UYhVcNVCdFq8JN54BNrz8nTg= +github.com/tabnas/parser/go v0.2.0/go.mod h1:WrlfEVyZ1QjEIowWiyEu3K1iHj7wxuPut5zoH9Trehk= +github.com/tabnas/path/go v0.2.0 h1:WQ3Wep8tD5KHl5nu3M6zYE3zODRJxxaa+FbXAJF3Uz0= +github.com/tabnas/path/go v0.2.0/go.mod h1:BX3CmO21Rhno8DxJnWMXNc9hlqoV1cmuG6efI7QZIio= diff --git a/ts/bin/voxgig-model b/ts/bin/voxgig-model index 6c286b6..dd07cf9 100755 --- a/ts/bin/voxgig-model +++ b/ts/bin/voxgig-model @@ -7,7 +7,7 @@ const Path = require('node:path') const Pkg = require('../package.json') const { Model, initModel } = require('../dist/model.js') -const { Jsonic } = require('jsonic') +const { Jsonic } = require('@tabnas/jsonic') const { Shape, Fault, One, Any } = require('shape') diff --git a/ts/package.json b/ts/package.json index f56903b..b09c807 100644 --- a/ts/package.json +++ b/ts/package.json @@ -43,10 +43,11 @@ "LICENSE" ], "dependencies": { - "aontu": "0.46.0", + "@tabnas/jsonic": "0.2.0", + "aontu": "file:vendor/aontu-0.47.0.tgz", "chokidar": "5.0.0", - "shape": "10.1.0", - "memfs": "4.57.6" + "memfs": "4.57.6", + "shape": "10.1.0" }, "peerDependencies": { "@voxgig/util": ">=0", diff --git a/ts/vendor/aontu-0.47.0.tgz b/ts/vendor/aontu-0.47.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cc546827c434488a015c72e0ab3deae1bbab1976 GIT binary patch literal 139875 zcmV)6K*+xziwFP!00002|Lnc}THMIhFPgu(in5dAR*!`mus!oW%@D%i_6&&)ynrXk zVK}%@S2r5elA=;K5X^q|MeHlwS8|@UR+UsGmAV@b<0S9cPcpQm`dIb7YJL1x#=|Q< z7QMH7yMz7X!S8;Je`{-NU%!0GT<_P`);89@e#w6K;?>t{>+4^Cz4ns*Zf$*S!`R)rv=M}Eb=IXGJF;#VLTlI4f=B& zO(InTWXDdBD@DqtQus)x&nD?G8o^(I&B~@1aU?H&HjJR?i)kTzCgCOarVs7tr8$!# zj#t7oi-cs@)`~hz1Egorp@r%q32&}1(}~@ZNUn^gc@oJ>fq8~0lPT8tvj_`#1Ib5e z9H-aNv@lJE5wuA5S5{6g1>+a#Oki7RjFYs8Lh5cDfUFu-^+{gxIA#|@b(k2kC}G@a zP7c+}f+t19W0s{k)>m(4u(ERU!+;$hygB*n&e4GF9kauugCF-^4_>pUJI8GA_^HqS zx_9!!!TS^T*PWxIo&A%)vx7HmXaDc)FMIp1eKz>p;nCpum>nFg?7cgDyEl04v%US@ zx9?x??SId{dw;_A4^G(Iy?1*jgV*fjfI)?-sJ+246!va#wEM%({>jdFdvEtn{_d~5 z**n>XGT$5=u^o1}b9Az|`~L0D5j%W;ba-$)U_1M-+5W-)-u|1Tz5VY8?*{uP0o&VW z`v+|B<6!@U9sjWN_AOMkvh)7rhl3-akL?~D{{3k0`yWo&4+n2w4~~x6cLVlzZ|A$W z1FCBO?`-$&&fYtpz214Z^ZfvG9i03yI9h>ZL>>F<4+D4w_3iAlo!yhYgMDbm?!o@a z(a!FP&rS}GPRgu*-8&xmZ0Bh27&_$5(ZM@^1-kR#4J6syhkW}3Dh0ZlStD|AgwOAf z2W5fm^7Sb`VVcN-#XK3G zufqrNk7<+(?`hD3cTc;U3)>BpVv9vGors)Y#H!go8;hdPM$-hD66ST;9m_>A%@b82 zwsMo*V+Ro>(tz~Z&7udlq^#ebjdpWHp4SN!dA@Wn<79m>Wmu^(+e?ySE+wOxeYe6G zV@PB^4U07QvNS7XSABqg!0iR_l5H{k$hNoH-TkJWAf`2zh--5`dS&J=rN77j_IhkL z7rYRRV~&ufKtRM4H(odzn#D;t2!KwgOQ|f@MC+sA~zUGBOwk04;6{c>4#NT z=~Wl(B|E-APBr_`a{p= zA+9Hrjt(4-$+*LwY;CdPHWTT{MH5^ix0tu)t3^8DS7JYk2YKH0c<8eZcFp+(AD+uR z>=>26Kj?!Xo61WsofchJyMUB6wzaiIX=9O$i%T~V`uL)8DAzI$#%4WzFcg`@F2i5; zcOC|LnnIb@s8v*5@?;nb+>4|Kg!z!NR+CzJWfA4ldymssExj~{S?a6QBp(<}vu zIa~vnl@`%2o@I|ZRiKV+#^Xns#MZpqnmg~HPPRo2Fh+fv(D^g0jYU<5h^4@afRJa; zpzI)$Kk~Sx2APMg#XN8+5EqlApS}{XU!QCdZO@*ug)1Yby;~g?ij4|z0(wwLZJprw zIw)gXkT(!{zUgQ(e9A>_4Vlvbnp7j~VI7tWS?{o=H-}m~PSa^|)-39NrTxj+E}+jG z8wR8hIdb87{&_c(@AVOwPK#_>Fk*kExnQF_ov2;LXV;fec*!PHSf;b&}ot=aIllQCN5B3K~J12wH_do8u?f6)FU~sbP&4lMyUFRCGTQs#= zG+o>xV~(!re+!Y#Kwt;%

tr5 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 tW77bY{v_^$bmO8d`ltQl Date: Mon, 22 Jun 2026 15:15:20 +0000 Subject: [PATCH 2/5] deps: bump aontu/go to main c74b91f New pushes to aontu main since 529f8eca only touched the Go side; the TS package (ts/vendor/aontu-0.47.0.tgz) is byte-identical and unchanged. - go: aontu/go main pseudo-version -0.20260622134345-529f8eca01f5 -> -0.20260622151248-c74b91f166cb - ts: no change (vendored tarball identical) make test green (TS 22/22, Go all pass); gofmt/vet clean. --- go/go.mod | 2 +- go/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go/go.mod b/go/go.mod index 445b1fb..ac4d6d8 100644 --- a/go/go.mod +++ b/go/go.mod @@ -2,7 +2,7 @@ module github.com/voxgig/model/go go 1.24.7 -require github.com/rjrodger/aontu/go v0.1.4-0.20260622134345-529f8eca01f5 +require github.com/rjrodger/aontu/go v0.1.4-0.20260622151248-c74b91f166cb require ( github.com/tabnas/directive/go v0.2.0 // indirect diff --git a/go/go.sum b/go/go.sum index 85ca17c..7483186 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,5 +1,5 @@ -github.com/rjrodger/aontu/go v0.1.4-0.20260622134345-529f8eca01f5 h1:+L9Chn8R8o7G4Ibhg/jOt/ACyHeeH4XoQNWu2xqXJZY= -github.com/rjrodger/aontu/go v0.1.4-0.20260622134345-529f8eca01f5/go.mod h1:8Zr5tBVyW8/U+rwknohvMetWE54P1tRHixT8WEP+c1w= +github.com/rjrodger/aontu/go v0.1.4-0.20260622151248-c74b91f166cb h1:6KnptJbTI5YVUBF7TTaZpYpVnL49rorUchZjcN5mUlQ= +github.com/rjrodger/aontu/go v0.1.4-0.20260622151248-c74b91f166cb/go.mod h1:8Zr5tBVyW8/U+rwknohvMetWE54P1tRHixT8WEP+c1w= github.com/tabnas/debug/go v0.2.0 h1:7NvwsdMdv0h/AS0lqxe1Fj3i+GzC4CDsRCND222YYI8= github.com/tabnas/debug/go v0.2.0/go.mod h1:ScInhnXqJuXIiVuCCrLiX6R7sMhmviUk3535FJgnoi4= github.com/tabnas/directive/go v0.2.0 h1:d9tzwQG2fyJ3W1l4kTHPjWYmqLf9QzRndU+uQOV1icI= From 3a77121032ccf314f19bb7838765c060108894d9 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 22 Jun 2026 16:53:15 +0000 Subject: [PATCH 3/5] feat: make model-config optional Running any model previously forced the .model-config machinery: the Model constructor auto-created .model-config/model-config.jsonic, ran a config build, and that build triggered the model build. Add an opt-out so a model can be built on its own. - ts: ModelSpec.config (default true). When false, Model skips makeConfig, omits config from build.use, and run/start/stop bypass the config build. local_producer guards an absent config (no actions). CLI gains --no-config. - go: ModelSpec.Config *bool (nil = enabled, parity with TS optional flag). New skips newConfig when disabled; Run/Start/watch.reload guard nil config; actionOrder already falls back to spec.Order / registry. CLI gains -no-config. - tests: TS (extra: skips config + ignores existing config file; cli: --no-config) and Go (config: disabled skips creation, ignores file/uses Order; cli: -no-config). 25/25 TS, all Go pass. - docs: reference.md (CLI flag, ModelSpec, config-file section), explanation.md (optional config build), AGENTS.md (the optional-config convention). - Rebuilt ts/dist and ts/dist-test. --- AGENTS.md | 6 +++ docs/explanation.md | 6 +++ docs/reference.md | 16 +++++++- go/cmd/voxgig-model/main.go | 5 ++- go/cmd/voxgig-model/main_test.go | 17 +++++++++ go/config_test.go | 64 ++++++++++++++++++++++++++++++++ go/model.go | 44 ++++++++++++++-------- go/types.go | 7 ++++ ts/bin/voxgig-model | 16 ++++++-- ts/dist-test/cli.test.js | 13 +++++++ ts/dist-test/cli.test.js.map | 2 +- ts/dist-test/extra.test.js | 39 +++++++++++++++++++ ts/dist-test/extra.test.js.map | 2 +- ts/dist/model.d.ts | 2 +- ts/dist/model.js | 23 +++++++++--- ts/dist/model.js.map | 2 +- ts/dist/producer/local.js | 4 +- ts/dist/producer/local.js.map | 2 +- ts/dist/types.d.ts | 1 + ts/src/model.ts | 26 +++++++++---- ts/src/producer/local.ts | 4 +- ts/src/types.ts | 4 ++ ts/test/cli.test.ts | 22 +++++++++++ ts/test/extra.test.ts | 52 ++++++++++++++++++++++++++ 24 files changed, 339 insertions(+), 40 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index bba536c..1918d10 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -118,6 +118,12 @@ semantics match TypeScript. Two things differ by necessity: runtime, so the action *functions* are registered programmatically via `ModelSpec.Actions` (`map[string]ActionDef`) and bound to the config-declared names — see `go/producer.go`. +- **The config build is optional.** It is on by default; disable it with + `ModelSpec.config: false` (TS) / `ModelSpec.Config *bool` (Go, `nil` = on) + or the `--no-config` CLI flag. Disabled, the `Model` skips the config build + entirely (no `.model-config/` auto-creation, no actions) and builds the + model alone. Go's `Config` defaults to enabled via a `*bool` because the + bool zero value is `false`; keep TS and Go defaults in step. - **Watching polls modification times** (`go/watch.go`) rather than using chokidar. diff --git a/docs/explanation.md b/docs/explanation.md index 05d3e1a..02ab57d 100644 --- a/docs/explanation.md +++ b/docs/explanation.md @@ -161,6 +161,12 @@ An internal trigger producer on the config build kicks off the model build, so the two stay in step. In watch mode both the model's sources and the config's sources are watched, and a change to either rebuilds the model. +The config build is **optional**. When a `Model` is created with `config: false` +(or the CLI is run with `--no-config`), only the model build runs: nothing is +auto-created under `.model-config/`, no actions are declared or run, and the +model JSON is still written. This suits cases where you only want the unified +model — for example, generating `model.json` for another tool to consume. + ## Watching and incremental rebuilds diff --git a/docs/reference.md b/docs/reference.md index f60e541..b262f54 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -37,6 +37,7 @@ generated model JSON is written next to the root file. | `--debug ` | `-g` | string | `info` | Log level: `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `silent`. | | `--dryrun` | `-y` | boolean | `false` | Resolve and run the build, but redirect all file writes to an in-memory filesystem (nothing touches disk). | | `--build ` | `-b` | string | `''` | A [jsonic](https://github.com/jsonic-lang/jsonic) document of build arguments, exposed to actions as `build.args`. | +| `--no-config` | | boolean | `false` | Skip the `.model-config` build entirely: nothing is auto-created, no config-declared actions run, and the model is built on its own. | | `--help` | `-h` | boolean | | Print usage and exit. | | `--version` | `-v` | boolean | | Print version and exit. | @@ -59,6 +60,9 @@ voxgig-model --dryrun model/model.jsonic # Pass build arguments to actions voxgig-model -b '{env:prod, region:eu-west-1}' model/model.jsonic + +# Build the model alone, without the .model-config machinery +voxgig-model --no-config model/model.jsonic ``` ### `init` — scaffold a new model @@ -115,6 +119,12 @@ directory below the project root (e.g. `model/model.jsonic`). during a build. If it does not exist, the `Model` constructor creates a minimal one that imports the package's base config. +The config is **optional**. Pass `config: false` to `ModelSpec` (or `--no-config` +on the CLI) to skip it entirely: no `.model-config/` is created, no actions are +loaded or run, and the model is built on its own (the model JSON is still +written). In the Go API the field is `ModelSpec.Config *bool` — `nil` defaults to +enabled, a pointer to `false` disables it. + The config is itself a model, unified the same way as your main model. The keys the tool reads: @@ -289,6 +299,7 @@ interface ModelSpec { buildargs?: any // build arguments, exposed as build.args debug?: boolean | string // log level (string) or true => 'debug' dryrun?: boolean // redirect writes to an in-memory fs + config?: boolean // resolve .model-config (default true); false skips it idle?: number // watch debounce in ms (default 111) fs?: any // a custom fs implementation (e.g. memfs) log?: Log // a pre-built pino logger @@ -476,7 +487,7 @@ A single build (`Build.run`) proceeds as: 5. **post phase** — run every producer with `ctx.step = 'post'`. 6. **result** — return a `BuildResult` with `ok`, `producers`, `errs`, `runlog`. -A `Model` orchestrates **two** builds: +A `Model` orchestrates up to **two** builds: - The **config build** resolves `.model-config/model-config.jsonic` (writing `model-config.json`) and, via an internal trigger producer, drives the main @@ -487,6 +498,9 @@ A `Model` orchestrates **two** builds: In watch mode both the model's source files and the config's source files are watched; a change to either rebuilds the model. +When config is disabled (`config: false` / `--no-config`), the config build is +omitted: the model build runs directly and no config files are watched. + See [explanation](./explanation.md) for the reasoning and the caching and watch designs in depth. diff --git a/go/cmd/voxgig-model/main.go b/go/cmd/voxgig-model/main.go index 3362e2c..688ac49 100644 --- a/go/cmd/voxgig-model/main.go +++ b/go/cmd/voxgig-model/main.go @@ -36,8 +36,9 @@ func run(args []string, stderr io.Writer) int { watch := fs.Bool("w", false, "watch and rebuild on change") dryrun := fs.Bool("y", false, "dry run (write nothing to disk)") level := fs.String("g", "info", "log level: trace|debug|info|warn|error|silent") + noConfig := fs.Bool("no-config", false, "skip the .model-config build and run the model on its own") fs.Usage = func() { - fmt.Fprintln(stderr, "usage: voxgig-model [-w] [-y] [-g level] ") + fmt.Fprintln(stderr, "usage: voxgig-model [-w] [-y] [-g level] [-no-config] ") fs.PrintDefaults() } if err := fs.Parse(args); err != nil { @@ -60,10 +61,12 @@ func run(args []string, stderr io.Writer) int { return 1 } + enableConfig := !*noConfig m := model.New(model.ModelSpec{ Path: abs, Base: filepath.Dir(abs), Dryrun: *dryrun, + Config: &enableConfig, Log: model.NewLog(*level), }) diff --git a/go/cmd/voxgig-model/main_test.go b/go/cmd/voxgig-model/main_test.go index a11a55a..87e38b4 100644 --- a/go/cmd/voxgig-model/main_test.go +++ b/go/cmd/voxgig-model/main_test.go @@ -31,6 +31,23 @@ func TestCLIWritesModel(t *testing.T) { } } +func TestCLINoConfigSkipsConfig(t *testing.T) { + dir := t.TempDir() + root := filepath.Join(dir, "m.jsonic") + write(t, root, "a: 1\n") + + var out bytes.Buffer + if code := run([]string{"-no-config", "-g", "silent", root}, &out); code != 0 { + t.Fatalf("exit %d: %s", code, out.String()) + } + if _, err := os.Stat(filepath.Join(dir, "m.json")); err != nil { + t.Fatalf("model JSON not written: %v", err) + } + if _, err := os.Stat(filepath.Join(dir, ".model-config")); !os.IsNotExist(err) { + t.Fatal("-no-config should not create .model-config") + } +} + func TestCLIDryrunWritesNothing(t *testing.T) { dir := t.TempDir() root := filepath.Join(dir, "m.jsonic") diff --git a/go/config_test.go b/go/config_test.go index 88ef8bd..5e5f5dc 100644 --- a/go/config_test.go +++ b/go/config_test.go @@ -29,6 +29,70 @@ func TestConfigAutoCreated(t *testing.T) { } } +// With config disabled, New skips the .model-config build entirely: nothing is +// auto-created, Config() is nil, but the model is still written. +func TestConfigDisabled(t *testing.T) { + dir := t.TempDir() + writeFile(t, dir, "model.jsonic", "x: 1\n") + + disabled := false + m := New(ModelSpec{ + Path: filepath.Join(dir, "model.jsonic"), + Base: dir, + Config: &disabled, + }) + if br := m.Run(); !br.OK { + t.Fatalf("run failed: %v", br.Errs) + } + if _, err := os.Stat(filepath.Join(dir, ".model-config")); !os.IsNotExist(err) { + t.Fatalf(".model-config should not be created when config is disabled (err=%v)", err) + } + if _, err := os.Stat(filepath.Join(dir, "model.json")); err != nil { + t.Fatalf("model.json not written: %v", err) + } + if m.Config() != nil { + t.Fatal("Config() should be nil when config is disabled") + } +} + +// With config disabled, the action order falls back to the spec's Order even +// when a .model-config file is present (it is ignored). +func TestConfigDisabledIgnoresFileUsesOrder(t *testing.T) { + dir := t.TempDir() + mdir := filepath.Join(dir, "model") + cdir := filepath.Join(mdir, ".model-config") + if err := os.MkdirAll(cdir, 0o755); err != nil { + t.Fatal(err) + } + writeFile(t, mdir, "model.jsonic", "x: 1\n") + writeFile(t, cdir, "model-config.jsonic", + "sys: model: action: { a: load: 'x', b: load: 'y' }\n"+ + "sys: model: order: action: 'b,a'\n") + + var order []string + mk := func(n string) ActionDef { + return ActionDef{Run: func(_ map[string]any, _ *Build, _ *BuildContext) ActionResult { + order = append(order, n) + return ActionResult{OK: true} + }} + } + disabled := false + m := New(ModelSpec{ + Path: filepath.Join(mdir, "model.jsonic"), + Base: mdir, + Config: &disabled, + Actions: map[string]ActionDef{"a": mk("a"), "b": mk("b")}, + Order: []string{"a", "b"}, + }) + if br := m.Run(); !br.OK { + t.Fatalf("run failed: %v", br.Errs) + } + // Spec Order wins (a,b); the config file's order (b,a) is ignored. + if strings.Join(order, ",") != "a,b" { + t.Fatalf("action order = %v, want [a b] (from spec Order, config ignored)", order) + } +} + // The config's sys.model.order.action drives the action run order, overriding // the registry's default (sorted) order. func TestConfigDrivesActionOrder(t *testing.T) { diff --git a/go/model.go b/go/model.go index 3a2f234..b4c3949 100644 --- a/go/model.go +++ b/go/model.go @@ -25,8 +25,9 @@ const DefaultIdle = 111 * time.Millisecond // Model unifies a .jsonic model and runs producers (the model writer and any // registered actions) over it. It can build once or watch and rebuild, and -// resolves a .model-config/model-config.jsonic config (auto-created when -// missing) that declares the action order. +// optionally resolves a .model-config/model-config.jsonic config (auto-created +// when missing) that declares the action order. The config is enabled by +// default; ModelSpec.Config can disable it (see New). type Model struct { config *Config build *Build @@ -51,7 +52,12 @@ func New(spec ModelSpec) *Model { idle = DefaultIdle } - config := newConfig(base, spec, log) + // Config is optional: a nil spec.Config defaults to enabled. When disabled, + // the .model-config/ build is skipped and the model runs on its own. + var config *Config + if spec.Config == nil || *spec.Config { + config = newConfig(base, spec, log) + } build := NewBuild(BuildSpec{ Name: "model", @@ -70,7 +76,9 @@ func New(spec ModelSpec) *Model { {Path: "/", Build: LocalProducer}, }, }) - build.Use["config"] = config + if config != nil { + build.Use["config"] = config + } m := &Model{ config: config, @@ -80,28 +88,34 @@ func New(spec ModelSpec) *Model { } // Re-resolve the config on each watch rebuild so config edits are picked up. - m.watch.reload = func() { - config.build.InvalidateCache() - config.Run() + if config != nil { + m.watch.reload = func() { + config.build.InvalidateCache() + config.Run() + } } return m } -// Run builds the config and then the model once, returning the model result. -// A failed config build is returned instead. +// Run builds the config (when enabled) and then the model once, returning the +// model result. A failed config build is returned instead. func (m *Model) Run() *BuildResult { - if cr := m.config.Run(); !cr.OK { - return cr + if m.config != nil { + if cr := m.config.Run(); !cr.OK { + return cr + } } return m.watch.Run(false) } -// Start builds once (config then model), then watches and rebuilds until Stop -// is called. It returns the initial model result. +// Start builds once (config when enabled, then model), then watches and +// rebuilds until Stop is called. It returns the initial model result. func (m *Model) Start() *BuildResult { - if cr := m.config.Run(); !cr.OK { - return cr + if m.config != nil { + if cr := m.config.Run(); !cr.OK { + return cr + } } return m.watch.Start() } diff --git a/go/types.go b/go/types.go index d000d80..30744b3 100644 --- a/go/types.go +++ b/go/types.go @@ -116,4 +116,11 @@ type ModelSpec struct { Idle time.Duration Watch WatchModes Log Log + + // Config resolves a .model-config/model-config.jsonic (auto-created when + // missing) that declares the build action order. A nil pointer defaults to + // enabled; set it to a pointer-to-false to skip the config entirely and run + // the model on its own (action order then comes from Order, else the + // registered Actions). + Config *bool } diff --git a/ts/bin/voxgig-model b/ts/bin/voxgig-model index dd07cf9..387edbe 100755 --- a/ts/bin/voxgig-model +++ b/ts/bin/voxgig-model @@ -82,7 +82,12 @@ function resolveOptions() { short: 'b', default: '' }, - + + // Skip the .model-config build and run the model on its own. + 'no-config': { + type: 'boolean', + }, + help: { type: 'boolean', short: 'h', @@ -102,6 +107,7 @@ function resolveOptions() { debug: args.values.debug, dryrun: args.values.dryrun, build: args.values.build, + config: !args.values['no-config'], help: !!args.values.help, version: !!args.values.version, } @@ -117,6 +123,7 @@ function validateOptions(rawOptions) { debug: One(String,Boolean), dryrun: false, build: Any(), + config: Boolean, help: Boolean, version: Boolean, }) @@ -198,6 +205,7 @@ async function generate(options) { debug: options.debug, dryrun: options.dryrun, buildargs: options.buildargs, + config: options.config, // TODO: read more complex options from elsewhere? watch: { @@ -234,11 +242,13 @@ Usage: --dryrun Perform a dry run, where no files are modified. -y - --build Provide a jsonic specification for build actions. + --build Provide a jsonic specification for build actions. -b + --no-config Skip the .model-config build and run the model on its own. + --debug Set log level (default: info): trace, error, debug, info, warn, fatal. - -g + -g --help Print this help message. -h diff --git a/ts/dist-test/cli.test.js b/ts/dist-test/cli.test.js index 682ed35..feb13ef 100644 --- a/ts/dist-test/cli.test.js +++ b/ts/dist-test/cli.test.js @@ -36,5 +36,18 @@ const BIN = __dirname + '/../bin/voxgig-model'; const args = JSON.parse(await (0, promises_1.readFile)(out, 'utf8')); node_assert_1.default.deepStrictEqual(args, { outer: { inner: 'VAL' } }); }); + // --no-config builds the model without creating .model-config or running any + // config-declared action. + (0, node_test_1.test)('no-config-skips-config', async () => { + const { existsSync } = require('node:fs'); + const dir = GEN + '/cli-noconfig'; + await (0, promises_1.rm)(dir, { recursive: true, force: true }); + await (0, promises_1.mkdir)(dir + '/model', { recursive: true }); + await (0, promises_1.writeFile)(dir + '/model/model.jsonic', 'top: 1\n'); + const res = (0, node_child_process_1.spawnSync)(process.execPath, [BIN, dir + '/model/model.jsonic', '--no-config', '-g', 'silent'], { encoding: 'utf8' }); + node_assert_1.default.strictEqual(res.status, 0, 'cli should exit 0\nstdout:' + res.stdout + '\nstderr:' + res.stderr); + node_assert_1.default.deepStrictEqual(JSON.parse(await (0, promises_1.readFile)(dir + '/model/model.json', 'utf8')), { top: 1 }); + node_assert_1.default.strictEqual(existsSync(dir + '/model/.model-config'), false, '--no-config should not create .model-config'); + }); }); //# sourceMappingURL=cli.test.js.map \ No newline at end of file diff --git a/ts/dist-test/cli.test.js.map b/ts/dist-test/cli.test.js.map index f46b697..f554264 100644 --- a/ts/dist-test/cli.test.js.map +++ b/ts/dist-test/cli.test.js.map @@ -1 +1 @@ -{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../test/cli.test.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;;;AAEpD,2DAA8C;AAC9C,+CAAiE;AACjE,yCAA0C;AAC1C,8DAAgC;AAGhC,MAAM,GAAG,GAAG,SAAS,GAAG,eAAe,CAAA;AACvC,MAAM,GAAG,GAAG,SAAS,GAAG,sBAAsB,CAAA;AAG9C,IAAA,oBAAQ,EAAC,KAAK,EAAE,GAAG,EAAE;IAEnB,4EAA4E;IAC5E,qDAAqD;IACrD,IAAA,gBAAI,EAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAA;QAC1B,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,MAAM,IAAA,gBAAK,EAAC,GAAG,GAAG,sBAAsB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9D,MAAM,IAAA,gBAAK,EAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAEhD,MAAM,IAAA,oBAAS,EAAC,GAAG,GAAG,qBAAqB,EAAE,UAAU,CAAC,CAAA;QACxD,MAAM,IAAA,oBAAS,EAAC,GAAG,GAAG,0CAA0C,EAC9D,gEAAgE,CAAC,CAAA;QACnE,MAAM,IAAA,oBAAS,EAAC,GAAG,GAAG,sBAAsB,EAC1C,qCAAqC;YACrC,8DAA8D;YAC9D,uDAAuD;YACvD,iEAAiE;YACjE,2CAA2C;YAC3C,yBAAyB;YACzB,KAAK,CAAC,CAAA;QAER,MAAM,GAAG,GAAG,GAAG,GAAG,gBAAgB,CAAA;QAClC,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAE9B,uEAAuE;QACvE,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAA,8BAAS,EAAC,OAAO,CAAC,QAAQ,EACpC,CAAC,GAAG,EAAE,GAAG,GAAG,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,CAAC,EAC/D,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QAEvB,qBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAC9B,4BAA4B,GAAG,GAAG,CAAC,MAAM,GAAG,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;QACpD,qBAAM,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;AAEJ,CAAC,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../test/cli.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ts/dist-test/extra.test.js b/ts/dist-test/extra.test.js index 45be782..8442be0 100644 --- a/ts/dist-test/extra.test.js +++ b/ts/dist-test/extra.test.js @@ -133,6 +133,45 @@ function okResult(name) { const v = await b.run({ watch: false }); node_assert_1.default.strictEqual(v.ok, false); }); + // With config disabled, the model builds on its own: no .model-config/ is + // created, no actions run, but the model JSON is still written. + (0, node_test_1.test)('config-optional-skips-config', async () => { + const dir = GEN + '/ex-noconfig'; + await (0, promises_1.rm)(dir, { recursive: true, force: true }); + await (0, promises_1.mkdir)(dir + '/model', { recursive: true }); + await (0, promises_1.writeFile)(dir + '/model/m.jsonic', 'a: 1\n'); + const model = new model_1.Model({ + path: dir + '/model/m.jsonic', base: dir + '/model', debug: 'silent', + config: false, + }); + const br = await model.run(); + node_assert_1.default.ok(br.ok, 'build failed: ' + JSON.stringify(br.errs)); + node_assert_1.default.deepStrictEqual(JSON.parse(await (0, promises_1.readFile)(dir + '/model/m.json', 'utf8')), { a: 1 }); + node_assert_1.default.strictEqual(node_fs_1.default.existsSync(dir + '/model/.model-config'), false, '.model-config should not be created when config is disabled'); + }); + // An action declared in config is ignored when config is disabled, even if a + // .model-config file already exists. + (0, node_test_1.test)('config-optional-ignores-existing-config', async () => { + const dir = GEN + '/ex-noconfig-existing'; + await (0, promises_1.rm)(dir, { recursive: true, force: true }); + await (0, promises_1.mkdir)(dir + '/model/.model-config', { recursive: true }); + await (0, promises_1.mkdir)(dir + '/build', { recursive: true }); + await (0, promises_1.writeFile)(dir + '/model/m.jsonic', 'a: 1\n'); + await (0, promises_1.writeFile)(dir + '/model/.model-config/model-config.jsonic', "sys: model: action: { p: load: 'build/p' }\n"); + await (0, promises_1.writeFile)(dir + '/build/p.js', "const Path = require('node:path')\n" + + 'module.exports = async function p(model, build) {\n' + + " const root = Path.resolve(build.path, '..', '..')\n" + + " build.fs.writeFileSync(Path.resolve(root, 'p.txt'), 'OK')\n" + + ' return { ok: true }\n' + + '}\n'); + const model = new model_1.Model({ + path: dir + '/model/m.jsonic', base: dir + '/model', debug: 'silent', + config: false, + }); + const br = await model.run(); + node_assert_1.default.ok(br.ok, 'build failed: ' + JSON.stringify(br.errs)); + node_assert_1.default.strictEqual(node_fs_1.default.existsSync(dir + '/p.txt'), false, 'config action should not run when config is disabled'); + }); // An unresolved import makes aontu throw; the build collects it as an error // rather than letting it escape. (0, node_test_1.test)('unresolved-import-fails', async () => { diff --git a/ts/dist-test/extra.test.js.map b/ts/dist-test/extra.test.js.map index 51cd058..4436bac 100644 --- a/ts/dist-test/extra.test.js.map +++ b/ts/dist-test/extra.test.js.map @@ -1 +1 @@ -{"version":3,"file":"extra.test.js","sourceRoot":"","sources":["../test/extra.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"extra.test.js","sourceRoot":"","sources":["../test/extra.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ts/dist/model.d.ts b/ts/dist/model.d.ts index afc9e62..26252d2 100644 --- a/ts/dist/model.d.ts +++ b/ts/dist/model.d.ts @@ -3,7 +3,7 @@ import { Config } from './config'; import { Watch } from './watch'; import { initModel } from './init'; declare class Model { - config: Config; + config?: Config; build: BuildSpec; watch: Watch; trigger_model: boolean; diff --git a/ts/dist/model.js b/ts/dist/model.js index 81df85d..4fbf588 100644 --- a/ts/dist/model.js +++ b/ts/dist/model.js @@ -63,8 +63,11 @@ class Model { .replaceAll(process.cwd(), '.') }); } - // Config is a special Watch to handle model config. - this.config = makeConfig(mspec, this.log, this.fs, { + // Config is a special Watch to handle model config. It is optional: when + // mspec.config is false, the .model-config/ build is skipped entirely and + // the model runs on its own (see run/start below). + const useConfig = false !== mspec.config; + this.config = !useConfig ? undefined : makeConfig(mspec, this.log, this.fs, { path: '/', build: async function trigger_model(build, ctx) { let pres = { @@ -109,7 +112,7 @@ class Model { debug: mspec.debug, dryrun: mspec.dryrun, buildargs: mspec.buildargs, - use: { config: self.config }, + use: self.config ? { config: self.config } : {}, res: [ { path: '/', @@ -127,16 +130,24 @@ class Model { }; this.watch = new watch_1.Watch(self.build, this.log); } - // Run once. + // Run once. With config enabled, the config build runs first and triggers + // the model build; without it, the model build runs directly. async run() { this.trigger_model = false; + if (!this.config) { + return this.watch.run('model', false, ''); + } const br = await this.config.run(false); return br.ok ? this.watch.run('model', false, '') : br; } // Start watching for file changes. Runs an initial build, then watches - // both the model files and the config files for ongoing changes. + // both the model files and (when enabled) the config files for ongoing + // changes. async start() { this.trigger_model = false; + if (!this.config) { + return this.watch.start(); + } const br = await this.config.run(true); if (!br.ok) { return br; @@ -150,7 +161,7 @@ class Model { async stop() { // start() also spins up a config-file watcher; stop both so no // chokidar handle is left open keeping the process alive. - await this.config.stop(); + await this.config?.stop(); return this.watch.stop(); } } diff --git a/ts/dist/model.js.map b/ts/dist/model.js.map index f848bf5..092138e 100644 --- a/ts/dist/model.js.map +++ b/ts/dist/model.js.map @@ -1 +1 @@ -{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGpD,gDAAiC;AAEjC,iCAAsC;AAEtC,uCAAyC;AAezC,qCAAiC;AACjC,mCAA+B;AAE/B,4CAAiD;AACjD,4CAAiD;AAEjD,iCAAkC;AAkQhC,0FAlQO,gBAAS,OAkQP;AA/PX,MAAM,KAAK;IAUT,YAAY,KAAgB;QAL5B,kBAAa,GAAG,KAAK,CAAA;QAMnB,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAA;QAErC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QAED,MAAM,IAAI,GAAG,IAAA,iBAAU,EAAC,OAAO,EAAE,KAAY,CAAC,CAAA;QAE9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QAEvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACb,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;oBACpC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtD,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBACjB,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC;aACpC,CAAC,CAAA;QACJ,CAAC;QAED,yEAAyE;QACzE,0EAA0E;QAC1E,mDAAmD;QACnD,MAAM,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,CAAA;QAExC,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;YAC1E,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,KAAK,UAAU,aAAa,CAAC,KAAY,EAAE,GAAiB;gBACjE,IAAI,IAAI,GAAmB;oBACzB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;iBACvF,CAAA;gBAED,IAAI,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;oBACxB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;oBACd,OAAO,IAAI,CAAA;gBACb,CAAC;gBAGD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAEvB,sBAAsB;oBACtB,mEAAmE;oBACnE,mEAAmE;oBACnE,kEAAkE;oBAClE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAA;oBACtD,IAAI,UAAU,EAAE,CAAC;wBACf,UAAU,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;oBAChC,CAAC;oBAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;oBAC9C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;oBACf,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAA;gBACrB,CAAC;qBACI,CAAC;oBACJ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;oBACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;gBAChB,CAAC;gBAED,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAA;oBAE/C,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;4BAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;wBACtB,CAAC,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBAED,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAC,CAAA;QAEF,oBAAoB;QACpB,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;YAC/C,GAAG,EAAE;gBACH;oBACE,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,sBAAc;iBACtB;gBACD;oBACE,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,sBAAc;iBACtB;aACF;YACD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAA;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9C,CAAC;IAGD,0EAA0E;IAC1E,8DAA8D;IAC9D,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;QAClD,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACvC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,CAAC;IAGD,uEAAuE;IACvE,uEAAuE;IACvE,WAAW;IACX,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,EAAE,CAAA;QACX,CAAC;QACD,mEAAmE;QACnE,qEAAqE;QACrE,uDAAuD;QACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC;IAGD,KAAK,CAAC,IAAI;QACR,+DAA+D;QAC/D,0DAA0D;QAC1D,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAA;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF;AAsGC,sBAAK;AAnGP,SAAS,UAAU,CAAC,KAAgB,EAAE,GAAQ,EAAE,EAAO,EAAE,mBAAgC;IACvF,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAA;IACzC,IAAI,KAAK,GAAG,KAAK,GAAG,sBAAsB,CAAA;IAE1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;;;;CAI3B,CAAC,CAAA;IACA,CAAC;IAED,IAAI,KAAK,GAAc;QACrB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE;YAEH,iDAAiD;YACjD;gBACE,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,sBAAc;aACtB;YAED,4BAA4B;YAC5B,mBAAmB;SACpB;QACD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG;QACH,EAAE;KACH,CAAA;IAED,OAAO,IAAI,eAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAC/B,CAAC;AAGD,SAAS,YAAY,CAAC,GAAQ;IAE5B,sBAAsB;IACtB,yBAAyB;IACzB,MAAM,OAAO,GAAG;QACd,WAAW;QACX,eAAe;QACf,YAAY;QACZ,gBAAgB;QAChB,OAAO;QACP,WAAW;QACX,OAAO;QACP,WAAW;QACX,IAAI;QACJ,QAAQ;QACR,mBAAmB;QACnB,OAAO;QACP,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,WAAW;QACX,SAAS;QACT,aAAa;QACb,UAAU;QACV,cAAc;QACd,QAAQ;QACR,YAAY;QACZ,OAAO;QACP,QAAQ;KACT,CAAA;IAED,MAAM,EAAE,EAAE,EAAE,GAAG,IAAA,aAAK,EAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IAE7C,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,IAAK,EAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,GAAW,CAAC,CAAC,CAAC,GAAI,EAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,sEAAsE;IACtE,iCAAiC;IACjC,MAAM,WAAW,GAAI,EAAU,CAAC,QAAQ,CAAA;IACxC,IAAK,GAAW,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAQ,EAAE,GAAI,GAAW,CAAC,QAAQ,EAAE,CAAA;QAClD,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,UAAU,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QACD,CAAC;QAAC,GAAW,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACnC,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/ts/dist/producer/local.js b/ts/dist/producer/local.js index 9418931..f4e9d75 100644 --- a/ts/dist/producer/local.js +++ b/ts/dist/producer/local.js @@ -15,7 +15,9 @@ const local_producer = async (build, ctx) => { // TODO: need to provide project root via build let root = path_1.default.resolve(build.path, '..', '..'); // TODO: build should do this - let configBuildResult = build.use.config.watch.last; + // Config is optional: with no .model-config build linked in, there are no + // declared actions and the model runs on its own. + let configBuildResult = build.use.config?.watch?.last; let configBuild = configBuildResult?.build(); let config = configBuild?.model || {}; let actions = config.sys?.model?.action || diff --git a/ts/dist/producer/local.js.map b/ts/dist/producer/local.js.map index 6c75a61..a48d344 100644 --- a/ts/dist/producer/local.js.map +++ b/ts/dist/producer/local.js.map @@ -1 +1 @@ -{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/producer/local.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/producer/local.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/ts/dist/types.d.ts b/ts/dist/types.d.ts index 5455340..d896024 100644 --- a/ts/dist/types.d.ts +++ b/ts/dist/types.d.ts @@ -105,6 +105,7 @@ interface ModelSpec { dryrun?: boolean; buildargs?: any; fs?: any; + config?: boolean; watch?: { mod?: boolean; add?: boolean; diff --git a/ts/src/model.ts b/ts/src/model.ts index 877d0ad..7d36d8c 100644 --- a/ts/src/model.ts +++ b/ts/src/model.ts @@ -30,7 +30,7 @@ import { initModel } from './init' class Model { - config: Config + config?: Config build: BuildSpec watch: Watch @@ -62,8 +62,12 @@ class Model { }) } - // Config is a special Watch to handle model config. - this.config = makeConfig(mspec, this.log, this.fs, { + // Config is a special Watch to handle model config. It is optional: when + // mspec.config is false, the .model-config/ build is skipped entirely and + // the model runs on its own (see run/start below). + const useConfig = false !== mspec.config + + this.config = !useConfig ? undefined : makeConfig(mspec, this.log, this.fs, { path: '/', build: async function trigger_model(build: Build, ctx: BuildContext) { let pres: ProducerResult = { @@ -117,7 +121,7 @@ class Model { debug: mspec.debug, dryrun: mspec.dryrun, buildargs: mspec.buildargs, - use: { config: self.config }, + use: self.config ? { config: self.config } : {}, res: [ { path: '/', @@ -138,18 +142,26 @@ class Model { } - // Run once. + // Run once. With config enabled, the config build runs first and triggers + // the model build; without it, the model build runs directly. async run(): Promise { this.trigger_model = false + if (!this.config) { + return this.watch.run('model', false, '') + } const br = await this.config.run(false) return br.ok ? this.watch.run('model', false, '') : br } // Start watching for file changes. Runs an initial build, then watches - // both the model files and the config files for ongoing changes. + // both the model files and (when enabled) the config files for ongoing + // changes. async start() { this.trigger_model = false + if (!this.config) { + return this.watch.start() + } const br = await this.config.run(true) if (!br.ok) { return br @@ -165,7 +177,7 @@ class Model { async stop() { // start() also spins up a config-file watcher; stop both so no // chokidar handle is left open keeping the process alive. - await this.config.stop() + await this.config?.stop() return this.watch.stop() } } diff --git a/ts/src/producer/local.ts b/ts/src/producer/local.ts index f2ecceb..8138e05 100644 --- a/ts/src/producer/local.ts +++ b/ts/src/producer/local.ts @@ -18,7 +18,9 @@ const local_producer: Producer = async (build: Build, ctx: BuildContext) => { let root = Path.resolve(build.path, '..', '..') // TODO: build should do this - let configBuildResult = build.use.config.watch.last + // Config is optional: with no .model-config build linked in, there are no + // declared actions and the model runs on its own. + let configBuildResult = build.use.config?.watch?.last let configBuild = configBuildResult?.build() let config = configBuild?.model || {} diff --git a/ts/src/types.ts b/ts/src/types.ts index adbd237..0965b66 100644 --- a/ts/src/types.ts +++ b/ts/src/types.ts @@ -131,6 +131,10 @@ interface ModelSpec { dryrun?: boolean buildargs?: any fs?: any + // Resolve a .model-config/model-config.jsonic (auto-created when missing) + // that declares the build actions and their order. Defaults to true; set + // false to skip the config entirely and run the model on its own. + config?: boolean watch?: { mod?: boolean // file modification add?: boolean // file addition diff --git a/ts/test/cli.test.ts b/ts/test/cli.test.ts index 81d4082..a168b47 100644 --- a/ts/test/cli.test.ts +++ b/ts/test/cli.test.ts @@ -48,4 +48,26 @@ describe('cli', () => { assert.deepStrictEqual(args, { outer: { inner: 'VAL' } }) }) + + // --no-config builds the model without creating .model-config or running any + // config-declared action. + test('no-config-skips-config', async () => { + const { existsSync } = require('node:fs') + const dir = GEN + '/cli-noconfig' + await rm(dir, { recursive: true, force: true }) + await mkdir(dir + '/model', { recursive: true }) + await writeFile(dir + '/model/model.jsonic', 'top: 1\n') + + const res = spawnSync(process.execPath, + [BIN, dir + '/model/model.jsonic', '--no-config', '-g', 'silent'], + { encoding: 'utf8' }) + + assert.strictEqual(res.status, 0, + 'cli should exit 0\nstdout:' + res.stdout + '\nstderr:' + res.stderr) + assert.deepStrictEqual(JSON.parse(await readFile(dir + '/model/model.json', 'utf8')), + { top: 1 }) + assert.strictEqual(existsSync(dir + '/model/.model-config'), false, + '--no-config should not create .model-config') + }) + }) diff --git a/ts/test/extra.test.ts b/ts/test/extra.test.ts index 282f54b..a544f31 100644 --- a/ts/test/extra.test.ts +++ b/ts/test/extra.test.ts @@ -161,6 +161,58 @@ describe('extra', () => { }) + // With config disabled, the model builds on its own: no .model-config/ is + // created, no actions run, but the model JSON is still written. + test('config-optional-skips-config', async () => { + const dir = GEN + '/ex-noconfig' + await rm(dir, { recursive: true, force: true }) + await mkdir(dir + '/model', { recursive: true }) + await writeFile(dir + '/model/m.jsonic', 'a: 1\n') + + const model = new Model({ + path: dir + '/model/m.jsonic', base: dir + '/model', debug: 'silent', + config: false, + }) + const br = await model.run() + + assert.ok(br.ok, 'build failed: ' + JSON.stringify(br.errs)) + assert.deepStrictEqual(JSON.parse(await readFile(dir + '/model/m.json', 'utf8')), { a: 1 }) + assert.strictEqual(Fs.existsSync(dir + '/model/.model-config'), false, + '.model-config should not be created when config is disabled') + }) + + + // An action declared in config is ignored when config is disabled, even if a + // .model-config file already exists. + test('config-optional-ignores-existing-config', async () => { + const dir = GEN + '/ex-noconfig-existing' + await rm(dir, { recursive: true, force: true }) + await mkdir(dir + '/model/.model-config', { recursive: true }) + await mkdir(dir + '/build', { recursive: true }) + + await writeFile(dir + '/model/m.jsonic', 'a: 1\n') + await writeFile(dir + '/model/.model-config/model-config.jsonic', + "sys: model: action: { p: load: 'build/p' }\n") + await writeFile(dir + '/build/p.js', + "const Path = require('node:path')\n" + + 'module.exports = async function p(model, build) {\n' + + " const root = Path.resolve(build.path, '..', '..')\n" + + " build.fs.writeFileSync(Path.resolve(root, 'p.txt'), 'OK')\n" + + ' return { ok: true }\n' + + '}\n') + + const model = new Model({ + path: dir + '/model/m.jsonic', base: dir + '/model', debug: 'silent', + config: false, + }) + const br = await model.run() + + assert.ok(br.ok, 'build failed: ' + JSON.stringify(br.errs)) + assert.strictEqual(Fs.existsSync(dir + '/p.txt'), false, + 'config action should not run when config is disabled') + }) + + // An unresolved import makes aontu throw; the build collects it as an error // rather than letting it escape. test('unresolved-import-fails', async () => { From 22e2413b2cb0460ad557d4aaa64d8fc1e9ab6974 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 22 Jun 2026 16:57:47 +0000 Subject: [PATCH 4/5] go: v0.1.3 --- go/model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/model.go b/go/model.go index b4c3949..9942a23 100644 --- a/go/model.go +++ b/go/model.go @@ -18,7 +18,7 @@ import ( // Version is the released version of the Go module. It is rewritten by // `make publish-go V=x.y.z` to match the git tag (go/vx.y.z). -const Version = "0.1.2" +const Version = "0.1.3" // DefaultIdle is the default watch debounce period. const DefaultIdle = 111 * time.Millisecond From 547969fc8f5c54fbaa5fa77b229e92a116a08592 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 22 Jun 2026 17:06:47 +0000 Subject: [PATCH 5/5] build: make publish-go version bump portable (GNU/BSD sed) --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d2a11e8..7fc71fe 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,10 @@ clean-go: # Publish the Go module: make publish-go V=0.1.1 publish-go: vet-go test-go @test -n "$(V)" || (echo "Usage: make publish-go V=x.y.z" && exit 1) - sed -i '' 's/^const Version = ".*"/const Version = "$(V)"/' go/model.go + # Portable in-place edit: GNU sed wants `-i`, BSD/macOS sed `-i ''`. + # A temp file plus mv sidesteps the difference. + sed 's/^const Version = ".*"/const Version = "$(V)"/' go/model.go > go/model.go.tmp \ + && mv go/model.go.tmp go/model.go git add go/model.go git commit -m "go: v$(V)" git tag go/v$(V)