ci: fix pre-existing /bigobj and Doxygen doc-parse failures blocking all PRs - #80
Merged
Conversation
main.cpp instantiates schema/rule templates over every demo action type.
Under the cl-debug preset (MSVC, full /Zi debug info, no /Og folding) this
pushes main.cpp.obj's COFF section count past the 32-bit SN_LOFF format's
limit, and MSVC aborts with C1128 ("number of sections exceeded object
file format limit"). /bigobj switches to the extended section-count
format; harmless on Release and on other compilers, so it is applied
unconditionally (guarded by CXX_COMPILER_ID:MSVC) to this one target.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
forms.hpp: the second equals() overload's @brief opened an inline code span with a backtick right before a "///" line break (equals(&A::code, then "X")) on the next line, inside a Qt-autobrief @brief. Doxygen lost the parameter/return docs that followed, reporting them as undocumented even though @tparam/@param/@return were all present. Confirmed by isolating each overload in turn: renaming the second overload made Doxygen point at it specifically, not the first, ruling out an overload-association mixup. Rewrapping the brief so the code span opens and closes on the same line fixes it. wire.hpp: EscapingWriteOpts's doc comment contains a single unpaired literal double-quote character ("...or a double-quote earlier in the same string..."), making the block's total count of literal double-quote characters odd. Bisected with byte-exact reproductions down to a single line: Doxygen's comment lexer tracks quote parity across the whole comment block, and an odd count leaves it in a bad state that surfaces later as a bogus "end of comment block while expecting command </tt>" error once the block closes. Rewording to name the character in prose instead of using a bare quote glyph fixes it. Both verified against Doxygen 1.17.0 (the version CI installs explicitly in .github/workflows/docs.yml) via "cmake --build build --target doc": exit 0, zero "is not documented" or parse-error lines. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Yaraslaut
pushed a commit
that referenced
this pull request
Aug 12, 2026
FormsController.cpp instantiates schema/rule templates over every demo action type, the same pattern morph_forms_demo hit (see #80). Under the cl-debug preset this pushes the .obj's COFF section count past the 32-bit SN_LOFF format's limit, and MSVC aborts with C1128. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Yaraslaut
pushed a commit
that referenced
this pull request
Aug 12, 2026
test_quantity_forms.cpp instantiates schema/rule templates over every Quantity-bearing form type; combined with this branch's added rule conditions and enforceQuantityBounds, this pushes its .obj's COFF section count past the 32-bit SN_LOFF format's limit under the cl-debug preset, aborting with C1128. Same pattern as #80's fix for morph_forms_demo and this branch's own lab_forms_demo_module fix. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Yaraslaut
pushed a commit
that referenced
this pull request
Aug 12, 2026
FormsController.cpp instantiates schema/rule templates over every demo action type, the same pattern morph_forms_demo hit (see #80). Under the cl-debug preset this pushes the .obj's COFF section count past the 32-bit SN_LOFF format's limit, and MSVC aborts with C1128. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Yaraslaut
pushed a commit
that referenced
this pull request
Aug 12, 2026
This branch's QFWholeCount addition (a zero-decimal declared-precision override) pushes the file's instantiated-template weight past the 32-bit SN_LOFF format's limit under the cl-debug preset, aborting with C1128. Same pattern as #80's fix for morph_forms_demo. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Yaraslaut
added a commit
that referenced
this pull request
Aug 12, 2026
…ENT_ONLY facade drops the model-header dependency (#77) * Closes #57: FormsControllerCore can compose over a caller-supplied Bridge FormsControllerCore<Model> previously always built and owned its own ThreadPoolExecutor + QtExecutor + Bridge over a LocalBackend, so an app that already had a Bridge (connected to Remote/Socket mode, or shared across multiple presenters) could not use it without getting a second, always-local Bridge built underneath it. Adds a constructor overload, FormsControllerCore(Bridge&, IExecutor*, schemasJson), that composes over a caller-supplied Bridge/executor instead of building a private one. The owning single-argument constructor is unchanged and remains the convenient default. Ownership of the internal pool/executor/backend bundle is now conditional (std::optional<OwnedBridge>), engaged only by the owning constructor, with declaration order preserved so BridgeHandler always tears down before the Bridge/executor it depends on. Covered by two new Catch2 cases in test_forms_controller_core.cpp: submitting through a caller-supplied Bridge, and dispatching correctly after the caller calls Bridge::switchBackend on that same Bridge. docs/spec/forms/forms.md updated to describe both constructors. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Closes #61: BRIDGE_REGISTER_ACTION_FOR_CLIENT drops the model-header dependency under MORPH_CLIENT_ONLY MORPH_CLIENT_ONLY already removes the *link* dependency on a model's implementation, but BRIDGE_REGISTER_ACTION's Result type is decltype(std::declval<M&>().execute(std::declval<A>())), which forces M to be a complete type with execute(A) declared at the registration site -- ordinarily the model's own header. A pure client therefore still had to #include that header (and everything it pulls in transitively -- a persistence mixin's database-driver headers, for a model backed by one), even though a MORPH_CLIENT_ONLY build never calls Model::execute at all. A WASM/browser client has no include path for a native database client library at all, making this a hard build blocker. Adds BRIDGE_REGISTER_ACTION_FOR_CLIENT(M, A, RESULT, NAME, ...): emits the identical ActionTraits<A> specialisation as BRIDGE_REGISTER_ACTION, except Result is the explicitly-named RESULT argument instead of a decltype-deduced one. M is then used only as BridgeHandler<M>'s template tag and ActionExecuteRegistry's dispatch key -- both routes call only ModelTraits<M>::typeId() and, under MORPH_CLIENT_ONLY, never reach Model::execute (already gated inside Bridge::executeVia) -- so M may be forward-declared and never defined anywhere in the client's link. New compile/run-check fixture, tests/compile_checks/client_only_facade_no_model_header.cpp (wired via try_run() in tests/CMakeLists.txt, following the existing client_only_no_model_link.cpp/client_only_runtime_throw.cpp pattern), forward-declares (never defines) its model type and proves the action still round-trips correctly through toJson/fromJson, and that BridgeHandler<Model> can be constructed and dispatched through via the pre-built-binding constructor without the model ever being complete. docs/spec/core/registry.md documents the new macro, its header-seam rationale, the pre-built-binding BridgeHandler construction pattern a client using it needs, and the one thing it cannot verify (RESULT must match what the real model's execute() actually returns). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: close the @cond detail block opened for BRIDGE_REGISTER_ACTION_FOR_CLIENT_* The new client-facade macro helpers (PICK/_4/_5) opened a second @cond detail without an intervening @endcond before the pre-existing BRIDGE_REGISTER_ACTION_PICK/_3/_4 block's own @cond -- Doxygen's WARN_AS_ERROR=FAIL_ON_WARNINGS gate correctly flagged the unclosed first block. Close it right after its own macro group, before the next @cond opens. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * ci: add /bigobj to lab_forms_demo_module for MSVC Debug builds FormsController.cpp instantiates schema/rule templates over every demo action type, the same pattern morph_forms_demo hit (see #80). Under the cl-debug preset this pushes the .obj's COFF section count past the 32-bit SN_LOFF format's limit, and MSVC aborts with C1128. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Yaraslau Tamashevich <y.tamashevich@lastrada.net> 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.
Summary
Three defects already present on
masteritself — not introduced by any of the open issue-cluster PRs (#70–#79) — surfaced once those PRs started actually exercising the full CI matrix. Confirmed each is genuinely pre-existing by reproducing on an unmodifiedorigin/mastercheckout.1.
/bigobjneeded forexamples/forms/main.cpp(MSVC Debug)cl-debugCI fails withfatal error C1128: number of sections exceeded object file format limit. Root cause: the recent nested-aggregate schema recursion (9002553) pushed a Debug build's COFF section count over MSVC's format limit for this translation unit. Added/bigobj, MSVC-only, matching the existing convention already used intests/CMakeLists.txt.2.
forms.hpp:996— Doxygen "parameters/return type not documented"Root cause (confirmed by temporarily renaming the flagged overload and watching the error follow it): the second
equals()overload's@briefopened a backtick code span that closed on the following///line instead of the same one, corrupting Doxygen's comment-block parsing for that entire block. Rewrapped so each backtick span opens and closes on one line.3.
wire.hpp:317— Doxygen "end of comment block while expecting</tt>"Root cause (confirmed by byte-exact bisection): the
EscapingWriteOptsdoc comment contains a single unpaired literal"character in prose, giving the block an odd total quote count; Doxygen's lexer tracks quote parity across the whole comment block, and an odd count corrupts its state until a bogus<tt>-closing error surfaces later in the same block — there is no actual<tt>tag anywhere nearby. Reworded to name the character in prose instead of using a bare"glyph.Verification
.github/workflows/docs.ymlpins) and rancmake --build --target doc— exit 0, zero doc errors, independently re-verified./bigobjfix independently re-verified: rebuiltmorph_forms_demounder a Debug configuration, confirmed the flag appears inexamples/forms/CMakeLists.txtcorrectly scoped to MSVC only.🤖 Generated with Claude Code