Skip to content

v0.8.0-rc2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Nov 09:16
197ff6b

This is a release candidate: an early-testing build. Try it, and report what breaks - problems found here are problems not shipped to everyone. UI/UX and copy work on this line is still in progress.

FerriteLib is a prerequisite library mod for Coahuilite mods that use its UI kit. It adds no game content of any kind - no Defs, no patches, no textures - and its entire payload is 1.6/Assemblies/FerriteLib.UiKit.dll.

Installing

  1. Unzip this archive directly into RimWorld/Mods/. It contains a top-level FerriteLib folder, so the result is Mods/FerriteLib/....
  2. Install the mod that needs it (currently Universal Squeaker) from its own releases page.
  3. Enable both in the mod list. RimWorld will warn if the consumer is enabled without this one.

Do not copy FerriteLib.UiKit.dll into another mod's folder. Exactly one carrier of that assembly may be installed; two of them bind by load order through the game's single global AssemblyResolve and the copy that loses has no way to find out.

Version identity

Package id coahuilite.ferritelib
Release v0.8.0-rc2
Game RimWorld 1.6
Built from commit 197ff6b3ae99bb3e957e22eaa8be70aca5858447
ZIP asset SHA-256 97CD4AC4D6EA1412305AE5010912992BC3102390B0AFF19FB4B1C5F1C1CC96F0

The SHA-256 above identifies the downloaded FerriteLib-v0.8.0-rc2.zip archive, not the DLL inside it. The extracted version.txt separately records the payload DLL's SHA-256. The consumer repository links to this release instead of shipping another copy. The full source of this exact build is https://github.com/Coahuilite/FerriteLib at tag v0.8.0-rc2 (commit 197ff6b3ae99bb3e957e22eaa8be70aca5858447); the license terms travel inside the package as LICENSE.

0.8.0-rc2 — retained layout and dependable verification

Release candidate with RimWorld 1.6 and basic 1.7 compatibility, not a stable/latest release.
Native 1.7 rendering and main interactions still await human acceptance. FerriteLib remains a no-content
prerequisite with one runtime DLL, no Defs/patches/textures and no settings or save data of its own.

Changes from rc1

  • Read-only bindings on text/wrapped now use normal foreground rather than disabled grey, subject
    to Tone/Emphasis/TextColor. This is the shared FL baseline: A and B both become brighter, as does
    delivery-r8 when it adopts the new FL, even where A's own source is unchanged. Interactive read-only
    controls and explicit shared writable:false calls retain their previous behavior.
  • Seven optional TextColor slots inherit independently without adding palette roles. Theme/instance/local
    runtime declarations use the public-unstable UiTextColours facade; resolved styles carry the selected ink.
  • Native event mapping uses explicit enum values; Repeat template-root visibility follows the normal
    invalidation path.
  • Canonical palette lookup avoids repeated parsing/reflection. Resolved appearance and detached rollback
    facts are reused only while their actual declaration, ancestor, theme and font inputs remain valid.
  • The shared synchronous layout pipeline validates stable domains before full candidate preparation.
    It uses first-write leaf records, first-touch arrangement backups and immutable sparse geometry.
    Unknown/legacy/structural domains retain the complete transaction, including multi-root remaining-height
    dependencies. Draw, current hit geometry, native editors and required Repaint calls remain active.
  • Verification now restores explicit roots once, builds distinct Core/Release/Dev variants and executes
    the built outputs. Stub dependencies share the normal graph. Complete logs and input/configuration,
    exit and timing summaries survive failures as well as success.
  • A local basic 1.7 compatibility candidate isolates Unity-only font-environment metadata from the
    common text path. Unity 1.6 retains its original fingerprint; other font providers use the existing
    conservative no-reuse contract. Both game versions select one payload. Native 1.7 rendering and
    main interactions remain awaiting human acceptance; this is not a complete Waylith adapter.
  • Standard draw guards retain and report request errors and their actual target without tripping the
    widget, retrying the request or rolling back business effects. Optional reporting failures stay isolated.
  • A registry first explicitly enrolled after Host construction joins that view's presentation and
    demand pipeline at the next legal synchronization; ordinary bindings need no early registration.
  • Initial document attachment restores staged Host state on failure and changes dependencies only
    after staging succeeds. Seal/retirement remains an irreversible committed result.

Compatibility and upgrade

Supported 0.8 source, compiled-consumer, XML and legal-use contracts remain protected. There is no new
purity/subscription prerequisite for ordinary getters, old Measure or ITextMetrics. The API/build base
remains 0.8.0; the rc2 tag/archive identifies the trial, while the DLL additionally records its real source
commit. Retained domains still perform validity/Draw/hit walks; this is not pixel retention or automatic
background layout.

Exit the game before replacing the complete FerriteLib folder with the selected package. Keep exactly
one enabled carrier of FerriteLib.UiKit.dll; do not put a second copy in a consumer mod. Consumers compile
against that exact fixed DLL with Private=false and assert their supported API range, normally
[0.8.0,0.9.0). Keep the last accepted complete consumer/library pair for rollback. Do not clear player
configuration to upgrade the library, and do not disable it while an enabled consumer depends on it.

