feat: release 1.0.0 - stable API, full Yoga test coverage, five engine fixes#11
Merged
Conversation
Co-Authored-By: Claude Fable 5 <[email protected]>
Package page and flexbox skill confirmed on timewarp.software after the v1.0.0-beta.4 release chain. Search-index race documented; receiver-side wait gate proposed as timewarp-software PR #23. Co-Authored-By: Claude Fable 5 <[email protected]>
144 (blocker): API surface tightening - internalize ~75 engine-internal public types and the mutable public static delegate wiring before the semver freeze. 145: port remaining hand-written Yoga unit tests. 146: text-measurement helper to unlock skipped IntrinsicSize conformance tests. 147: the 1.0.0 release itself, gated on 144. 148 (backlog): FixFlexBasisFitContent experimental feature. Co-Authored-By: Claude Fable 5 <[email protected]>
Reduce the exported API from 93 types to the intended 39 (enums, value types, delegates, Node/Style/Config/CalculateLayout/LayoutResults and support types). All algorithm machinery, style storage internals, the event system, and debug utilities are now internal - including the previously public mutable FlexBasis.CalculateLayoutInternal delegate. Tests keep exercising internals via InternalsVisibleTo. API refinements while the surface was open: Node.GetChild(int) returns Node (duplicate GetChildNode removed, ILayoutableNode explicitly implemented) and a Node.CalculateLayout(...) instance convenience was added. Internalizing the MockNode test helper also removed 5 phantom Fixie-discovered test entries; the suite is a clean 1333/0/0. BREAKING for beta.4 consumers who referenced engine internals; the documented consumer API is unchanged apart from GetChild's improved return type. Co-Authored-By: Claude Fable 5 <[email protected]>
Co-Authored-By: Claude Fable 5 <[email protected]>
…defects (task 145)
123 new tests (suite: 1333 -> 1456, all passing). The new coverage
exposed five mistranslations, all fixed against the C++:
1. PixelGrid half-way rounding compared the fractional part as float
instead of double, collapsing the 1e-4 tolerance boundary
(-3.5001 rounded to -3 instead of -4).
2. ZeroOutLayoutRecursively now resets the entire layout (positions,
margins, cached measurements) like C++ getLayout() = {}, clones
children before recursing, and its display:none call site is gated
on performLayout to avoid mutating during measure-only passes.
3. Node.Clone() clears Owner (C++ YGNodeClone semantics).
4. CloneChildrenIfNeeded recursively clones the children of a cloned
display:contents child.
5. CleanupContentsNodesRecursively rewritten to C++ parity:
didPerformLayout parameter, contents-clone calls, full layout
reset, and no recursion into regular children.
Recorded omissions: 16 auto-min-size extension tests (feature not in
the engine), 3 free-semantics tests (no GC equivalent), 2 misc.
Three stale hand-written tests codifying old behavior updated.
Co-Authored-By: Claude Fable 5 <[email protected]>
Co-Authored-By: Claude Fable 5 <[email protected]>
…onformance tests (task 146) Port Yoga's IntrinsicSizeMeasure test helper (TestUtil.cpp: 10px/char word-wrap simulation, text via Node.Context) and teach the generated- test converter the YGNodeSetContext + IntrinsicSizeMeasure patterns (plus 2-space emission matching .editorconfig). IntrinsicSize conversion grows from 5 to 17 tests; the 12 newly unlocked text- measurement tests all pass with no engine changes. Remaining exclusions are upstream GTEST_SKIPs. Suite: 1468/0/0. Co-Authored-By: Claude Fable 5 <[email protected]>
Bump the version to 1.0.0 and drop the prerelease flag from the readme and skill installation snippets. The public API surface (39 types, task 144), full Yoga unit-test coverage (task 145), and intrinsic text measurement verification (task 146) are all in place; the suite stands at 1468 passed / 0 failed. Co-Authored-By: Claude Fable 5 <[email protected]>
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
The road-to-1.0 batch (tasks 144-147):
Node.GetChild(int)now returnsNode; newNode.CalculateLayout()instance convenience;Clone()clears the owner per YGNodeClone semantics.zeroOutLayoutRecursivelyreset + performLayout gating,Clone()owner clearing, display:contents clone recursion, and a fullcleanupContentsNodesRecursivelyrewrite to C++ parity.--prerelease.Verification
Publishing the v1.0.0 release after merge pushes the first stable package to nuget.org and triggers the site rebuild (with the timewarp-software search-index wait-gate now in place).
🤖 Generated with Claude Code