deps: update memfs 4.57.2->4.57.6, @types/node 25.6.0->25.9.2#5
Merged
Conversation
All other dependencies (aontu, chokidar, shape, typescript) already at latest. Clean rebuild produces byte-identical artifacts; build, test, and coverage all pass.
Fixes found during strict review, each with a test: - bin: pass parsed buildargs to Model. It was sending the raw --build string under the wrong key, so CLI -b/--build args never reached build actions. - build: reset per-run error state and collect aontu errors via the `err` option key (aontu's current API) rather than the dead `errs` key. A reused BuildImpl no longer sticks one failure to every later watch rebuild, and model errors are collected instead of thrown. - model: assign a `() => Build` thunk (matching BuildResult.build) so the model producer can call it on a config-triggered rebuild; stop the config watcher in Model.stop() so start() leaves no open handle; redirect promise-based fs writers under dryrun; de-dup writers list. - local: fail with a clear message when an order entry names an unknown action, or one missing a load path, instead of an opaque TypeError. - watch: fall back to cwd when the require base is unset; correct the misleading start() doc comment. Tests added: error recovery, unknown-action error, dryrun promise writers, watch rebuild-on-change, and CLI build-arg passing. Overall line coverage 82.8% -> 92.0% (watch.ts 50.6% -> 91.5%). https://claude.ai/code/session_01HxXpZNrKj3qonocwAtEP8r
start() previously ran the config build once but never started the config watcher's interval, so config-file edits were detected yet never acted on (and the watcher leaked until stop()). It now also watches the config files: a config change rebuilds the config and re-triggers the model build - the path the BuildResult.build thunk fix enables. To keep the initial config build from racing the first model build, Watch.start()/Config.start() take an `initial` flag; start() keeps the synchronous initial config build and begins config watching with initial=false. Tests: config-change-triggers-rebuild (verified it fails without the wiring), plus missing-load and throwing-action coverage for the local producer. Line coverage now 93.3% (config.ts 100%, local.ts 96.5%). Known limitation: a simultaneous config + model file change can still drive two overlapping model builds, because the config trigger calls watch.run() directly rather than via the main queue. The per-run error reset makes this self-healing; unifying the queues is left as follow-up. https://claude.ai/code/session_01HxXpZNrKj3qonocwAtEP8r
Add a four-part documentation set under docs/ and rework the README into
a navigable entry point:
- tutorial.md learn the tool by building a model step by step
- how-to.md task recipes (build args, actions, custom producers,
in-memory fs, dry run, watch tuning, ...)
- reference.md CLI, project layout, config, actions, the full
programmatic API, build lifecycle, modeling-language
essentials, logging, scripts, and troubleshooting
- explanation.md the problem, why unification, architecture, the build
lifecycle, caching/watch design, and known limitations
Add agent guides for working on the codebase:
- AGENTS.md environment, build/test, repo map, conventions, test
patterns, task playbooks, and the key gotchas
- CLAUDE.md Claude Code entry point (imports AGENTS.md), essentials
up front
Every runnable example is verified against the built tool. Two
easy-to-hit modeling rules that surfaced while writing are now
documented: keys are jsonic identifiers (quote hyphens), and every
emitted field must resolve to a concrete value (give it a default or
mark it optional).
https://claude.ai/code/session_01HxXpZNrKj3qonocwAtEP8r
Mirror the voxgig/util layout: the TypeScript package now lives in ts/ (canonical) and a new Go port lives in go/ (kept in parity). A root Makefile builds and tests both. - Move the TypeScript project (src, test, dist, dist-test, bin, model, package.json) into ts/. Relative paths inside are unchanged, so the npm scripts work as before when run from ts/. - Bump aontu 0.44.0 -> 0.45.1 (ts). Build clean; 11/11 tests pass; the compiled dist is byte-identical (runtime-only change). - Add go/ - module github.com/voxgig/model/go, package model. Ports the build lifecycle (pre/reload/post), producers, dryrun and watch semantics, using the real Go aontu engine (github.com/rjrodger/aontu/go) for unification. Go adaptations: actions are a programmatic registry (no runtime require), watching polls mtimes (no chokidar), and imports resolve via a base chdir (Go aontu Generate takes no base param). gofmt/vet clean; go test passes. - Add root Makefile (build/test/clean/publish-go) and go/README.md. - Update README, AGENTS.md, CLAUDE.md and docs/ for the dual-language layout and the canonical-TS / parity-Go workflow. Note: .github/workflows/build.yml still needs updating for the new layout; it could not be pushed from this session (token lacks GitHub 'workflow' scope). https://claude.ai/code/session_01HxXpZNrKj3qonocwAtEP8r
Go (model package 78% -> 94%, total 70% -> 91%): - Refactor cmd/voxgig-model into a testable run() with a local FlagSet; add main_test.go (write, dryrun, missing file, bad model, no args). - Add log_test.go (level parsing/filtering, silent, NopLog). - Add extra_test.go: reload re-resolves, resolver error, missing root, non-object model, action steps (pre/post/all), failing action, action with no Run, recovered producer panic, write error, dryrun via Model, Build accessor, NewWatch defaults + Last. TypeScript (93.3% -> 94.3%): - extra.test.ts: producer throws (pre/post), producer returns ok:false (pre/post), missing root file, Promise-exported action, unresolved import. - watch.test.ts: recover from a failed rebuild while watching. make test is green for both languages (19 TS, 30 Go test cases). https://claude.ai/code/session_01HxXpZNrKj3qonocwAtEP8r
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
All other dependencies (aontu, chokidar, shape, typescript) already at
latest. Clean rebuild produces byte-identical artifacts; build, test,
and coverage all pass.