Universal modules build as header-first cdylibs now, but the docs still
described the old `logos-cpp-generator --from-header --backend qt` path that
emitted `<name>_qt_glue.h` + `<name>_dispatch.cpp` and listed them explicitly
in CMakeLists SOURCES. None of that is current:
- The generator derives a `.lidl` from the impl header, then runs the cdylib
backend → `<name>_cdylib_glue.{h,cpp}` (uniform Qt-plugin glue) +
`<name>_module_impl.cpp` (Qt-free C-ABI export wrapper).
- `mkLogosModule` runs the pipeline automatically — no `preConfigure`.
- `LogosModule.cmake` globs `generated_code/` — modules must NOT list the
generated files in SOURCES (the bug fixed in #12).
Updated across the board:
- guidelines/{codegen.md (rewritten),universal-module,nix-build,metadata-json}
- docs/{spec.md,project.md}, README.md
- skills/{create-universal-module,nix-flake-setup,wrap-external-lib}
- generators/generate-agents-md.ts, mcp-server/tools/build-help.ts
(build-help now flags the "generated_code in SOURCES" mistake directly)
- regenerated llms-full.txt + llms.txt
- refreshed the committed example trees (outputs/logos-*) to match current
`init` output: minimal flake (no preConfigure), CMakeLists without the
generated_code sources, and regenerated AGENTS.md/CLAUDE.md/.claude skills
- re-rendered dev-boost-scaffold-module.md
No source-code/behavior changes — docs + generated context only.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
`init --type module` scaffolds a universal module whose CMakeLists.txt listed
two generated files explicitly in `logos_module(SOURCES ...)`:
generated_code/<name>_qt_glue.h
generated_code/<name>_dispatch.cpp
Those were the filenames the *old* universal codegen emitted. Since universal
modules switched to the header-first cdylib mechanism (module-builder), the
codegen now emits `<name>_cdylib_glue.{h,cpp}` + `<name>_module_impl.cpp`, so
the hardcoded names no longer exist and CMake fails at configure:
CMake Error at LogosModule.cmake (add_library):
Cannot find source file: generated_code/<name>_qt_glue.h
LogosModule.cmake already globs `generated_code/*.cpp` + `*.h` automatically
(excluding logos_sdk/*_api), so the explicit listing was both wrong and
redundant. Drop both lines and rely on the glob — matching the convention in
the in-tree universal modules (test-basic-module-cpp, test-context-module-cpp:
"LogosModule.cmake picks up from generated_code/ automatically"). The
`cSourceLines` suffix (external-lib .c sources) is preserved on `_impl.cpp`.
Verified: scaffold → `nix build` (green) → `lm methods` (echo discoverable) →
`nix build .#unit-tests` (green). The dev-boost-scaffold-module doctest was
previously a false-green from a Cachix hit; this exercises the real build.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The scaffolded module flake.nix hard-coded a preConfigure calling
`logos-cpp-generator --from-header ... --backend qt`. The logos-qt-sdk
split moved Qt-plugin glue generation to `logos-qt-generator`, and
logos-cpp-generator now hard-errors on `--backend qt` ("Qt glue generation
moved to logos-qt-generator"). So every scaffolded universal module (and
the module half of `full-app`) failed to build against a post-split
cpp-sdk — masked until now only by Cachix hits on pre-split builds.
Drop the hand-written preConfigure entirely. logos-module-builder's
mkLogosModule already runs the generator automatically for
`interface: "universal"` modules (via logos-qt-generator + the .lidl
sidecar), and the scaffold's conventional <Pascal>Impl / <name>_impl.h
naming matches the builder's defaults — so no preConfigure or codegen
metadata is needed. Verified: `init --type module` then `nix build`
produces the plugin via the autoCodegen path.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: emit daemon-client logoscore examples, drop inline (-c) mode
logos-logoscore-cli's inline mode (`logoscore -m <dir> -l <mod> -c
"mod.method(args)" --quit-on-finish`) is being removed. Update everything
dev-boost emits/ships so generated module docs and guidance use the daemon +
client workflow instead:
logoscore -D -m ./result/lib -l <module> & # start a daemon
logoscore call <module> <method> [args...] # call a method (positional)
logoscore stop # stop when done
- Code generators: generate-agents-md.ts, build-help.ts, scaffold.ts now emit
the daemon/start + `call` + `stop` sequence (scaffold derives positional
method + space-separated args instead of a `module.method(args)` string).
- Guidelines (testing.md, universal-module.md) and skills (testing-modules,
create-universal-module, package-lgx, create-full-app) rewritten to the
daemon/client flow; CI guidance is "background daemon, run calls, stop".
- docs/spec.md and templates/full-app/README.md examples updated.
- llms-full.txt re-synced to match (it aggregates the above).
`tsc` still compiles (nix build of the default package passes).
Note: doctests/outputs/* are regenerated end-to-end by the doctest harness
(doctests/run.sh, which scaffolds + builds + executes the commands), so those
snapshots refresh from the updated generators on the next doctest run rather
than being hand-edited here.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: address review — omit empty call args; fix llms type-detection line
- scaffold.ts: no-arg sample methods left `sampleCallArgs` empty, producing a
trailing space / empty arg in the suggested `logoscore call`. Derive a
`sampleCall` that omits the args when empty.
- llms-full.txt: the type-auto-detection line still said "`-c` args" while the
surrounding section documents the `call` client command — now "`call` args".
tsc still compiles (nix build of .#default passes).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: daemon starts clean — drop -l, load modules via load-module
Follow-up to dropping inline mode: logoscore's daemon now starts clean (the
-l/--load-modules autoload flag is removed). Update everything dev-boost
emits/ships to start a clean daemon and load modules with `load-module`:
logoscore -D -m <dir> &
logoscore load-module <module>
logoscore call <module> <method> [args]
logoscore stop
- Generators (generate-agents-md.ts, build-help.ts, scaffold.ts) emit a
`load-module` step instead of `-D … -l <module>`.
- Guidelines/skills/docs/template + llms-full.txt updated (comma-separated
`-l a,b` examples become one `load-module` per module).
tsc compiles (nix build of .#default passes).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>