Skip to content

ROU-12860: Update Wijmo to 2026v1-Hotfix - Build 5.20261.52 - #528

Merged
OS-giulianasilva merged 8 commits into
devfrom
ROU-12860
Aug 27, 2026
Merged

ROU-12860: Update Wijmo to 2026v1-Hotfix - Build 5.20261.52#528
OS-giulianasilva merged 8 commits into
devfrom
ROU-12860

Conversation

@OS-giulianasilva

@OS-giulianasilva OS-giulianasilva commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

What was happening

The Data Grid was on Wijmo 2026v1 (Build 5.20261.50). ROU-12860 adopts 2026v1-Hotfix (Build 5.20261.52) and asks for a repeatable command so future upgrades stop being hand work.

Two things were quietly wrong before this change:

  • package-lock.json is gitignored, so CI resolved dependencies fresh on every install. Under the ^5.20261.50 caret it was already installing .52 against vendored .50 types — the declared dependency and the vendored definitions had drifted apart with nothing to detect it.
  • Constants.ts had OSDataGridVersion = '2.23.1' while package.json and gulp/DefaultSpecs.js said 2.24.0. gulp gtaSetVersion builds its search string from DefaultSpecs and calls String.replace with no match assertion.

What was done

Dependency and vendored assets

  • package.json pins wijmo at 5.20261.52 exactly. The pin is the fix for the drift above, not a style preference.
  • src/@types/wijmo-5.20261.50/src/@types/wijmo-5.20261.52/ — 47 root .d.ts + 50 cultures, copied from the distribution archive. Worth knowing for next time: that set comes from three sources, not one — Dist/controls (45), Dist/interop/meta for wijmo.meta.d.ts, and npm for wijmo.interop.grid.d.ts, which the archive ships in no global-flavour copy anywhere.
  • styles/wijmo.css refreshed. styles/Grid.css is unchanged.

Source

  • Both Constants.ts version strings corrected.
  • preventCut: true on the FlexGrid provider config, opting out of the release's new Ctrl+X handling (WJM-37524). The grid has no cut hook, so cut-cleared cells would bypass validation marks, OnCellValueChange and undo/redo. Verified in the browser, since the option bag is untyped at the provider boundary and no build can check it.

Build fix (commit 966b102)

cleanOldFiles in gulpfile.js piped its delete stream without returning it and called cb() immediately. The TypeScript compile that follows is synchronous and blocks the event loop, starving the glob's readdir; when it finally ran it listed dist/ after the compile had written the bundle and deleted exactly those files. npm run build was exiting 0 with an empty dist/. Returning the stream fixes it. This is pre-existing and affects everyone, not just this ticket — it is in scope here only because the upgrade cannot produce GridFramework.js without it.

Not verified: whether CI loses the same race. azure-pipelines.yml publishes dist/GridFramework.js as an artifact, so it may have been publishing an empty directory. Worth opening a past build's artifact.

Upgrade automation

.claude/commands/upgrade-wijmo-version.md plus .claude/skills/upgrade-wijmo-version/ — the phase sequence, the guardrails, and four reference files (module inventory, changeset recipe, workaround inventory, Confluence/Jira targets). The shape is recorded in ADR-0008; the vocabulary in CONTEXT.md.

Documentation

  • ADR-0007 — the upgrade decision, the breaking-change assessment, the workaround review and the first run's execution record.
  • Confluence: Check the ticket in Jira for the links.

Test Steps

Against OutSystemsDataGridSample_ROU12860, on the module merged onto the protected one and published:

  1. In the console, confirm the runtime gate — the second line is the only reliable proof the Wijmo runtime is on the new build rather than just our wrapper:
wijmo.grid.FlexGrid.prototype.hasOwnProperty('preventCut')            // true
OutSystems.GridAPI.GridManager.GetActiveGrid().provider.preventCut    // true  
OSFramework.DataGrid.Constants.WijmoFlexGridVersion                   // '2026v1-Hotfix Wijmo - Build 5.20261.52'  
  1. Select several cells, press Ctrl+X — no value clears, no OnCellValueChange fires.
  2. Ctrl+C then Ctrl+V into another range — pastes, and still raises validation marks and OnCellValueChange.
  3. Export to Excel and open File → Properties — Company is empty where 5.20261.50 wrote GrapeCity, Inc. (WJM-37633). Provable statically too: the .50 wijmo.xlsx carries that fallback once, the .52 zero times.
  4. Type 1.2345 and paste 1.2345 into a 2-decimal column — both render 1.23.
  5. Regression: render, sort, filter, group, edit; grouped CSV export contains no <b> or </b>; tooltips display.

All of the above passed. The pre-upgrade baseline was the live public sample, which stays on the released build for the length of the upgrade.

Screenshots

N/A — no intended visual change. The filter panel was compared against the public sample and matches.

