Skip to content

v0.30.0 - pilotlamp GAS Integration Test Suite (2026-03-22)

What Changed?

This release rebuilds the pilotlamp GAS project from scratch as a structured integration test suite for the gaslamp library. All legacy test files were removed and replaced with a module-aligned structure covering only GAS-specific behavior that cannot be verified in a local Node.js environment. Test results are now written to a spreadsheet for historical tracking.


What's New

Main Feature: pilotlamp Integration Test Suite

What it does: Provides a set of GAS-environment tests that verify the gaslamp library works correctly after bundling and deployment. Each module that relies on Google APIs has a dedicated test suite. Results are appended to a TestResults sheet on every run, enabling monthly health checks with a full history.

How to use it:

  1. Open the pilotlamp spreadsheet in Google Apps Script editor
  2. Run initSheets() once to create all required sheets with sample data
  3. Run runAll() to execute all test suites and record results
  4. Before each subsequent run, call resetSheets() to clear stale output

Available functions:

Function Description
initSheets() Create all sheets with initial data (run once)
resetSheets() Clear Output and AfterGlowLog before a test run
runAll() Run smoke + all suites and record to TestResults
runSmoke() Verify all gaslamp exports exist after bundling
runGaslets() Test SheetArtisan, BookArtisan, sheet read/write
runAfterGlow() Test AfterGlow logging and spreadsheet output
runGears() Test ClockSmith timing with Utilities.sleep
runScenario() Full pipeline: sheet read → filter → write back

Added

  • pilotlamp/main.js: unified entry point with run*() functions and recordResults()
  • pilotlamp/setup.js: initSheets() and resetSheets() for spreadsheet management
  • pilotlamp/smoke/smokeModules.js: verifies all gaslamp exports are available after bundling
  • pilotlamp/suites/suiteGaslets.js: SheetArtisan, BookArtisan, readDataFrameFromSheet, writeDataFrameToSheet
  • pilotlamp/suites/suiteAfterGlow.js: AfterGlow logging and spreadsheet output
  • pilotlamp/suites/suiteGears.js: ClockSmith / Clock timing with Utilities.sleep
  • pilotlamp/suites/suiteScenario.js: full pipeline integration test
  • TestResults sheet: timestamp (JST), run label, suite name, passed, failed, status columns

Changed

  • All legacy test*.js and jest*.js files removed from pilotlamp/
  • pilotlamp/.claspignore simplified — all test files are now deployed to GAS

Fixed

  • SheetArtisan.open() creates a new sheet when the name does not exist (not null)
  • instanceof Map fails across GAS library boundaries; replaced with duck-typing check
  • Expression greater-than-or-equal method is ge(), not gte()
  • df.filter() requires a predicate function; use Expression.toFunction() to convert

Is It Safe to Upgrade?

  • Breaking Changes: No
  • Backward Compatible: Yes

No changes to the gaslamp library source. All changes are confined to pilotlamp/.


Release Details

  • Date: 2026-03-22
  • Version: v0.30.0
  • gaslamp: version 72
  • pilotlamp: version 29
  • Files Changed: 42
  • Commits:
    • d9af3b0 bump: version 0.29.0 → 0.30.0
    • 350245d style(pilotlamp): apply biome formatting
    • f3d9ef9 fix(pilotlamp): use JST timestamp in TestResults via Utilities.formatDate
    • b14dae4 refactor(pilotlamp): move initSheets and resetSheets to setup.js
    • 67e07e1 feat(pilotlamp): add sample data to initSheets for Input sheet
    • 136ee07 fix(pilotlamp): exclude TestResults from resetSheets
    • 3c8fca7 feat(pilotlamp): split initSheets and resetSheets
    • 28fd771 feat(pilotlamp): add initSheets() to reset output sheets
    • 9502c68 feat(pilotlamp): record test results to TestResults sheet
    • c7244ee fix(pilotlamp): use Expression.toFunction() for df.filter() predicate
    • ff39c90 fix(pilotlamp): fix suiteScenario Expression method name and string literals
    • eff8f93 fix(pilotlamp): fix suiteAfterGlow for GAS library boundary behavior
    • 6fbd59c fix(pilotlamp): fix suiteGaslets test for SheetArtisan.open behavior
    • 0e541c7 chore(pilotlamp): simplify .claspignore to deploy all test files
    • 7d9983c feat(pilotlamp): add suiteScenario for full sheet read-filter-write pipeline
    • c1b137f feat(pilotlamp): add suiteGears for ClockSmith timing with Utilities.sleep
    • 30f52db feat(pilotlamp): add suiteAfterGlow for logging and spreadsheet output
    • 30a19e4 feat(pilotlamp): add suiteGaslets for SheetArtisan and BookArtisan
    • 4875187 feat(pilotlamp): add main.js entry point and smoke test
    • 999f36b chore(pilotlamp): remove legacy test files

Known Issues

  • suiteScenario requires name and score columns in the Input sheet. initSheets() provides sample data automatically.
  • Monthly trigger-based execution requires manual setup in the GAS editor (Triggers menu).

Next Steps

  • Add trigger-based monthly execution documentation
  • Consider adding a suiteGaslets test for DriveApp and CalendarApp when those modules mature