Use the DLL from the selected release asset. Its tag and full source commit identify the package;
local development builds have separate identities.

Playtest results and known limitations

Numeric FontSize1..96 is implemented in the current source through public-unstable composed production
entries, without changing Stable signatures or old singleton/override conditions. Standard windows and
independent authors can use the same effective alias/size for measurement, layout, drawing, cache, fit
and retained display. Explicit text/state colour reaches the real native editor request, not only labels.
Invalid numbers are refused; unsupported purposes report the effective preset and reason.

The1.6 numeric label/editor routes remain 静态候选、待原生.1.7 labels are a source-level candidate
with an explicit capability switch; editors do not support numeric size and fall back with a report.
No1.7 numeric-label level is advertised for release before the user's1.7 screenshot coverage. Font/IME,
caret/selection, exception-state restoration, language fallback, UIScale and extreme-size behavior remain
native acceptance gaps. Existing stub checks are not pixel acceptance. See the
implementation status and
author guide.

The user accepted stable FPS for US2f22bec/FL833c14f4 and later reported that
USea610fa/FL833c14f4 worked well in internal playtesting. The trial did not include a detailed
per-action, resolution, language or IME record.

Cold-opening peaks, independent HUD cost, detailed font/IME/overlap/scaling and real configuration-save
coverage remain incompletely characterized. Some earlier headless game checks reported errors.
The local basic 1.7 candidate is described in the build guide.
No complete/native-accepted 1.7 adapter, new window manager or asynchronous dispatch is delivered.

Changes since v0.8.0-rc1

  • 197ff6b Merge FerriteLib 0.8.0-rc2 maintenance baseline
  • 94d36fc docs: align 0.8 maintenance scope and privacy policy
  • cd8b2ae fix(uikit): preserve successful layout revisions and Dev paths
  • a85ce32 docs: align line-specific engineering and handoff rules
  • 15b5422 feat(uikit): baseline existing 0.8 workbench and script contracts
  • 8c6d0ff feat(uikit): add composable text appearance controls
  • c1a5091 build: map RimWorld 1.7 candidates to the shared 1.6 payload
  • 7e9db67 fix(kernel): preserve request failures and document lifecycle ownership
  • 26d9f19 docs: consolidate the 0.8 specification and preserve superseded contracts
  • cf1cf64 Make rc2 release copy reader-facing
  • 79c73e7 Separate verification actions from retry guidance
  • 6ec0c31 Unify verification graphs and prepare rc2 local release inputs
  • 4fb27e3 Update window guide with accepted performance and compact browsing
  • f12d1ec Close fixed incremental consumer integration status
  • 833c14f Preserve remaining-height constraints across root reflow
  • 704c4c1 Keep incremental public geometry snapshots data-only
  • 085d330 Retain idle content-reference geometry without blocking adopted pages
  • 594927f Implement stable-domain incremental layout publication
  • 6038213 docs: refine window navigation help and palette guidance
  • 36fa7ad perf(properties): reuse detached rollback backups between writes
  • 2309cd3 perf(properties): retain resolution for exact unchanged inputs
  • 6f0238d docs: record reported page input recovery and remaining latency
  • 4863667 perf(palette): fast-path canonical roles and enum validation
  • b6b89ed docs: clarify native event mapping and Repeat visibility
  • f362c99 fix(layout): honor visibility on Repeat template roots
  • 069b88a fix(adapter): map native event phases without enum names
  • bdb4fb0 docs: record native window interaction failure lessons
  • f19c11a docs: refine desktop window interaction guidance
  • cb99263 docs: document RimWorld window sizing and UI scale
  • 98aaa1c docs: reflect published 0.8 RC status

Status

Supported stable contracts protect source, compiled consumers, XML vocabulary, behavior and legal use conditions within the same game/adapter target. After publication, breaking one requires a major release. Deprecation also retains the old contract through two complete subsequent published minors; that minimum does not permit a breaking minor removal, and a 1.x transition cannot shorten it. Experimental surface changes require explicit migration. Consumers still assert their tested API range in code, because RimWorld's modDependencies cannot express a version.

This build targets RimWorld 1.6. Internal playtesting of US ea610fa with FL833c14f4 was reported to work well. FerriteLib adds nothing to saves and stores no settings of its own; keep it installed while any consumer mod (currently Universal Squeaker) depends on it.

Testing status: automated 0.8 checks cover the complete engine-free core, retained controls and containers, editing/recovery protocols, public author paths and fixed-source consumer integration. This workflow runs those checks, including the Dev-only instrument, before building this fresh Release-configuration archive. The internal trial has no detailed per-action, font/IME, language or resolution record. Cold-opening peaks, independent HUD cost, overlap/scaling and real configuration-save coverage remain incompletely characterized. Some earlier headless game checks reported errors. A compiled/native 1.7 adapter is not delivered. Earlier 0.7 native observations apply to their original builds.