Skip to content

v0.28.7 - Centralize GAS Global Namespace Registration (2026-03-21)

What Changed?

This release refactors how all modules register their symbols into the GAS global namespace. Previously, each module's index.ts managed its own globalThis assignments independently. Now, all registrations are consolidated in src/index.ts with a single typed GASGlobalThis interface, making it easy to see at a glance which symbols are available in GAS environments.


What's New

Main Feature: Centralized GAS Global Namespace

What it does: All globalThis assignments are now managed exclusively in src/index.ts. A single GASGlobalThis interface lists every class and function registered as a GAS global, replacing the previous pattern of scattered declare const globalThis: any blocks across modules.

How to use it: No changes required for existing GAS scripts. All previously available globals (DataFrame, FlameGuards, AfterGlow, etc.) remain accessible as before.

Code example:

TypeScript
// src/index.ts — all GAS globals defined in one place
interface GASGlobalThis {
  DataFrame?: typeof DataFrame;
  FlameGuards?: typeof FlameGuards;
  AfterGlow?: typeof AfterGlow;
  // ...
}

if (typeof globalThis !== "undefined") {
  const gas = globalThis as unknown as GASGlobalThis;
  gas.DataFrame = DataFrame;
  gas.FlameGuards = FlameGuards;
  gas.AfterGlow = AfterGlow;
  // ...
}

Added

  • src/remnantflicker/index.ts — added missing entry point for consistency with other modules
  • docs/dev/patterns.md — documented Entry Point Pattern and GAS Global Namespace Pattern
  • CLAUDE.md — added both patterns to Key Architectural Patterns section

Changed

  • src/index.ts — now centralizes all globalThis registrations with a typed GASGlobalThis interface
  • src/index.ts — now exports jestlite and remnantflicker directly (previously jestlite was re-exported via torch/index.ts)
  • src/torch/index.ts — removed jestlite re-export (moved to src/index.ts)
  • All module index.ts files — removed globalThis registration blocks

Fixed

  • src/jestlite/index.ts — replaced require() calls with already-imported symbols (GAS-incompatible pattern)
  • src/afterglow/index.ts, src/gears/index.ts — replaced declare const globalThis: any with typed GASGlobalThis interface

Is It Safe to Upgrade?

  • Breaking Changes: No
  • Backward Compatible: Yes

All GAS globals remain available under the same names. No changes to the public TypeScript API.


Release Details

  • Date: 2026-03-21
  • Version: v0.28.7
  • gaslamp: ??
  • pilotlamp: ??
  • Files Changed: 8
  • Commits:
    • ebc98b4 bump: version 0.28.6 → 0.28.7
    • 981ed5e docs(claude): add Entry Point and GAS Global Namespace patterns
    • 8dbd63e docs(dev): add Entry Point and GAS Global Namespace patterns
    • 023a14b refactor(index): centralize GAS globalThis registration
    • 61a376d refactor(torch): move jestlite re-export to src/index.ts
    • 53eecd5 refactor(jestlite): remove globalThis registration
    • 7736381 refactor(gears): remove globalThis registration
    • 2573c49 refactor(afterglow): remove globalThis registration
    • 2e1dfa8 refactor(flamewright): remove globalThis registration
    • d144ef4 refactor(torch/dataframe): remove globalThis registration
    • 2856761 feat(remnantflicker): add index.ts entry point
    • d1c7fed refactor(gears): replace declare any with GASGlobalThis interface
    • 6ba0cce refactor(afterglow): replace declare any with GASGlobalThis interface
    • d126eb7 refactor(jestlite): replace require() with import in globalThis registration

Known Issues

  • GAS version numbers for v0.28.3–v0.28.7 are not yet recorded in RemnantFlicker.versions.

Next Steps

  • Push bundle to GAS and record the GAS version number for v0.28.7.