Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
691 commits
Select commit Hold shift + click to select a range
181bf57
chore(ci): apply shard/filter to smoke-modules list
lifeart Apr 27, 2026
e7dda3c
chore(deps): bump @lifeart/gxt to 0.0.61
lifeart Apr 27, 2026
cb0ede4
fix(gxt-backend): refresh state.currentGetter on pool reuse so child …
lifeart Apr 27, 2026
16d1294
chore: prettier fixup on gxt-backend/manager.ts
lifeart Apr 27, 2026
1002792
fix(ci): isolate gxt runtime from classic-mode bundle via alias stub
lifeart Apr 28, 2026
f72b48a
Revert "fix(ci): isolate gxt runtime from classic-mode bundle via ali…
lifeart Apr 28, 2026
78dcb63
fix(gxt): route classic {{#each}} through $_eachSync for DOM-node ide…
lifeart Apr 28, 2026
392eeec
fix(ci): set GXT_MODE=true for Basic Test and variant-tests
lifeart Apr 28, 2026
730cb46
fix(ci): drop preserveModules from GXT-mode build for testem compat
lifeart Apr 28, 2026
98b7365
fix(gxt-backend): thread strict-mode scope() callback into precompile…
lifeart Apr 28, 2026
420295b
fix(gxt-backend): detect SubExpression refs in strict-mode scope thre…
lifeart Apr 29, 2026
221e8e3
fix(gxt-backend): unblock strict-mode runtime template compiler this/…
lifeart Apr 29, 2026
1c51bd4
fix(gxt-backend): suppress destroy-error capture for non-property-dri…
lifeart Apr 30, 2026
03c4948
fix(gxt): swap globalThis.owner per outlet render so engine refinemen…
lifeart Apr 30, 2026
4f68951
fix(gxt-backend): compare _templateFn for route template identity
lifeart Apr 30, 2026
401df7b
fix(gxt-backend): drain leaked classic reactors between tests
lifeart Apr 30, 2026
06212e3
Revert "fix(gxt-backend): drain leaked classic reactors between tests"
lifeart Apr 30, 2026
6ee5180
fix(gxt): self-unsub renderComponent reactor after target stays detached
lifeart Apr 30, 2026
34f9515
debug(gxt): instrument cumulative-state leak path
lifeart May 1, 2026
276a1a4
fix(gxt-backend): drain cross-test classic-reactor leaks at fire time
lifeart May 1, 2026
6699443
Revert "fix(gxt-backend): drain cross-test classic-reactor leaks at f…
lifeart May 1, 2026
6deded4
fix(gxt-backend): drain leaked classic reactors at testDone, not at f…
lifeart May 1, 2026
2891bac
Revert "fix(gxt-backend): drain leaked classic reactors at testDone, …
lifeart May 1, 2026
62cbad8
chore: prettier --write on leak-debug instrumentation
lifeart May 1, 2026
ef6ce28
fix(gxt): tie classic-tag reactors to instance/owner destroy chains
lifeart May 1, 2026
7e9bb9e
Revert "fix(gxt): tie classic-tag reactors to instance/owner destroy …
lifeart May 1, 2026
29062f5
fix(gxt-backend): cap classic-tag reactor fires to break runaway leaks
lifeart May 1, 2026
70c2124
fix(gxt-backend): cap LinkTo reactor fires in renderLinkToElement wra…
lifeart May 1, 2026
e68cb36
fix(gxt-backend): cap classic reactor cross-test fires at 100
lifeart May 1, 2026
a42b371
fix(gxt-backend): add cumulative foreign-fire cap (slow-leak signature)
lifeart May 1, 2026
bd08bd0
fix(gxt-backend): raise cumulative foreign-fire cap to 1500
lifeart May 1, 2026
a511c1c
fix(gxt-backend): soft-disable capped reactors instead of unsubscribing
lifeart May 1, 2026
1805833
fix(ci): disable __GXT_LEAK_DEBUG__ in CI to unblock 41min hang
lifeart May 4, 2026
2748be1
chore(gxt): leak-debug script defaults to ?gxtLeakDebug=true URL
lifeart May 4, 2026
fc15ccc
fix(gxt): clear stale _renderErrors when runTask/runAppend rethrows
lifeart May 4, 2026
97e7532
fix(gxt): renderComponent multi-target siblings + scope-shape collision
lifeart May 4, 2026
5a0ccd3
fix(gxt): clear stale _renderErrors queue at testStart
lifeart May 5, 2026
eafd578
fix(gxt): defensive ensure-attrs before initial didReceiveAttrs trigger
lifeart May 5, 2026
794933c
fix(gxt): mirror dc capture callback in renderGlimmerComponent
lifeart May 5, 2026
5b517a3
Merge remote-tracking branch 'upstream/main' into glimmer-next-fresh
lifeart May 6, 2026
f68f778
fix(gxt): clear __gxtDcCaptureCallback at testStart
lifeart May 6, 2026
65137b5
chore: prettier format renderer.ts
lifeart May 6, 2026
a4a0337
ci(bench): raise --sampleTimeout 60→120 for clearItems4 phase
lifeart May 6, 2026
97ca49e
fix(gxt): harden extractArgKeys + drop dead __dcCaptureInstance writes
lifeart May 6, 2026
5ca30cd
refactor(gxt): plumb dc-capture callback through args (drop global)
lifeart May 6, 2026
c77650d
ci(bench): raise --sampleTimeout 120→240 for cumulative-state bench
lifeart May 6, 2026
95848fe
fix(glimmer): gate templateIsGxt on __GXT_MODE__ to fix classic-mode …
lifeart May 6, 2026
dcccf1f
fix(glimmer): make OutletView dual-mode to fix classic-mode hang
lifeart May 6, 2026
9cbbcc5
fix(internals): gate remaining un-gated GXT additions on __GXT_MODE__
lifeart May 6, 2026
5ea4b3e
refactor(glimmer): defer @lifeart/gxt import out of classic-mode bundle
lifeart May 6, 2026
22cdaf9
fix(glimmer): stop double-firing render errors via lifecycle wrappers
lifeart May 6, 2026
886a632
Revert "fix(glimmer): stop double-firing render errors via lifecycle …
lifeart May 6, 2026
f6c3ecb
fix(gxt): queue microtask flush in __gxtExternalSchedule outside runTask
lifeart May 6, 2026
725f67d
Revert "fix(gxt): queue microtask flush in __gxtExternalSchedule outs…
lifeart May 6, 2026
4b2da18
fix(gxt): tie _gxtEffect lifetime to owning component/element
lifeart May 7, 2026
fe44d12
fix(test-helpers): clear stale gxt render errors at QUnit testStart
lifeart May 7, 2026
dcd000c
fix(perf): unblock classic-mode clearItems4 in benchmark-app
lifeart May 8, 2026
bf33f7a
fix(perf): gate CP set/get gxt bookkeeping + drop dead _tryGxtRender
lifeart May 8, 2026
5bdffd7
fix(gxt): forward opcode errors to _renderErrors via setOpcodeErrorRe…
lifeart May 9, 2026
919c8fa
fix(gxt): make setOpcodeErrorReporter import defensive against 0.0.61
lifeart May 9, 2026
54cf898
fix(gxt): drop captureRenderError from glue-layer throws (Phase 3 ste…
lifeart May 9, 2026
0c91aeb
docs(gxt): document __gxtRenderErrorCount dependency at outer wraps
lifeart May 9, 2026
bcabbcc
feat(gxt): wire setComponentRenderErrorReporter (Fix B host hookup)
lifeart May 10, 2026
ec60880
fix(gxt): delete classic-component outer captureRenderError wraps (Ph…
lifeart May 11, 2026
66957e3
fix(gxt): delete ensureLifecycleErrorCapture, move capture to manager…
lifeart May 12, 2026
ebb26f5
fix(test-helpers): delete runAppend post-render flushRenderErrors (Ph…
lifeart May 12, 2026
5bde183
fix(gxt): throw first destroy error from unclaimed-pool sweep (Phase …
lifeart May 12, 2026
85d1898
fix(gxt): delete dead __gxtRenderErrorCount writes (Phase 3 step 8b c…
lifeart May 12, 2026
08c1470
fix(test-helpers): delete QUnit testStart render-error drain (Phase 3…
lifeart May 12, 2026
0ef61a8
build: introduce build-time __GXT_MODE__ flag (Cluster E pilot infra)
lifeart May 13, 2026
cc00829
refactor(metal): use build-time __GXT_MODE__ in tagForProperty (Clust…
lifeart May 13, 2026
545d6b1
refactor(metal): convert metal/lib runtime __GXT_MODE__ gates to buil…
lifeart May 13, 2026
ff8ca8b
refactor: convert runloop/object/template-compiler __GXT_MODE__ gates…
lifeart May 13, 2026
b8372b3
refactor(routing): convert routing __GXT_MODE__ gates (Cluster E batc…
lifeart May 13, 2026
3eb1611
refactor(glimmer): convert glimmer/lib runtime __GXT_MODE__ gates (Cl…
lifeart May 13, 2026
36a7314
refactor(test-helpers): convert internal-test-helpers __GXT_MODE__ ga…
lifeart May 13, 2026
e8dd1af
refactor(test-helpers): convert @glimmer-workspace/integration-tests …
lifeart May 13, 2026
2fb4a15
refactor(test-helpers): convert glimmer integration test __GXT_MODE__…
lifeart May 13, 2026
c16a823
refactor(gxt-backend): introduce typed gxt-bridge for destruction hoo…
lifeart May 13, 2026
3087788
refactor(gxt-backend): migrate backtracking-frame hooks to gxt-bridge…
lifeart May 13, 2026
5987e2d
refactor(gxt-backend): migrate view-utils + parent-view stack hooks t…
lifeart May 13, 2026
df34540
refactor(gxt-backend): migrate format helper + clean orphan globalThi…
lifeart May 13, 2026
a8c7a6a
refactor(gxt-backend): migrate compile-pipeline hooks + clean orphan …
lifeart May 13, 2026
42d9ccc
refactor(gxt-backend): migrate compile-pipeline II / register-owners …
lifeart May 13, 2026
5947418
refactor(gxt-backend): migrate __gxtDirectModule via runtime bridge (…
lifeart May 13, 2026
11be7a7
refactor(gxt-backend): migrate render-pass triad via renderPass bridg…
lifeart May 13, 2026
7d7356e
refactor(gxt-backend): migrate reverse-flow root-component hooks via …
lifeart May 13, 2026
167db81
refactor(gxt-backend): migrate __gxtCheckBacktracking via backtrackin…
lifeart May 13, 2026
9d060b5
refactor(gxt-backend): migrate __gxtRebuildViewTreeFromDom via viewUt…
lifeart May 13, 2026
dddf2db
refactor(gxt-backend): migrate __gxtSyncAllWrappers via compilePipeli…
lifeart May 13, 2026
39cf0b0
refactor(gxt-backend): migrate __gxtClearInstancePools via compilePip…
lifeart May 13, 2026
9743bd7
refactor(gxt-backend): migrate __dcChangeListeners Set + counter via …
lifeart May 13, 2026
fce318c
refactor(gxt-backend): migrate __gxtTriggerReRender via compilePipeli…
lifeart May 13, 2026
4e1b181
refactor(gxt-backend): migrate __gxtOriginalManagers via runtime brid…
lifeart May 13, 2026
8126ba5
refactor(gxt-backend): add withTriggerSuppressed helper + drop two de…
lifeart May 13, 2026
f3379b9
refactor(gxt-backend): graduate __gxtInTriggerReRender to typed withI…
lifeart May 13, 2026
a96e264
refactor(gxt-backend): graduate __gxtIsRendering predicate to compile…
lifeart May 13, 2026
581db92
refactor(gxt-backend): graduate __gxtSyncing predicate + migrate @emb…
lifeart May 13, 2026
71ff4b8
refactor(gxt-backend): graduate __gxtSetIsRendering writer to withRen…
lifeart May 13, 2026
4c0c52d
refactor(gxt-backend): graduate __gxtCurrentlyRendering flag to compi…
lifeart May 13, 2026
298c765
refactor(gxt-backend): drop __gxtInTriggerReRender globalThis slot — …
lifeart May 13, 2026
724831e
refactor(gxt-backend): drop __gxtSyncing globalThis slot — graduate t…
lifeart May 13, 2026
249d148
refactor(gxt-backend): migrate first two __gxtTriggerReRender cross-p…
lifeart May 13, 2026
a78db40
refactor(gxt-backend): migrate 5 more __gxtTriggerReRender readers (p…
lifeart May 13, 2026
b2e088e
refactor(gxt-backend): migrate 4 remaining SAFE __gxtTriggerReRender …
lifeart May 14, 2026
2d345e0
refactor(gxt-backend): drop __gxtTriggerReRender globalThis writer — …
lifeart May 14, 2026
b80de89
refactor(gxt-backend): migrate __gxtTrackedSetSinceRerender to mark+c…
lifeart May 14, 2026
75ccc18
refactor(gxt-backend): migrate __gxtSyncCycleId integer counter to re…
lifeart May 14, 2026
2b9fe5f
refactor(gxt-backend): graduate __gxtSyncAllInFlightCycle + __gxtSync…
lifeart May 14, 2026
2a27fb9
refactor(gxt-backend): graduate __gxtAllPoolArrays to module-local _a…
lifeart May 14, 2026
ffa9b71
refactor(gxt-backend): graduate __gxtModifierInstallWatchers to modul…
lifeart May 14, 2026
033274d
refactor(gxt-backend): graduate __gxtSyncIsPropertyDriven to module-l…
lifeart May 14, 2026
8cccd23
refactor(gxt-backend): graduate __gxtHadPendingSync to module-local _…
lifeart May 14, 2026
a31a393
refactor(gxt-backend): graduate __gxtPendingSyncFromPropertyChange to…
lifeart May 14, 2026
2670203
refactor(gxt-backend): graduate __gxtPendingSync to module-local _gxt…
lifeart May 14, 2026
c6ad7df
refactor(gxt-backend): graduate __gxtRunTaskActive to module-local _g…
lifeart May 14, 2026
f1d397a
refactor(gxt-backend): graduate __gxtPendingModifierDestroys to modul…
lifeart May 14, 2026
5021ffa
refactor(gxt-backend): graduate __gxtAfterRenderPropertyChange to mod…
lifeart May 14, 2026
7200c6a
refactor(gxt-backend): graduate __gxtInAfterRender to module-local _g…
lifeart May 14, 2026
5fe91fc
refactor(gxt-backend): graduate __gxtMutContext to module-local _gxtM…
lifeart May 14, 2026
061bfcc
refactor(gxt-backend): graduate __gxtLastArgSourceKey + __gxtLastArgS…
lifeart May 14, 2026
303432f
refactor(gxt-backend): graduate __gxtTrackArgSource to module-local _…
lifeart May 14, 2026
f33f637
refactor(gxt-glimmer): graduate __gxtForceRerenderInProgress to modul…
lifeart May 14, 2026
6d553db
refactor(gxt-glimmer): graduate __gxtDirtyRootsAtSync to module-local…
lifeart May 14, 2026
ff7e2ac
refactor(gxt-glimmer): graduate __gxtRenderDepth to module-local _gxt…
lifeart May 14, 2026
0733470
refactor(gxt-backend): retire __gxtNestedTrackingProxies globalThis p…
lifeart May 14, 2026
060a67f
refactor(gxt-backend): retire __gxtIsInRenderPass orphan globalThis s…
lifeart May 14, 2026
2cc7472
refactor(glimmer): retire __gxtMorphChildren orphan globalThis slot i…
lifeart May 14, 2026
35ec7e2
refactor(glimmer): retire __gxtRerenderedRoots orphan globalThis slot…
lifeart May 14, 2026
66cc08b
refactor(gxt-backend): retire __gxtSuppressDestroyCapture globalThis …
lifeart May 14, 2026
45e8fee
refactor(gxt-backend): retire __gxtInstancesMarkedForDestruction glob…
lifeart May 14, 2026
20dec3d
refactor(gxt-backend): migrate __gxtClearRenderErrors to typed bridge…
lifeart May 14, 2026
8a7952d
refactor(gxt-backend): graduate __gxtClearIfWatchers to module-local …
lifeart May 14, 2026
42fed1b
refactor(gxt-backend): graduate __gxtClearTagHelperCache to module-lo…
lifeart May 14, 2026
2c9470f
refactor(gxt-backend): graduate __curriedRenderInfos to module-local …
lifeart May 14, 2026
e4c9311
refactor(gxt-backend): graduate __gxtPreFlushFiredFalse to module-loc…
lifeart May 14, 2026
4fa71c3
refactor(gxt-backend): graduate __gxtLastSafeStringResult to module-l…
lifeart May 14, 2026
c07a9b8
refactor(gxt-backend): graduate __gxtSuppressDirtyTagForDuringRebuild…
lifeart May 14, 2026
0385e13
refactor(gxt-backend): graduate __gxtTemplateOnlyRenderedSet + __gxtT…
lifeart May 14, 2026
e6523c2
refactor(gxt-backend): graduate __gxtTemplateOnlyRenderedSetPassId to…
lifeart May 14, 2026
872ce1d
refactor(gxt-backend): graduate __gxtInElementDeferredRender to modul…
lifeart May 14, 2026
5618e5f
refactor(glimmer): graduate __gxtRootOutletRerenderMap to module-loca…
lifeart May 14, 2026
cb95a78
refactor(glimmer): graduate __gxtCurrentParentIfRef to module-local i…
lifeart May 14, 2026
a955c9d
refactor(glimmer): graduate __gxtCommentRegistry + __gxtCommentCounte…
lifeart May 14, 2026
cba270c
refactor(glimmer): graduate __gxtInElementFallbackIds to module-local…
lifeart May 14, 2026
0ebd225
refactor(gxt-backend): migrate __gxtWrapperIfUserFalse to typed bridg…
lifeart May 14, 2026
a767a4d
refactor(gxt-backend): retire orphan __gxtCaptureRenderError dead-cod…
lifeart May 14, 2026
2a382b8
refactor(gxt-backend): graduate __gxt_origMaybeHelper to module-local…
lifeart May 14, 2026
8a8378c
refactor(gxt-backend): inline strict $_maybeHelper shadow to retire _…
lifeart May 14, 2026
7512a34
refactor(gxt-backend): inline __gxtUnboundEval + __gxtUnboundResetSlo…
lifeart May 14, 2026
cb127fc
refactor(gxt-backend): inline __gxtAssertNotResolvedHelperAsNamedArg …
lifeart May 14, 2026
ecb52b6
refactor(gxt-backend): inline __gxtQuotedAttr + retire dead __gxtNorm…
lifeart May 14, 2026
ae93f8e
refactor(gxt-backend): migrate __gxtInElementInsertBeforeValue + __gx…
lifeart May 14, 2026
61772f8
refactor(gxt-backend): graduate __gxtInElementDrainDeferred to module…
lifeart May 14, 2026
9bba052
refactor(gxt-backend): migrate __gxtResolverCacheCounters to typed br…
lifeart May 14, 2026
1c6a749
refactor(gxt-backend): graduate __gxtSeen{Helper,Component}{Definitio…
lifeart May 14, 2026
954944c
refactor(gxt-backend): graduate __gxtQUnitWhitespacePatched to module…
lifeart May 15, 2026
ebf3b84
refactor(gxt-backend): graduate __gxtRootOutletRerenderInstrumentInst…
lifeart May 15, 2026
b76e6ce
refactor(gxt-backend): graduate __gxtContextId to module-local in com…
lifeart May 15, 2026
d8ca274
refactor(gxt-backend): graduate __gxtEntriesOfPatchScheduled to modul…
lifeart May 15, 2026
17813b0
refactor(gxt-backend): graduate __gxtEmberFormValueUndefinedPatched t…
lifeart May 15, 2026
85bbc5d
refactor(gxt-backend): graduate __gxtInstallHelperRecomputeBridge to …
lifeart May 15, 2026
f3e20fd
refactor(gxt-backend): drop orphan __gxtDebugCompiledCodes write-only…
lifeart May 15, 2026
f49d312
refactor(gxt-backend): migrate __gxtNotifyHelperPropertyChange to typ…
lifeart May 15, 2026
67ff908
refactor(gxt-backend): migrate __gxtClearHelperCache to typed bridge …
lifeart May 15, 2026
7f5db7b
refactor(gxt-backend): migrate __gxtDestroyReattachInProgress to type…
lifeart May 15, 2026
bc465e1
refactor(gxt-backend): migrate __gxtEngineInstances to typed-bridge g…
lifeart May 15, 2026
ca187b6
refactor(gxt-backend): migrate __gxtNewRenderPass to typed bridge in …
lifeart May 15, 2026
f717489
refactor(gxt-backend): migrate __gxtPostRenderHooks to typed bridge i…
lifeart May 15, 2026
2529fc6
refactor(gxt-backend): graduate __gxtNamespace to module-local in com…
lifeart May 15, 2026
6ccd64b
refactor(gxt-backend): graduate __gxtFormula to module-local in compi…
lifeart May 15, 2026
aa3c525
refactor(gxt-backend): migrate __gxtSuppressDirtyInRcSet to typed bri…
lifeart May 15, 2026
b04e72d
refactor(gxt-backend): migrate __gxtForceEmberRerender to typed bridg…
lifeart May 15, 2026
b7bfb93
refactor(gxt-backend): migrate __gxtHadNestedObjectChange to typed pa…
lifeart May 15, 2026
a670a75
refactor(gxt-backend): graduate __gxtDeferredSyncError to module-loca…
lifeart May 15, 2026
aa0ae83
refactor(gxt-backend): migrate __gxtTagHelperInstanceCache to typed g…
lifeart May 15, 2026
d176329
refactor(gxt-backend): migrate __gxtClassHelperInstanceCache to typed…
lifeart May 15, 2026
2310283
refactor(gxt-backend): retire __gxtResetIntervalBudget orphan globalT…
lifeart May 15, 2026
357e783
refactor(metal): retire __gxtMarkObjectAsDirty orphan globalThis writ…
lifeart May 15, 2026
172bd27
refactor(gxt-backend): retire __gxtLeakSnapshot orphan globalThis wri…
lifeart May 15, 2026
331ac52
refactor(gxt-backend): consolidate __gxtLastCreatedEmberInstance to i…
lifeart May 15, 2026
861d461
refactor(gxt-backend): migrate __gxtRecomputeDependents to typed brid…
lifeart May 15, 2026
1ee1d70
refactor(gxt-backend): migrate __gxtCleanupActiveComponents to typed …
lifeart May 15, 2026
7769c02
refactor(gxt-backend): migrate __gxtMorphModifierInvocations + __gxtM…
lifeart May 15, 2026
4369b07
refactor(gxt-backend): migrate __gxtForceRerender to typed bridge in …
lifeart May 15, 2026
c610d80
refactor(gxt-backend): migrate __gxtInOutletRender to paired typed br…
lifeart May 15, 2026
6111de4
refactor(gxt-backend): migrate __gxtTopOutletRef to paired typed brid…
lifeart May 16, 2026
bfdc440
refactor(gxt-backend): migrate __gxtIsForceRerender to paired typed b…
lifeart May 16, 2026
c679b54
refactor(gxt-backend): migrate __gxtRootOutletRerender to typed bridg…
lifeart May 16, 2026
81fb1c9
refactor(gxt-backend): migrate __gxtFlushAfterInsertQueue to typed br…
lifeart May 16, 2026
87f9dce
refactor(gxt-backend): migrate __gxtSkipTextEffects to paired typed b…
lifeart May 16, 2026
537ec83
refactor(gxt-backend): migrate __gxtHelperInstances to typed bridge i…
lifeart May 16, 2026
acbb709
refactor(gxt-backend): migrate __gxtCurrentHelperScope to paired type…
lifeart May 16, 2026
6aabc71
refactor(routing): retire dead __gxtDirtyTagFor reader-fallback (Clus…
lifeart May 16, 2026
c086632
refactor(gxt-backend): migrate __gxtRootContext to paired typed bridg…
lifeart May 16, 2026
bd32b01
refactor(gxt-backend): migrate __gxtComponentContexts to single get-o…
lifeart May 16, 2026
f3d049f
refactor(gxt-backend): retire __gxtTestTransition reader-only orphan …
lifeart May 16, 2026
9fbf2f5
refactor(metal): graduate __gxtCPInvalidationSet to module-local in p…
lifeart May 16, 2026
fbaf06e
refactor(metal): migrate __emberNotifyPropertyChange to typed bridge …
lifeart May 16, 2026
d2f2c21
refactor(glimmer): migrate __emberRenderPassId to paired typed bridge…
lifeart May 16, 2026
0f59c19
refactor(gxt-backend): migrate __gxtSyncDomNow to typed bridge in com…
lifeart May 16, 2026
c3779a8
fix(gxt-backend): Cluster A Phase 1.5 - direct arg-cell update at arg…
lifeart May 16, 2026
9315bd4
refactor(gxt-backend): Cluster A Phase 1.6 - extract _pushIfWatcherNo…
lifeart May 16, 2026
fc7e204
refactor(gxt-backend): Cluster A Phase 1.7a - plumb `value` through t…
lifeart May 17, 2026
2ecc1f6
fix(gxt-backend): Cluster A Phase 1.7b - immediate cell.update at enq…
lifeart May 17, 2026
9af9d9e
refactor(gxt-backend): Cluster A Phase 2a - body split SyncCore + Def…
lifeart May 17, 2026
b1acea6
refactor(gxt-backend): Cluster A Phase 2b - deferred queue infrastruc…
lifeart May 17, 2026
8094797
feat(gxt-backend): Cluster A Phase 2c - defer cascade drain (correcte…
lifeart May 17, 2026
2019977
test(metal): Cluster A Phase 3a step 1 - raise MAX_NOTIFY_DEPTH 10 → 100
lifeart May 17, 2026
04b3074
feat(metal): Cluster A Phase 3a step 2 - remove MAX_NOTIFY_DEPTH guard
lifeart May 17, 2026
3f2a2f6
fix(gxt-backend): #43 propagate init-phase lifecycle hook errors sync…
lifeart May 23, 2026
5655ce4
fix(gxt-backend): L3384 SYNC_OBSERVERS observer leak
lifeart May 23, 2026
01a04ea
fix(gxt-backend): 3 Helper Tracked Properties autotrack tests now pass
lifeart May 23, 2026
2a18356
fix(gxt-backend): 3 trackedMap render reactivity tests now pass
lifeart May 23, 2026
42d6776
fix(gxt-backend): 2 lifecycle without-block component-render tests no…
lifeart May 23, 2026
093ce36
chore(test-runner): chromium safety hardening — lockfile + signal han…
lifeart May 23, 2026
33844a5
fix(gxt-backend): Loops test — bridge iter ref to classic-validator t…
lifeart May 23, 2026
753b6cd
chore(gxt-backend): extend rethrow:true to willRender + willInsertEle…
lifeart May 23, 2026
4501f69
fix(gxt-backend): trackedMap — implement getOrInsert/getOrInsertCompu…
lifeart May 23, 2026
03c68ca
fix(gxt-backend): 3 Custom Modifier Manager tests — skip body-bare-he…
lifeart May 23, 2026
f07677d
fix(gxt-backend): Custom Modifier Manager — destroyModifier hook fire…
lifeart May 23, 2026
0d75a1c
chore(test-runner): fix render-canary hang in cumulative mode via gc(…
lifeart May 23, 2026
22c1e16
chore(gxt-backend): remove dead getVM/getRenderTree cleanup block
lifeart May 23, 2026
c9ede3d
fix(integration-tests): keyword helper JIT-delegate rendering under G…
lifeart May 24, 2026
5ab8ab5
fix(demo-tests): GXT Integration cluster — restore registerComponent …
lifeart May 24, 2026
79fbf00
fix(gxt-backend): trackedSet/trackedWeakMap/trackedWeakSet — delete r…
lifeart May 24, 2026
7b93519
fix(gxt-backend): trusted curly — Object.create(null) renders empty
lifeart May 24, 2026
21c5418
fix(gxt-backend): strict-mode scope shadowing globalThis no longer TD…
lifeart May 24, 2026
989d3fb
fix(integration-tests): symmetric `<!---->` strip in equalsElement un…
lifeart May 24, 2026
c6003e2
fix(gxt-backend): register gt/gte/lt/lte/neq as keyword helpers
lifeart May 24, 2026
3c14641
fix(gxt-backend): Destroyables — brand internal arrays + clear-on-cas…
lifeart May 24, 2026
54240ae
fix(gxt-backend): Ember-spec semantics for and/or/not/eq keyword helpers
lifeart May 24, 2026
d35293c
fix(gxt-backend): gt/gte/lt/lte/neq — unwrap getters + route asserts
lifeart May 24, 2026
699b379
fix(template-compiler): eval-scope extraction allows HTML-tag-named vars
lifeart May 24, 2026
c84d116
fix(gxt-backend): built-in modifiers (on) install without an Ember owner
lifeart May 24, 2026
d7177ad
chore(gxt-backend): remove dead debug logging from itemToNode text ef…
lifeart May 24, 2026
eab42ae
fix(integration-tests): GXT JIT delegate instantiates class components
lifeart May 24, 2026
181fb91
fix(gxt-backend): itemToNode skips first effect re-invocation
lifeart May 24, 2026
c24d5f0
fix(gxt-backend): respect updateHook=false in custom-component-manage…
lifeart May 24, 2026
d2ff38e
fix(gxt-backend): mark fn helper result with __isFnHelper
lifeart May 24, 2026
cb77473
fix(gxt-backend): preserve user shadows of the on modifier in scope
lifeart May 24, 2026
660af90
fix(template-compiler): extract uppercase dotted-path heads for eval …
lifeart May 24, 2026
49878cc
fix(glimmer): outlet rerender — detect model swap/interior-change, fa…
lifeart May 24, 2026
9c2aae4
fix(glimmer): bridge controller-property writes to outlet rerender
lifeart May 24, 2026
5010e84
fix(gxt-backend): bridge element helper through {{element}} + splat
lifeart May 24, 2026
ab83dc9
fix(gxt-backend): query-params controller rerender — extend bridge to…
lifeart May 28, 2026
0411bd6
fix(gxt-backend): in-element self-target re-render — wrapper-fragment…
lifeart May 28, 2026
eba6236
fix(gxt-backend): owner-less custom + curried modifier installation
lifeart May 28, 2026
756c28d
fix(gxt-backend): stable in-element pooling + detached-host lifecycle
lifeart May 29, 2026
2c3cc70
fix(glimmer): preserve text-node identity on outlet model swap
lifeart May 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/ci-jobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,11 @@ jobs:
run: pnpm vite build --mode=development
env:
NODE_ENV: development
GXT_MODE: 'true'
- name: test
run: pnpm test
env:
GXT_MODE: 'true'

variant-tests:
name: ${{ matrix.name }}
Expand Down Expand Up @@ -123,12 +126,14 @@ jobs:
run: pnpm vite build --mode=${{ matrix.BUILD || 'development' }}
env:
NODE_ENV: ${{ matrix.BUILD || 'development' }}
GXT_MODE: 'true'
- name: test
env:
ALL_DEPRECATIONS_ENABLED: ${{ matrix.ALL_DEPRECATIONS_ENABLED }}
OVERRIDE_DEPRECATION_VERSION: ${{ matrix.OVERRIDE_DEPRECATION_VERSION }}
ENABLE_OPTIONAL_FEATURES: ${{ matrix.ENABLE_OPTIONAL_FEATURES }}
RAISE_ON_DEPRECATION: ${{ matrix.RAISE_ON_DEPRECATION }}
GXT_MODE: 'true'

run: pnpm test

Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/gxt-dual-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: GXT dual-build matrix

on:
push:
branches:
- master
- main
- glimmer-next-fresh
pull_request:

permissions:
contents: read

jobs:
build:
name: Build ${{ matrix.backend }}
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
backend: [classic, gxt]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: ./.github/actions/setup
- name: Build (${{ matrix.backend }})
run: |
rm -rf dist
if [ "${{ matrix.backend }}" = "gxt" ]; then
EMBER_RENDER_BACKEND=gxt npx rollup --config rollup.config.mjs
else
npx rollup --config rollup.config.mjs
fi
- name: Upload dist artifact
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: dist-${{ matrix.backend }}
path: dist/prod/packages/
if-no-files-found: warn
77 changes: 77 additions & 0 deletions .github/workflows/gxt-full.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: GXT Full (nightly)

on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:

permissions:
contents: read
issues: write

jobs:
gxt-full:
name: GXT full suite
runs-on: ubuntu-latest
timeout-minutes: 180
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: ./.github/actions/setup
- name: Install Playwright browsers
run: pnpm exec playwright install --with-deps chromium
- name: Run GXT full suite vs baseline
id: gxt-run
env:
GXT_MODE: 'true'
run: |
node scripts/gxt-test-runner/runner.mjs \
--full \
--auto-serve \
--url http://localhost:5180/ \
--baseline test-results/gxt-baseline.json
- name: Upload run artifacts
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: gxt-full-run
path: |
test-results/gxt-summary.json
test-results/gxt-last-run.json
if-no-files-found: ignore
- name: Upload candidate baseline
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: gxt-candidate-baseline
path: test-results/gxt-summary.json
if-no-files-found: ignore
- name: File regression issue
if: failure() && steps.gxt-run.outcome == 'failure'
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
const title = `GXT nightly regression on ${context.sha.substring(0,7)}`;
const body = [
'The nightly GXT full-suite run failed against',
'`test-results/gxt-baseline.json`.',
'',
`- commit: ${context.sha}`,
`- run: https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`,
'',
'Download the `gxt-full-run` artifact and diff it:',
'',
'```',
'node scripts/gxt-test-runner/diff.mjs \\',
' test-results/gxt-baseline.json \\',
' gxt-summary.json',
'```',
].join('\n');
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title,
body,
labels: ['gxt', 'regression', 'nightly'],
});
60 changes: 60 additions & 0 deletions .github/workflows/gxt-smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: GXT Smoke

on:
push:
branches:
- master
- main
- glimmer-next-fresh
pull_request:

permissions:
contents: read

jobs:
contract:
name: GXT upstream contract
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: ./.github/actions/setup
- name: Run contract tests
run: node scripts/gxt-test-runner/contract-tests.mjs

gxt-smoke:
name: GXT smoke shard ${{ matrix.shard }}/4
needs: contract
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: ./.github/actions/setup
- name: Install Playwright browsers
run: pnpm exec playwright install --with-deps chromium
- name: Run GXT smoke (shard ${{ matrix.shard }}/4)
env:
GXT_MODE: 'true'
run: |
node scripts/gxt-test-runner/runner.mjs \
--smoke \
--shard ${{ matrix.shard }}/4 \
--auto-serve \
--url http://localhost:5180/
- name: Upload run artifacts
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: gxt-smoke-shard-${{ matrix.shard }}
path: |
test-results/gxt-summary.json
test-results/gxt-last-run.json
if-no-files-found: ignore
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,14 @@ npm-debug.log
# couple of the files. Once it is, we can switch this over to just ignoring
# `types/stable` entirely.
types/stable

# GXT migration debug scripts (ad-hoc, not tracked)
/scripts/debug-artifacts/

# Ephemeral GXT test outputs (keep baseline + triage)
/test-results/gxt-last-run.json
/test-results/gxt-summary.json
/test-results/rehydration/

# Claude agent working state
/.claude/
28 changes: 19 additions & 9 deletions babel.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import { resolve, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';

const useGxt = process.env.GXT_MODE === 'true';

export default {
plugins: [
[
Expand All @@ -24,14 +26,22 @@ export default {
runtime: { import: 'decorator-transforms/runtime' },
},
],
[
'babel-plugin-ember-template-compilation',
{
compilerPath: resolve(
dirname(fileURLToPath(import.meta.url)),
'./broccoli/glimmer-template-compiler.mjs'
),
},
],
// In GXT mode, template compilation is handled by Vite via the gxt compiler
// or templateTag plugin. In classic mode, we must pre-compile
// `precompileTemplate` calls here so they don't survive into the runtime
// bundle (which would throw at module evaluation time).
...(useGxt
? []
: [
[
'babel-plugin-ember-template-compilation',
{
compilerPath: resolve(
dirname(fileURLToPath(import.meta.url)),
'./broccoli/glimmer-template-compiler.mjs'
),
},
],
]),
],
};
7 changes: 6 additions & 1 deletion bin/benchmark/run.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,12 @@ const DEFAULT_EXPERIMENT_PORT = 4501;
const DEFAULT_FIDELITY = process.env['RUNS'] || '20';
const DEFAULT_THROTTLE = '1';
const DEFAULT_REGRESSION_THRESHOLD = '25';
const DEFAULT_SAMPLE_TIMEOUT = '60';
// Sample timeout is per-sample wall-clock budget. Upstream commit 19eb4087e6
// doubled the bench workload (Create5000→Create10000) and added a final
// clearItems4 phase. Empirically a single sample on the GitHub Actions
// runner takes ~107-120s on this branch; 120s was too tight (timed out
// in CI). 240s gives 2× headroom without inflating green-path runtime.
const DEFAULT_SAMPLE_TIMEOUT = '240';
const DEFAULT_MARKERS = [
// Copied from glimmer-vm/bin/setup-bench.mts (krausest benchmark)
'render',
Expand Down
30 changes: 30 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ export default [
'packages/@handlebars/parser/lib/parser.js',
'packages/@handlebars/parser/src/**',
'tracerbench-testing/',
'packages/@ember/-internals/gxt-backend/**',
'packages/demo/**',
'scripts/gxt-test-runner/**',
'scripts/debug-artifacts/**',
],
},
pluginJs.configs.recommended,
Expand Down Expand Up @@ -231,6 +235,8 @@ export default [
'**/rollup.config.mjs',
'**/babel.config.mjs',
'**/babel.test.config.mjs',
'**/vite.config.mjs',
'scripts/**/*.mjs',
'node-tests/**/*.js',
'tests/node/**/*.js',
'smoke-tests/node-template/**/*.js',
Expand Down Expand Up @@ -260,6 +266,8 @@ export default [
'**/rollup.config.mjs',
'**/babel.config.mjs',
'**/babel.test.config.mjs',
'**/vite.config.mjs',
'scripts/**/*.mjs',
'node-tests/**/*.js',
'tests/node/**/*.js',
'smoke-tests/node-template/**/*.js',
Expand Down Expand Up @@ -293,6 +301,28 @@ export default [
'disable-features/disable-generator-functions': 'off',
},
},
{
files: ['**/vite.config.mjs', 'scripts/**/*.mjs'],
rules: {
'no-console': 'off',
'n/no-process-exit': 'off',
'n/hashbang': 'off',
'n/no-unpublished-bin': 'off',
},
},
{
// GXT integration scaffolding in core glimmer files: debug logging gated
// behind DEBUG_TEMPLATE_LOOKUP / similar runtime flags.
files: [
'packages/@ember/-internals/glimmer/lib/templates/**/*.ts',
'packages/@ember/-internals/glimmer/lib/renderer.ts',
'packages/@ember/-internals/glimmer/lib/component-managers/unwrap-template.ts',
],
rules: {
'no-console': 'off',
'no-implicit-coercion': 'off',
},
},
{
files: ['node-tests/**/*.js'],

Expand Down
Loading