Skip to content

deps: update memfs 4.57.2->4.57.6, @types/node 25.6.0->25.9.2#5

Merged
rjrodger merged 6 commits into
mainfrom
claude/beautiful-newton-aCdiB
Jun 8, 2026
Merged

deps: update memfs 4.57.2->4.57.6, @types/node 25.6.0->25.9.2#5
rjrodger merged 6 commits into
mainfrom
claude/beautiful-newton-aCdiB

Conversation

@rjrodger

@rjrodger rjrodger commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

All other dependencies (aontu, chokidar, shape, typescript) already at
latest. Clean rebuild produces byte-identical artifacts; build, test,
and coverage all pass.

claude added 6 commits June 8, 2026 10:20
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
@rjrodger rjrodger merged commit 63953f3 into main Jun 8, 2026
0 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants