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:
- Open the pilotlamp spreadsheet in Google Apps Script editor
- Run
initSheets()once to create all required sheets with sample data - Run
runAll()to execute all test suites and record results - 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 withrun*()functions andrecordResults()pilotlamp/setup.js:initSheets()andresetSheets()for spreadsheet managementpilotlamp/smoke/smokeModules.js: verifies all gaslamp exports are available after bundlingpilotlamp/suites/suiteGaslets.js: SheetArtisan, BookArtisan,readDataFrameFromSheet,writeDataFrameToSheetpilotlamp/suites/suiteAfterGlow.js: AfterGlow logging and spreadsheet outputpilotlamp/suites/suiteGears.js: ClockSmith / Clock timing withUtilities.sleeppilotlamp/suites/suiteScenario.js: full pipeline integration testTestResultssheet: timestamp (JST), run label, suite name, passed, failed, status columns
Changed¶
- All legacy
test*.jsandjest*.jsfiles removed frompilotlamp/ pilotlamp/.claspignoresimplified — all test files are now deployed to GAS
Fixed¶
SheetArtisan.open()creates a new sheet when the name does not exist (notnull)instanceof Mapfails across GAS library boundaries; replaced with duck-typing checkExpressiongreater-than-or-equal method isge(), notgte()df.filter()requires a predicate function; useExpression.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:
d9af3b0bump: version 0.29.0 → 0.30.0350245dstyle(pilotlamp): apply biome formattingf3d9ef9fix(pilotlamp): use JST timestamp in TestResults via Utilities.formatDateb14dae4refactor(pilotlamp): move initSheets and resetSheets to setup.js67e07e1feat(pilotlamp): add sample data to initSheets for Input sheet136ee07fix(pilotlamp): exclude TestResults from resetSheets3c8fca7feat(pilotlamp): split initSheets and resetSheets28fd771feat(pilotlamp): add initSheets() to reset output sheets9502c68feat(pilotlamp): record test results to TestResults sheetc7244eefix(pilotlamp): use Expression.toFunction() for df.filter() predicateff39c90fix(pilotlamp): fix suiteScenario Expression method name and string literalseff8f93fix(pilotlamp): fix suiteAfterGlow for GAS library boundary behavior6fbd59cfix(pilotlamp): fix suiteGaslets test for SheetArtisan.open behavior0e541c7chore(pilotlamp): simplify .claspignore to deploy all test files7d9983cfeat(pilotlamp): add suiteScenario for full sheet read-filter-write pipelinec1b137ffeat(pilotlamp): add suiteGears for ClockSmith timing with Utilities.sleep30f52dbfeat(pilotlamp): add suiteAfterGlow for logging and spreadsheet output30a19e4feat(pilotlamp): add suiteGaslets for SheetArtisan and BookArtisan4875187feat(pilotlamp): add main.js entry point and smoke test999f36bchore(pilotlamp): remove legacy test files
Known Issues¶
suiteScenariorequiresnameandscorecolumns in theInputsheet.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
suiteGasletstest for DriveApp and CalendarApp when those modules mature