ladder: shared infrastructure, docs, and framework prerequisites (rung 0) - #88
Open
Yaraslaut wants to merge 2 commits into
Open
ladder: shared infrastructure, docs, and framework prerequisites (rung 0)#88Yaraslaut wants to merge 2 commits into
Yaraslaut wants to merge 2 commits into
Conversation
…g 0)
Split out of the application-ladder branch (236 files, 32.8k insertions)
into its own reviewable PR, per LADDER.md's own framing: rung 0 has no
app of its own, only the shared foundation every later rung builds on.
This is that foundation, with no rung's application code (pastebin,
bookmarks, polls) included -- those land as their own follow-up PRs.
Contents:
- CI/CMake: .github/workflows/ci.yml, wasm-ladder.yml, cmake/morph_add_rung.cmake,
cmake/compiler_options.cmake, codecov.yml, top-level CMakeLists.txt/vcpkg.json
changes needed to build an opt-in ladder (MORPH_BUILD_LADDER) alongside
the existing example/test targets without disturbing them.
- Cross-rung docs: examples/LADDER.md, IMPLEMENTATION.md, TESTING.md,
FINDINGS.md -- the two binding companion documents (how apps are
written, how they're tested) every rung is held to, plus the finding
pipeline's scoreboard/triage process.
- Design-annex README stubs: examples/{crm,forge,kanban,ledger,lims}/README.md
-- rungs 4-8, each a finished requirements study; building any of them
is a separate decision taken after rung 4, per LADDER.md's own program
scope note. No code, docs only.
- Shared examples/common: the GUI presenter base (presenter.hpp, non-
template QObject bookkeeping every rung's presenters build on),
AppContext (LocalBackend/QtWebSocketBackend/WASM mode switch), the
injectable clock, and the full testkit (BackendRig, DbFixture family,
fault-injection proxy, strand interleaver, event poller) every rung's
test suite depends on -- all covered by its own unit tests
(ladder_common_tests).
- Framework prerequisites the rungs needed and that landed here first:
registry.hpp/remote.hpp changes, exercised by tests/test_quantity_forms.cpp
and the new tests/test_remote_execute_ordering.cpp.
- The lint-gate scripts/tests already merged via #85 (check_test_type_names.sh
+ its test fixtures), carried forward from the earlier merge into this
branch.
Verified standalone: configures and builds with -DMORPH_BUILD_LADDER=ON
-DMORPH_BUILD_QT=ON against master's examples/CMakeLists.txt loop, which
already tolerates rung 1+ directories not existing yet ("no rung exists
yet at rung 0" is a real, working code path, not a placeholder). Full
suite passes standalone: morph_tests (9773 assertions), morph_qt_tests
(496 assertions), ladder_common_tests (212 assertions against its SQLite
default). Spec-citation, banned-terminology, and test-type-name lints
all pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
This was referenced Aug 14, 2026
The foundation PR (this branch) deliberately ships no rung code -- the per-rung PRs (pastebin/bookmarks/polls) land separately, based on this branch. wasm-ladder.yml's "build every rung's WASM client by name" tripwire step hardcoded all three targets unconditionally, so the job failed here with "ninja: error: unknown target 'ladder_pastebin_gui_wasm'" -- there is no examples/pastebin on this branch to produce that target. Fix: each named target now only builds if its rung's directory exists in the checkout. This is the same "no rung exists yet" case morph_add_rung.cmake's own header comment already documents as a silent, expected outcome (a rung with no gui_wasm/ yet simply gets no ladder_<rung>_gui_wasm target) -- not the regression this tripwire exists to catch. Once a rung's directory is present (every other branch/PR, including once the per-rung PRs merge here), the tripwire is unchanged: morph_add_rung() skipping a rung's gui_wasm target for any other reason (missing gui_lib, missing QML module, MORPH_BUILD_FORMS_QML off) still fails the job. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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.
What
The first slice of the application ladder (previously all bundled in #41, 236 files / 32.8k insertions): the shared foundation every rung builds on, with no rung's application code included. Pastebin, bookmarks, and polls land as their own follow-up PRs against this one.
Per
LADDER.md's own framing, rung 0 has no app of its own — this is rung 0.Contents
.github/workflows/ci.yml,wasm-ladder.yml,cmake/morph_add_rung.cmake,cmake/compiler_options.cmake,codecov.yml, and the top-levelCMakeLists.txt/vcpkg.jsonchanges needed to build an opt-in ladder (-DMORPH_BUILD_LADDER=ON) alongside existing example/test targets, without disturbing them.examples/LADDER.md,IMPLEMENTATION.md,TESTING.md,FINDINGS.md— the two binding companion documents every rung is held to, plus the finding pipeline's scoreboard/triage process.examples/{crm,forge,kanban,ledger,lims}/README.md— rungs 4–8, each a finished requirements study. Docs only, no code; building any of them is a separate decision perLADDER.md's program-scope note.examples/common: the GUI presenter base (presenter.hpp),AppContext(LocalBackend/QtWebSocketBackend/WASM mode switch), the injectable clock, and the full testkit (BackendRig, theDbFixturefamily, fault-injection proxy, strand interleaver, event poller) every rung's tests depend on — with its own unit tests (ladder_common_tests).registry.hpp/remote.hppchanges the rungs needed, exercised bytests/test_quantity_forms.cppand the newtests/test_remote_execute_ordering.cpp.Verification
Configured and built standalone (
-DMORPH_BUILD_LADDER=ON -DMORPH_BUILD_QT=ON) with no rung directories present —examples/CMakeLists.txt's rung-selection loop already tolerates this ("no rung exists yet at rung 0" is a real code path, not a placeholder).morph_tests: 9773 assertions passmorph_qt_tests: 496 assertions passladder_common_tests: 212 assertions pass (against its SQLite default)check_spec_citations.sh,check_test_type_names.sh,check_deprecated_markers.sh: all cleanSequencing
This targets
master. The per-rung PRs (pastebin, bookmarks, polls) will target this branch (or be rebased onto master once this merges) and are marked draft where they depend on it.