[object Object]

← back to Cli Printing Press

fix(catalog): Align Google Flights catalog with Flight Goat's current wrapper (#821)

19702102e9e0f7306c406a4519b76d280ef514c1 · 2026-05-09 11:38:06 -0700 · Trevin Chow

* Fix Google Flights catalog wrapper entry

* test(cli): update google flights catalog golden

Files touched

Diff

commit 19702102e9e0f7306c406a4519b76d280ef514c1
Author: Trevin Chow <trevin@trevinchow.com>
Date:   Sat May 9 11:38:06 2026 -0700

    fix(catalog): Align Google Flights catalog with Flight Goat's current wrapper (#821)
    
    * Fix Google Flights catalog wrapper entry
    
    * test(cli): update google flights catalog golden
---
 catalog/google-flights.yaml                      | 19 ++++++-------------
 internal/catalog/catalog_test.go                 |  5 ++++-
 skills/printing-press/SKILL.md                   |  3 +--
 testdata/golden/expected/catalog-list/stdout.txt |  4 +++-
 4 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/catalog/google-flights.yaml b/catalog/google-flights.yaml
index 6ec45f36..4e5b77a3 100644
--- a/catalog/google-flights.yaml
+++ b/catalog/google-flights.yaml
@@ -1,15 +1,14 @@
 name: google-flights
 display_name: Google Flights
-description: Flight search via Google Flights. No public API — reached through community-maintained reverse-engineered wrappers.
-category: other
+description: Flight search via Google Flights. No public API — reached through a community-maintained reverse-engineered wrapper.
+category: travel
 tier: community
-verified_date: "2026-04-11"
+verified_date: "2026-05-09"
 homepage: https://www.google.com/travel/flights
 notes: |
-  Google does not publish a Flights API. The wrapper libraries below reverse-engineer
+  Google does not publish a Flights API. The wrapper library below reverse-engineers
   the internal protobuf protocol that powers the website. Prefer the native Go wrapper
-  for printed CLIs so the resulting binary has no Python runtime dependency. Fall back
-  to the subprocess option when the Go wrapper is missing coverage the user needs.
+  for printed CLIs so the resulting binary has no Python runtime dependency.
 
   When this entry is returned for a combo-CLI source, the skill should surface the
   wrapper options to the user rather than searching for an OpenAPI spec.
@@ -19,10 +18,4 @@ wrapper_libraries:
     language: go
     license: MIT
     integration_mode: native
-    notes: Pure Go, importable. Preferred default — produces a single-binary CLI with no runtime deps.
-  - name: punitarani/fli
-    url: https://github.com/punitarani/fli
-    language: python
-    license: MIT
-    integration_mode: subprocess
-    notes: Python library with broader feature coverage (multi-leg, cabin class filters). Invoke as a subprocess and parse JSON output. Requires Python 3.10+ at runtime.
+    notes: Pure Go, importable. Produces a single-binary CLI with no Python runtime dependency.
diff --git a/internal/catalog/catalog_test.go b/internal/catalog/catalog_test.go
index a9b33a53..31fa0691 100644
--- a/internal/catalog/catalog_test.go
+++ b/internal/catalog/catalog_test.go
@@ -409,7 +409,10 @@ func TestEmbeddedCatalogParsesWrapperOnlyEntries(t *testing.T) {
 	entry, err := LookupFS(catalogfs.FS, "google-flights")
 	require.NoError(t, err)
 	assert.True(t, entry.IsWrapperOnly())
-	assert.NotEmpty(t, entry.WrapperLibraries)
+	assert.Equal(t, "travel", entry.Category)
+	require.Len(t, entry.WrapperLibraries, 1)
+	assert.Equal(t, "krisukox/google-flights-api", entry.WrapperLibraries[0].Name)
+	assert.Equal(t, "native", entry.WrapperLibraries[0].IntegrationMode)
 }
 
 func TestPublicCategoriesExcludeExample(t *testing.T) {
diff --git a/skills/printing-press/SKILL.md b/skills/printing-press/SKILL.md
index 705779d4..a19ca967 100644
--- a/skills/printing-press/SKILL.md
+++ b/skills/printing-press/SKILL.md
@@ -637,7 +637,6 @@ If the catalog has an entry for this API, branch on the entry type:
 
 Present each `wrapper_libraries` entry as a selectable option with language, integration mode, and notes. Example for `google-flights`:
 - **krisukox/google-flights-api** (Go, native, MIT) — Pure Go, importable; single-binary CLI with no runtime deps.
-- **punitarani/fli** (Python, subprocess, MIT) — broader feature coverage (multi-leg, cabin class); requires Python 3.10+ at runtime.
 
 Capture the user's choice and record it in `$API_RUN_DIR/state.json` under an `implementation` field: `{ "library": "<name>", "url": "<url>", "integration_mode": "native|subprocess|html-scrape" }`. Phase 3 generation reads this to decide whether to `go get` a wrapper, emit a subprocess shell-out, or emit HTML-scrape code. Skip the spec-analysis step entirely — there is no spec.
 
@@ -853,7 +852,7 @@ For each named source, run the "When to offer browser-sniff" decision matrix ind
 | Source | Spec state | Expected decision |
 |--------|------------|-------------------|
 | `flightaware` | Documented OpenAPI spec found (53 endpoints, appears complete) | `skip-silent` with reason `spec-complete` |
-| `google-flights` | No official spec, but community wrapper exists (`fli`) | Ask via `AskUserQuestion` → record user's answer |
+| `google-flights` | No official spec, but community wrapper exists (`krisukox/google-flights-api`) | Ask via `AskUserQuestion` → record user's answer |
 | `kayak-direct` | No spec, no wrapper, user named this as a key feature | Ask via `AskUserQuestion` → record user's answer |
 
 The marker file for this run would contain three entries. Phase 1.5 would HALT if any were missing.
diff --git a/testdata/golden/expected/catalog-list/stdout.txt b/testdata/golden/expected/catalog-list/stdout.txt
index 0cf40b8c..10d7a026 100644
--- a/testdata/golden/expected/catalog-list/stdout.txt
+++ b/testdata/golden/expected/catalog-list/stdout.txt
@@ -20,7 +20,6 @@ monitoring:
   sentry               Error tracking and performance monitoring - projects, issues, events, releases
 
 other:
-  google-flights       Flight search via Google Flights. No public API — reached through community-maintained reverse-engineered wrappers.
   kayak                Flight, hotel, and car rental aggregator. No public API and no maintained community wrappers — reached by scraping embedded JSON from server-rendered pages.
 
 payments:
@@ -41,3 +40,6 @@ social-and-messaging:
   telegram             Telegram Bot API for building bots - send messages, manage chats, webhooks, stickers
   twilio               Communication APIs for SMS, voice, and messaging
 
+travel:
+  google-flights       Flight search via Google Flights. No public API — reached through a community-maintained reverse-engineered wrapper.
+

← 7a1d83ad fix(cli): default cookie HTML scrapes to browser transport (  ·  back to Cli Printing Press  ·  chore(main): release 4.2.1 (#805) dfb879de →