Checklist

  • npm run build passes with no errors or warnings
  • Requires changes in OutSystems — the module was refreshed and published for validation; the release publish is a follow-up
  • Automated regression suite (outsystems-datagrid-tests) — not run, and its outcome gates taking this PR out of draft
  • Release notes draft
  • RPM board and the Third-Party Tools registry
  • The child page's operator sections: Fixed Issues, New issues found, RPMs, automated-test runs
  • The Jira ticket's What I Did block — a comment carries the content; the description template is still to be filled with /enrich-jira-task

cleanOldFiles piped gulp.src into gulp-clean without returning the stream and
called cb() immediately, so gulp started the transpile with the delete still
pending. The TypeScript compile is synchronous and blocks the event loop for
seconds, starving the glob's readdir; when it finally ran it listed dist/ after
the compile had written the bundle and unlinked exactly those fresh files.

Effect: npm run build exited 0, reported zero diagnostics, and left dist/ empty.
Not intermittent -- the delete was reliably scheduled after the write, so the
build looked like it simply produced nothing.

Returning the stream makes gulp wait for the delete before transpiling. Verified
in the failing case (dist/ populated beforehand): cleanOldFiles now takes 12-21ms
instead of under a millisecond, stale files are removed, and dist/GridFramework.js
is produced. Repeat runs are idempotent.
Moves the FlexGrid provider from 5.20261.50 to 5.20261.52, and delivers the
repeatable upgrade procedure the ticket asked for.

Dependency and assets
- package.json pins wijmo at 5.20261.52 exactly, replacing the ^5.20261.50
  caret. package-lock.json is gitignored, so CI resolved fresh on every
  install and was already pulling .52 against vendored .50 types.
- src/@types/wijmo-5.20261.50 -> src/@types/wijmo-5.20261.52 (47 root .d.ts
  + 50 cultures), copied from the distribution archive. Note the root set
  spans three sources: Dist/controls, Dist/interop/meta for wijmo.meta.d.ts,
  and npm for wijmo.interop.grid.d.ts, which the archive ships in no
  global-flavour copy at all.
- styles/wijmo.css refreshed. styles/Grid.css unchanged: the filter-panel
  override still matches the refreshed DOM.

Source
- Constants.ts: WijmoFlexGridVersion bumped, and OSDataGridVersion corrected
  2.23.1 -> 2.24.0. That drift was not cosmetic - gulp gtaSetVersion builds
  its search string from DefaultSpecs and had been silently failing to update
  this file on every release.
- preventCut: true on the FlexGrid provider config, opting out of the new
  Ctrl+X handling (WJM-37524). The grid has no cut hook, so cut-cleared cells
  would bypass validation marks, OnCellValueChange and undo/redo.

Upgrade automation
- .claude/commands/upgrade-wijmo-version.md and
  .claude/skills/upgrade-wijmo-version/ - the procedure, its guardrails and
  four reference files. Shape recorded in ADR-0008; vocabulary in CONTEXT.md.
- ADR-0007 records the upgrade, the breaking-change assessment, the workaround
  review (six sites, all kept) and the execution record of the first run.

Breaking changes assessed: XLSX no longer writes a default Company of
GrapeCity, Inc. (WJM-37633, observable, no code change); InputNumber
truncation unified (WJM-22911, no impact - truncate is never set); Angular
minimum raised (WJM-37615, not applicable - no Angular wrapper).
The automation-shape record was written before the skill had ever run. This
notes what the ROU-12860 run confirmed, the three details it changed
(a fourth reference file, the phase reorder so the PR exists before the two
documentation phases, and delegating Jira enrichment to /enrich-jira-task),
and which of its stated risks landed.

The risk that landed is the one worth reading: reference data can be wrong on
the day it is written, not only drift later. The recipe called the block
route verified on a probe that could not distinguish success from
destruction.
…ecipe

The recipe illustrated the cross-reference key format with a fragment of a
real module's eSpace key. The guardrail is that recorded knowledge carries
object names and shapes, never keys, so state the shape as
<eSpace key>*<object key> instead. Also names both key spaces explicitly:
GlobalKey for cross-references, Key for addressing the object.
@OS-giulianasilva
OS-giulianasilva marked this pull request as ready for review August 26, 2026 16:23
@OS-giulianasilva
OS-giulianasilva requested a review from a team as a code owner August 26, 2026 16:23
Comment thread .claude/skills/upgrade-wijmo-version/references/changeset-recipe.md Outdated
@sonarqubecloud

Copy link
Copy Markdown

@OS-giulianasilva
OS-giulianasilva merged commit ac3c21b into dev Aug 27, 2026
12 checks passed
@OS-giulianasilva
OS-giulianasilva deleted the ROU-12860 branch August 27, 2026 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants