Skip to content

Upgrade Fable and fix validation compatibility - #66

Merged
bitsforthought merged 2 commits into
mainfrom
fix/fable-upgrade-compatibility
Oct 11, 2026
Merged

bitsforthought merged 2 commits into
mainfrom
fix/fable-upgrade-compatibility

Conversation

@bitsforthought

@bitsforthought bitsforthought commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Purpose

Incorporates and supersedes the dependency changes in #61: Fable 5.1.0 to
5.20.0 and Fable.Core 5.0.0 to 5.3.0, together with fixes for all three validation
failure classes. This is one PR based on main; #61 can be closed separately.

Compatibility fixes

  • TypeCheck: exclude the vendored Fable modules and generated runtime bridge
    from root-file discovery. The new optional Temporal modules are unused by this
    application but lack ambient types in the current TypeScript configuration.
    First-party generated files remain roots, and imported runtime modules remain
    type-checked. No Temporal enablement, polyfill, or TypeScript upgrade is needed.
  • Lint: use shared test-only adapters to restore the generated AppMode
    factories' exact union-returning signatures. The
    nullary union identity issue
    led to the singleton implementation,
    whose any-typed static fields cause factory return-type inference to lose
    information. The helper comments link both references without claiming either
    is a dedicated typing-regression issue.
  • CoverageTypeScript: assert canonical Mode/Locale defaults by value rather
    than distinct immutable union identities. Exercise a real per-entity mode
    update, preserve independent NodeLabel records, and verify both adapter cases
    with independent boolean expectations.

The ordinary AppMode DU, production F# APIs, Koota bridge, ESLint rules, and
coverage baselines remain unchanged. Build documentation describes the current
runtime root-discovery policy.

Removing the obsolete codegen workaround

The follow-up commit removes scripts/PatchFableModules.fsx and its pipeline and
self-test references. The original
generic interface bug
is closed as completed; fixes
4685 and
4686 shipped in Fable 5.5.0.
Fresh Fable 5.20.0 output correctly scopes generic method parameters, and all
four former patch targets type-check without @ts-nocheck. Compilation and
runtime bridge generation remain in their original order.

Validation and review

  • Reproduced 76 Temporal diagnostics, seven unsafe-any lint errors, and the
    default-identity test failure before the fixes.
  • New adapter tests failed at runtime against type-correct swapped-case stubs,
    then passed with the intended factories.
  • Compiler probes confirm exact union adapter signatures, rejection of invalid
    mode values, preserved first-party roots, and continued checking when an
    otherwise excluded Temporal module is explicitly imported.
  • npm run validate "--" --ci passed on Windows/PowerShell: 231 TypeScript tests,
    765 .NET tests, formatting, infrastructure self-tests, lint, type-check, bundle,
    and coverage ratchets. F# line/branch coverage is 98.6%/93.3%; TypeScript is
    99.5%/98.9%. No baselines were changed.
  • Multi-model adversarial review used Anthropic, OpenAI, and Google models.
    Round one found one stale header comment, which was corrected; all three
    reviewers returned a clean delta review in round two.
  • The removal-only follow-up was validated after no-cache regeneration of core
    and portable ECS output. All four former patch targets contain no suppression
    markers, and full CI-mode validation passed again. A separate three-model
    review of that removal returned clean across all reviewers.

Ubuntu and Windows PR validation checks provide the native cross-platform gate.

Upgrade Fable to 5.20.0 and Fable.Core to 5.3.0 while keeping optional runtime
modules out of TypeScript root discovery. Continue checking imported runtime
dependencies and first-party generated code without enabling unused Temporal
support or weakening compiler checks.

Restore generated AppMode factory signatures in test-only adapters, and test
canonical defaults and per-entity state isolation instead of immutable union
allocation. Preserve the production F# model and Koota bridge unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 742f838e-44a9-49ba-956e-f38dea314871
@bitsforthought bitsforthought changed the title Upgrade Fable and preserve typed ECS test boundaries Upgrade Fable and fix validation compatibility Oct 10, 2026
@bitsforthought bitsforthought self-assigned this Oct 11, 2026
Delete the suppression script and its build invocation now that Fable emits
correctly scoped generic interface methods. Update the pipeline self-test and
development documentation while preserving compilation and bridge generation.
Fresh output now passes TypeScript checking without any of the four previous
file-wide suppressions.

The upstream fix for fable-compiler/Fable#3586 shipped in Fable 5.5.0 through
fable-compiler/Fable#4685 and fable-compiler/Fable#4686, and is included in the
pinned compiler upgrade.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 742f838e-44a9-49ba-956e-f38dea314871
@bitsforthought
bitsforthought merged commit b17880f into main Oct 11, 2026
2 checks passed
@bitsforthought
bitsforthought deleted the fix/fable-upgrade-compatibility branch October 11, 2026 00:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant