Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
453 commits
Select commit Hold shift + click to select a range
8df3b9c
fix: Triple-curly + curly components long tail (+76 tests)
lifeart Apr 13, 2026
95d4496
fix: Curly components 120/120 — didReceiveAttrs timing, CP two-way, d…
lifeart Apr 13, 2026
7e5c534
fix: didUpdate → set() chain inside #each — 193/193 on all array-flav…
lifeart Apr 14, 2026
2ddcf55
chore: GXT mode scaffolding — Vite config, package manifests, test ha…
lifeart Apr 14, 2026
68e6e79
chore: Track GXT compat layer source files
lifeart Apr 14, 2026
847f9ae
docs: GXT dual-backend integration plan
lifeart Apr 14, 2026
493c94c
docs: Expert review synthesis for GXT integration plan
lifeart Apr 14, 2026
4829b14
docs(rfc): draft GXT dual-backend RFC + addon compatibility matrix
lifeart Apr 14, 2026
6050bf5
feat(gxt-runner): production test runner with QUnit.done-only completion
lifeart Apr 14, 2026
6be70a5
feat(bundling-poc): gate glimmer-vm bundling behind EMBER_RENDER_BACKEND
lifeart Apr 14, 2026
22549ca
feat(gxt-backend): promote compat layer to @ember/-internals/gxt-back…
lifeart Apr 14, 2026
fd623b5
fix(classic-build): restore buildability with GXT-aware indirection s…
lifeart Apr 14, 2026
a1b6b67
feat(gxt-ci): dual-build CI matrix + install UX + contract tests
lifeart Apr 14, 2026
07c9706
chore(baseline): GXT full-suite baseline for Phase 0 gate
lifeart Apr 14, 2026
9cfde1e
feat(integration-tests): add opt-in GxtRehydrationDelegate
lifeart Apr 14, 2026
b53f382
docs(gxt): Phase 5 — landing report + status + RFC update
lifeart Apr 14, 2026
1b0b42d
feat(gxt-backend): defensive root-context stale detection
lifeart Apr 14, 2026
e44529a
docs(triage): batch 1 — top 5 failing modules
lifeart Apr 14, 2026
80dbccd
chore(bundle-audit): Phase 2.5 — bundle attribution report
lifeart Apr 14, 2026
d6b5fe7
fix(gxt-backend): GxtRehydrationDelegate first-call renderServerSide …
lifeart Apr 14, 2026
c8eb53d
perf(gxt-backend): Phase 2.6 — shrink GXT bundle by 17%
lifeart Apr 14, 2026
7ad7bee
fix(gxt-backend): dynamic component string-path swap in $_dc_ember
lifeart Apr 14, 2026
fd5e165
fix(gxt-backend): bridge classic @glimmer/validator tags to _gxtEffect
lifeart Apr 14, 2026
b65f42d
feat(rehydration): wire GxtRehydrationDelegate + marker translation
lifeart Apr 14, 2026
8626896
fix(gxt-backend): bridge classic Helper.recompute() into GXT reactivity
lifeart Apr 14, 2026
e37c4b0
chore(gxt-backend): remove dead $_dc_ember block from compile.ts
lifeart Apr 15, 2026
0cb6b88
fix(rehydration): strip GXT htmlRaw boundary comments from token compare
lifeart Apr 15, 2026
b6725de
feat(gxt-backend): Ember Inspector component-tree adapter (MVP)
lifeart Apr 15, 2026
6b48750
feat(rehydration): GxtRenderResult + partial delegate scaffold (Phase…
lifeart Apr 15, 2026
792c2e5
fix(gxt-backend): each-in flush after reference replacement
lifeart Apr 15, 2026
6240ce9
fix(gxt-backend): strict-mode built-in helpers shadowed by {{#let}} b…
lifeart Apr 15, 2026
812032c
fix(gxt-backend): remaining dynamic-components failures
lifeart Apr 15, 2026
40d46bd
chore(gxt-backend): unify @lifeart/gxt imports to bare specifiers
lifeart Apr 15, 2026
7f95429
fix(gxt-backend): Strict Mode renderComponent curried helper in content
lifeart Apr 15, 2026
4cfafed
fix(gxt-backend): renderComponent re-renders on classic tag dirty
lifeart Apr 15, 2026
047310f
fix(gxt-backend): in-element deferred render + view-tree rebuild-wrap…
lifeart Apr 15, 2026
19d0c0e
fix(gxt-backend): in-element defer gate — only defer when compile-tim…
lifeart Apr 15, 2026
cb6eb48
fix(gxt-backend): reset __dcStringListenerCount in cleanup
lifeart Apr 15, 2026
8cc4312
fix(gxt-backend): in-element deferred render actually invokes block body
lifeart Apr 15, 2026
09c7978
fix(gxt-backend): renderComponent reactor per-call scoping
lifeart Apr 15, 2026
4e40b66
fix(gxt-backend): EmberHtmlRaw handles null/undefined/proxy values
lifeart Apr 15, 2026
33dadff
fix(gxt-backend): Dynamic content - Symbol/no-toString attrs + concat
lifeart Apr 15, 2026
c0f7e38
fix(gxt-backend): custom helpers remaining 5 failures — 34/34
lifeart Apr 15, 2026
d3da1a8
fix(gxt-backend): emit style binding warning for dynamic style attrs
lifeart Apr 15, 2026
048f2fa
fix(gxt-backend): splattributes undefined attr handling
lifeart Apr 15, 2026
e482a98
fix(gxt-backend): @invokeHelper 17/17 — wire classic tag through arg …
lifeart Apr 15, 2026
888317a
fix(gxt-backend): helper autotracking for non-argument tracked reads
lifeart Apr 15, 2026
5337bd4
fix(gxt-backend): CP cache invalidates on classic dep-key dirty
lifeart Apr 15, 2026
39fac1f
fix(gxt-backend): destroyable semantics parity
lifeart Apr 15, 2026
daec04d
fix(gxt-backend): IterableReference + References parity with @glimmer…
lifeart Apr 15, 2026
2874bff
fix(gxt-backend): validator tracking + validators semantics
lifeart Apr 15, 2026
af77eb4
revert(gxt-backend): reference.ts + validator.ts rewrites — Input/mut…
lifeart Apr 15, 2026
0080e70
fix(gxt-backend): add IterableReference additively (no reference.ts r…
lifeart Apr 15, 2026
f221bbb
fix(gxt-backend): additive validator exports for tracking/validators …
lifeart Apr 16, 2026
43542ed
fix(gxt-backend): additive References module fixes
lifeart Apr 16, 2026
a3794f5
fix(gxt-backend): additive error-path wrappers for Managers
lifeart Apr 16, 2026
c4ecb57
fix: validator compat — track()._consumed, getValue() for any .value …
lifeart Apr 16, 2026
472f404
fix: Compat destroyable.ts — 32/32 passing without regressing Destroy…
lifeart Apr 16, 2026
f185586
fix: ArrayProxy content mutation tracking for GXT — 2 array proxy mod…
lifeart Apr 16, 2026
83e8c5b
fix: 7 validator test failures — trackedArray sort, trackedObject, @t…
lifeart Apr 16, 2026
90c920b
fix: Capabilities validation in Custom*Manager — Managers 20/20 ALL P…
lifeart Apr 16, 2026
be78838
fix: set() handles numeric keys and destroyed-object assertion in GXT…
lifeart Apr 16, 2026
b702ceb
fix(gxt-backend): pass scopeValues through test-compile.ts to gxtCompile
lifeart Apr 16, 2026
935814b
Revert "fix: Capabilities validation in Custom*Manager — Managers 20/…
lifeart Apr 16, 2026
2b79394
fix: Custom helper manager backtracking detection + getValue caching …
lifeart Apr 16, 2026
7e7b253
fix(gxt-backend): yield block params and named blocks in AngleBracket…
lifeart Apr 16, 2026
219f82b
fix: Unwrap GXT tracking proxies in COMPONENT_TEMPLATES lookups — Str…
lifeart Apr 16, 2026
0001514
fix: Helper Registration 1/4 — redirect GXT imports to Ember wrappers
lifeart Apr 16, 2026
45dde23
fix: Enable mandatory setters in GXT mode for observer/computed/alias…
lifeart Apr 16, 2026
04a60ae
Revert "fix: Enable mandatory setters in GXT mode for observer/comput…
lifeart Apr 16, 2026
25fe4f8
fix: invokeHelper — skip reactive args wrapping for frozen SimpleArgs…
lifeart Apr 16, 2026
dc9eacf
fix: Application rendering this.model reactivity — 18/18 passing
lifeart Apr 16, 2026
b63978e
fix: Contextual components — leading-dash names, @arg block invocatio…
lifeart Apr 16, 2026
981c6f7
fix: Query Params model-dependent state — prototype meta guard + inst…
lifeart Apr 16, 2026
f277623
fix: Test-helpers emulation — detect route-template swap in outlet re…
lifeart Apr 17, 2026
3c4513e
fix: afterRender set pattern — preserve property-change flag when set…
lifeart Apr 17, 2026
7c7daa8
fix: LinkTo reactor — don't drop pre-insertion classic-tag notifications
lifeart Apr 17, 2026
53ea449
fix: {{yield}} named blocks — has-block signature, else/inverse alias…
lifeart Apr 17, 2026
590b38a
fix: managed-component cache refreshes args/fw on HIT — cross-route L…
lifeart Apr 17, 2026
86994c0
fix: AngleBracket yielded contextual component — splattributes (3 tests)
lifeart Apr 17, 2026
b03c3dd
fix: Helper manager capabilities validation in getDelegateFor (+4 tests)
lifeart Apr 17, 2026
3f47698
fix: classic component tracked cells for undefined-initialized proper…
lifeart Apr 17, 2026
5a0bf3f
fix: pin controller meta.proto so @computed getters return values
lifeart Apr 17, 2026
7622dc6
fix: LinkTo block children rendering + surface href errors
lifeart Apr 17, 2026
146b3a1
fix: Loose-mode helper resolution for plain owner.register helpers (+…
lifeart Apr 17, 2026
c2b002f
fix: renderSettled — use deferred pattern + flush GXT DOM in end hand…
lifeart Apr 17, 2026
14bf84d
fix: @service decorator deprecation + destroy_test graph-teardown order
lifeart Apr 17, 2026
d475560
fix: Contextual components — stale-formula guard + hash-ctor parent c…
lifeart Apr 17, 2026
1bde483
fix: Helper Registration — symbol-keyed nodes fallback in root.ts (+3…
lifeart Apr 17, 2026
060afa7
fix: mut helper — derive path from getter toString for nested `this.X…
lifeart Apr 17, 2026
2bef5b7
fix: CP redefine + Object.create prototype meta (+3 tests)
lifeart Apr 17, 2026
7020b67
fix(gxt-backend): angle-bracket form for shadowed input/textarea blocks
lifeart Apr 17, 2026
f96e4cd
fix: tagless curly lifecycle — inDOM transition + parentView fallback…
lifeart Apr 17, 2026
472dbc6
fix(gxt-backend): align managerHasCapability signature + capability f…
lifeart Apr 17, 2026
25a2ebe
fix: render-phase error propagation — lifecycle + destroy capture (+2…
lifeart Apr 17, 2026
15e004a
fix(gxt-backend): AngleBracket modifiers — pre-apply local attrs befo…
lifeart Apr 17, 2026
daa0bb2
fix: Application visit _renderMode — serialize marker + rehydrate dedup
lifeart Apr 17, 2026
87e6e83
fix: Component Context/Registration — attrs collision, layout precede…
lifeart Apr 17, 2026
6fb32c4
fix: Custom Modifier Manager phantom install in #if toggle (+1 test)
lifeart Apr 17, 2026
83aa3a3
fix: Helpers — fn shadow, unique-id #let stability, named-arg helper …
lifeart Apr 17, 2026
cef01c7
fix: willRender on {{#each}} arg changes + template-only render tree …
lifeart Apr 17, 2026
6f4c5ce
fix: Controller model tracking + Static content whitespace (+2 tests)
lifeart Apr 17, 2026
7042039
fix: Dynamic content integration — QUnit token whitespace tolerance (…
lifeart Apr 17, 2026
9e90306
fix: throw on unknown curly-block component invocation (+1 test)
lifeart Apr 17, 2026
5f9169a
fix: Custom component manager — updateComponent pool reset + clean in…
lifeart Apr 17, 2026
3e34e8d
fix: {{each}} inverse branch parentView for update-time renders
lifeart Apr 18, 2026
2637766
fix: per-outlet rerender map for concurrent ApplicationInstances
lifeart Apr 18, 2026
1fd9942
fix: renderComponent eager tracking — register classic reactor before…
lifeart Apr 18, 2026
63530a1
fix(gxt-backend): strict-mode fn/on — proper Glimmer refs + getter de…
lifeart Apr 18, 2026
86ad093
fix(gxt-backend): $__fn_ember — skip mut-cell probe for fn with params
lifeart Apr 18, 2026
c7f56b4
fix(gxt-backend): wrap direct this.X hash values in $_componentHelper
lifeart Apr 18, 2026
c6fb2d1
fix(gxt-backend): Can shadow keywords — propagate $slots symbol alias
lifeart Apr 18, 2026
0476726
fix(gxt-backend): Managers Component/Modifier — introspection wrapper…
lifeart Apr 18, 2026
f62ea06
fix(gxt-backend): Strict mode — block container lookup for free ident…
lifeart Apr 18, 2026
60b91d1
fix(gxt-backend): {{on}} Modifier counter instrumentation (+3 tests)
lifeart Apr 18, 2026
7edd6cf
fix(gxt-backend): rewrite bare @arg tokens to $a alias in emitted JS
lifeart Apr 18, 2026
910d2d0
fix(gxt-backend): LinkTo — drop stale named args across template cach…
lifeart Apr 18, 2026
91afd35
fix(gxt-backend): {{on}} — once/capture/passive + rebind semantics (+…
lifeart Apr 18, 2026
246e9e4
fix(gxt-backend): Helper manager — optional component-manager lookup …
lifeart Apr 18, 2026
4fc825b
fix: outlet view + runtime resolver cache modules
lifeart Apr 18, 2026
385a37c
fix: QP model-dependent cacheKey — stash parts in _prepareQueryParams
lifeart Apr 18, 2026
84a3cf2
fix(gxt-backend): Brand refs with REFERENCE symbol (Helper Managers 4…
lifeart Apr 18, 2026
25db926
fix(gxt-backend): non-interactive rendering suppresses modifiers and …
lifeart Apr 18, 2026
1f172da
fix(gxt-backend): class helpers autotrack external @tracked props
lifeart Apr 18, 2026
d751d68
fix(gxt-backend): JIT strict mode — modifier getTag, manager-not-foun…
lifeart Apr 18, 2026
2aa3839
fix(gxt-backend): CustomComponentManager wrapper as real InternalComp…
lifeart Apr 18, 2026
a6f0e20
fix(object): scope ObjectProxy assertion bypass to template/internal …
lifeart Apr 18, 2026
229f1d2
fix(gxt-backend): helper-manager — argsProxyFor-style unwrap in getHe…
lifeart Apr 18, 2026
2d6e0a5
fix: strict-mode dynamic throws — self ref debugLabel + non-component…
lifeart Apr 18, 2026
6f54dcc
chore(gxt-backend): remove stray __dbg_* instrumentation in manager.ts
lifeart Apr 18, 2026
2344406
fix: strict-mode dynamic helper willDestroy on swap
lifeart Apr 18, 2026
b51ea30
fix: strict-mode dynamic modifier destroyModifier on swap
lifeart Apr 18, 2026
5530964
fix: sanitize dangerous URL attributes in GXT DOM API
lifeart Apr 18, 2026
3642397
fix: defer evaluation in childRefFor fall-through for stock-VM refs
lifeart Apr 18, 2026
c4fd71e
fix: stamp debugLabel on createConstRef/createUnboundRef wrappers
lifeart Apr 18, 2026
c87c3e8
fix: #11044 hash params invalidation inside {{#each}}
lifeart Apr 18, 2026
a95ac0b
fix: honor hash helper's preseeded children Map in childRefFor
lifeart Apr 18, 2026
1aaed08
fix: GH#13982 dedupe stale $_dc listeners when DOM detached
lifeart Apr 18, 2026
cbccc89
fix(gxt-rehydrate): GxtRenderResult.env for RenderTest.rerender()
lifeart Apr 18, 2026
ffd36ef
fix(gxt-rehydrate): actually render client-side + smart rerender
lifeart Apr 18, 2026
a29cea2
fix(gxt-rehydrate): wire up registerHelper/registerComponent via scop…
lifeart Apr 18, 2026
c9d7fb6
fix(gxt-rehydrate): route partial-rehydration to GxtPartialRehydratio…
lifeart Apr 18, 2026
20b436e
fix(gxt-backend/manager): sync willDestroy for each-row teardown timing
lifeart Apr 18, 2026
e897c31
fix: {{#if null}} crash — coerce null to false in patchedIf
lifeart Apr 18, 2026
59d8cb1
fix: kebab helper names and {{null}}/{{undefined}} in quoted attrs
lifeart Apr 18, 2026
a8c8459
fix: preserve HTML comments in templates
lifeart Apr 18, 2026
62257d6
fix: drop null/undefined attrs and apply stray props-slot entries
lifeart Apr 18, 2026
fd528f6
fix: Phase 2b each-else pool key — resolve freshContext wrapper to re…
lifeart Apr 18, 2026
fa7050d
fix: quoted attribute with null interpolation drops attr
lifeart Apr 18, 2026
482ec27
fix: interactive #each-else lifecycle — fire willDestroyElement befor…
lifeart Apr 18, 2026
00f8005
fix: SafeString (toHTML) in double-curlies renders as raw HTML
lifeart Apr 18, 2026
b4cf72d
fix: debug-render-tree — modifier manager getDebugInstance + name fal…
lifeart Apr 18, 2026
4fe0b10
fix: yield primitive `.length` — childRefFor on string/number values
lifeart Apr 18, 2026
74f7856
fix: child {{#if}} suppresses TRUE-flip when parent flips FALSE in sa…
lifeart Apr 18, 2026
668201e
fix: createCache propagates throws across reads (debug-render-tree arg2)
lifeart Apr 18, 2026
b8d47f0
fix: $_eachSync DOM stability for non-Array iterable wrappers
lifeart Apr 18, 2026
732d9f8
fix(modifiers): unwrap refs in CustomModifierManager + prototype lookup
lifeart Apr 18, 2026
b551612
fix(trackedX): port stock tag-based implementations for JIT rendering
lifeart Apr 18, 2026
d36a339
fix(on-modifier): stop double-counting removes on element teardown
lifeart Apr 18, 2026
e9e1fa6
fix: rehydration SVG/MathML rendering — flatten array results in item…
lifeart Apr 18, 2026
f7e87e0
fix: rehydration HTML boolean attrs — serialize <option selected> as …
lifeart Apr 18, 2026
655fe49
fix: rehydration SVG — namespaced props + text content in SVG branch
lifeart Apr 18, 2026
c1ce9f7
fix: rehydration custom-element children — handle $_if/$_each wrappers
lifeart Apr 18, 2026
f6201ce
fix: narrow HTML-boolean-attr bare serialization to literal-true source
lifeart Apr 18, 2026
b93eff2
fix: preserve pre-existing children in GxtRehydrationDelegate.renderC…
lifeart Apr 18, 2026
2fe1272
fix: auto-insert <tbody> for <table><tr> templates
lifeart Apr 18, 2026
adc0590
fix: skip empty component sub-modules in nestedComponentModules
lifeart Apr 18, 2026
5abe29e
fix: validator.track() returns CONSTANT_TAG when frame consumes nothing
lifeart Apr 18, 2026
95044b5
fix: validator.trackedData getter/setter register per-cell tag
lifeart Apr 18, 2026
762ac31
fix: Fire render.getComponentDefinition instrumentation in GXT resolver
lifeart Apr 18, 2026
2570181
fix: Fire render.component instrumentation in GXT renderClassicComponent
lifeart Apr 18, 2026
403bc4c
fix: Fire render.outlet instrumentation on GXT outlet re-render
lifeart Apr 18, 2026
1ad59fa
fix: Glimmerish dynamic-component tracked state — selective alwaysRev…
lifeart Apr 18, 2026
ef99d75
fix: -with-dynamic-vars / -get-dynamic-var block keywords
lifeart Apr 18, 2026
ba4f00c
fix: notifyPropertyChange — do not fire PROPERTY_DID_CHANGE on protot…
lifeart Apr 18, 2026
ab5905e
fix: Query Params — preserve <a id=...> references across outlet re-r…
lifeart Apr 18, 2026
b92596a
fix: Query Params model-dep state — mirror DOM + dirty routing.curren…
lifeart Apr 18, 2026
527a0cc
fix: Route model loading — avoid CPSETTER error on readonly computed …
lifeart Apr 19, 2026
e70a0d1
fix: {{on}} modifier teardown — destroy internal manager state on ele…
lifeart Apr 19, 2026
93a1684
fix: Re-enable mandatory setters in GXT mode for plain EmberObjects
lifeart Apr 19, 2026
53194cf
fix: Custom Modifier Manager — modifiers run AFTER static text children
lifeart Apr 19, 2026
ed850c0
test(rehydration): GXT-aware branches for assertServerComponent + ass…
lifeart Apr 19, 2026
ec39d59
test(rehydration): GXT branch for assertRehydrationStats + ember-view…
lifeart Apr 19, 2026
7be47e3
test(rehydration): strip % % markers + merge adjacent Chars; GXT-awar…
lifeart Apr 19, 2026
e5da75d
fix: {{in-element}} self-insert — co-locate content with block placeh…
lifeart Apr 19, 2026
615a1b9
test(rehydration): GXT fallback for assertSerializedInElement + in-el…
lifeart Apr 19, 2026
f1fb293
fix: CP.get — skip lazy evaluation during GXT re-render cascade
lifeart Apr 19, 2026
f1c61e7
test(rehydration): also strip %|% separator markers
lifeart Apr 19, 2026
b6a295b
fix(gxt-backend): updateTag — no-op cell.update + classic-style buffe…
lifeart Apr 19, 2026
cc01c39
fix: rehydration — <svg>[object Object]> + dynamic boolean-attr coercion
lifeart Apr 19, 2026
b1b400b
fix: EmberHtmlRaw — contextual HTML parsing for table/select families
lifeart Apr 19, 2026
0d31bd5
fix: triple-mustache {{{x}}} inside <title>/<script>/<style>/<textarea>
lifeart Apr 19, 2026
84ebfbc
fix: Input value={{undefined}} — coerce to "" via HTMLInputElement se…
lifeart Apr 19, 2026
f740e25
fix: each DOM mutation — clean morph artifact comments inside element…
lifeart Apr 19, 2026
7249373
fix: assert-against-named-outlets — add @test prefix + GXT assertion
lifeart Apr 20, 2026
d87cb2a
fix(gxt): rehydration — Dynamic selected options attr+prop sync (+7)
lifeart Apr 20, 2026
dd62bf7
fix: Template factory test + resolver cache — GXT-aware template() + …
lifeart Apr 20, 2026
3a574e5
fix(gxt): rehydration — inline-expand simple component invocations (+6)
lifeart Apr 20, 2026
758088d
fix(gxt): rehydration — partial-rehydration clear + inner @arg bindin…
lifeart Apr 20, 2026
0bc7bd7
fix(gxt): rehydration — Dynamic {{component}} resolve + marker strip …
lifeart Apr 20, 2026
748233a
fix(gxt): rehydration — strip empty <!----> in equalsElement (+2)
lifeart Apr 20, 2026
1fb3abc
fix: syntax refinements — shadow GXT-refined keywords in block-param …
lifeart Apr 20, 2026
68dcacd
fix(gxt): rehydration — partial-rehydration tokens + in-element appen…
lifeart Apr 20, 2026
c6dc49a
fix(gxt): rehydration — text-node context + marker-guard skip (+2)
lifeart Apr 20, 2026
aa72f31
fix(gxt): rehydration — in-element delegate-driven placement (+3)
lifeart Apr 20, 2026
eec6b36
fix(gxt): PromiseProxyMixin — sync fast-path for already-settled prom…
lifeart Apr 20, 2026
114d059
fix(gxt): Route template — if-toggle re-registers IfCondition + repai…
lifeart Apr 20, 2026
43e07d2
fix(gxt): instance pool — per-each-row keying prevents positional slide
lifeart Apr 20, 2026
abf0d59
fix(gxt): custom modifier — mirror classic install dirty-during-insta…
lifeart Apr 20, 2026
fefe8b4
fix(gxt): Query Params #13263 — sync renderContext QP writes to contr…
lifeart Apr 21, 2026
d8f39e2
fix(gxt): Contextual components dot-path reactivity — preserve local-…
lifeart Apr 21, 2026
0714088
fix(gxt): Mutable Bindings CP with setter — invoke setter on arg disp…
lifeart Apr 21, 2026
d972bf0
fix: @tracked/arg name collision — skip shadowing tracked descriptor
lifeart Apr 21, 2026
685b033
fix(gxt): scope force-rerender to roots whose own tag moved
lifeart Apr 21, 2026
d6980fb
fix(gxt): wrap pure Ember component getters in cached() to fix primin…
lifeart Apr 22, 2026
42303d6
chore: gitignore debug artifacts + architectural learnings
lifeart Apr 22, 2026
2eb9c11
fix: re-export initChildViews/collectChildViews for gxt-backend
lifeart Apr 22, 2026
25f381e
fix: smoke harness — resolve @glimmer/component + skip discovery test…
lifeart Apr 22, 2026
ffaaba1
fix(gxt): walk proto chain for CP descriptors when pre-installing cells
lifeart Apr 24, 2026
cf92790
fix(gxt): walk proto chain for CP accessors in createRenderContext ce…
lifeart Apr 24, 2026
fc84531
docs: agent log gotchas for CP cellFor cycle investigation
lifeart Apr 24, 2026
f1cbc2f
fix(gxt): walk component proto chain for CP accessors in root.ts Prot…
lifeart Apr 24, 2026
d69eb38
fix(gxt): suppress attrs-hook re-entrancy across sync cycles
lifeart Apr 24, 2026
3c8d313
fix(gxt-harness): resolver fix for decorator-transforms + @lifeart/gxt
lifeart Apr 24, 2026
5b7ea8e
fix(gxt): re-entrancy guard on __gxtRebuildViewTreeFromDom
lifeart Apr 24, 2026
de6b47e
fix(gxt): suppress __classicDirtyTagFor during __gxtSyncDomNow
lifeart Apr 24, 2026
58324db
fix(gxt): narrow rcSet dirty-tag suppression to rescheduling only
lifeart Apr 24, 2026
57bbeee
fix(gxt): gate arg-cell updates on lastArgValue not cell.__value
lifeart Apr 24, 2026
c3b5294
fix(gxt): GH#18417 — break cellFor recursion for formula-backed cells
lifeart Apr 24, 2026
ec3e475
chore: sync pnpm-lock.yaml with package.json overrides
lifeart Apr 24, 2026
260794c
chore(ci): unblock lint, workflows, and docs coverage
lifeart Apr 25, 2026
5c54a42
chore(ci): fix type-check, vite build, and publish idempotency
lifeart Apr 25, 2026
81254a8
chore(ci): use runtime lookup for unpublished @lifeart/gxt APIs
lifeart Apr 25, 2026
0757249
chore: remove agent docs, demo/compat shim, bundle-audit artifacts
lifeart Apr 25, 2026
3c153c0
chore(ci): drop unused eslint-disable directives, prettier fixup
lifeart Apr 25, 2026
ad49057
chore(deps): bump @lifeart/gxt to 0.0.60
lifeart Apr 27, 2026
028f05c
fix(ci): re-enable babel-plugin-ember-template-compilation in classic…
lifeart Apr 27, 2026
d4b4324
fix(ci): define gxt build-time constants in classic-mode vite config
lifeart Apr 27, 2026
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
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'
),
},
],
]),
],
};
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
Loading