feat(flight-finder): implement milestone M1 - domain model and skill contract
This commit is contained in:
75
skills/flight-finder/references/source-viability.md
Normal file
75
skills/flight-finder/references/source-viability.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# Flight Finder Source Viability
|
||||
|
||||
This note records bounded live checks for the first implementation pass.
|
||||
|
||||
It is intentionally operational, not aspirational: if a source is blocked here, the skill must treat it as blocked unless later evidence replaces this note.
|
||||
|
||||
## Required sources
|
||||
|
||||
- KAYAK
|
||||
- Skyscanner
|
||||
- Expedia
|
||||
- airline direct-booking cross-check
|
||||
|
||||
## Status
|
||||
|
||||
Checked on `2026-03-30` from Stefano's MacBook Air, with no VPN active, using the existing local `web-automation` / CloakBrowser probe scripts.
|
||||
|
||||
Route used for bounded checks:
|
||||
|
||||
- `DFW -> BLQ`
|
||||
- outbound date: `2026-05-30`
|
||||
- travelers: `3 adults`
|
||||
|
||||
### KAYAK
|
||||
|
||||
- Status: `viable`
|
||||
- Probe: `node flight_kayak_sweep.mjs DFW BLQ 3 /tmp/flight-finder-kayak-dates.json ...`
|
||||
- Evidence:
|
||||
- title returned as `DFW to BLQ, 5/30`
|
||||
- results included multiple one-stop itineraries with parsed USD fares such as `$877`, `$949`, `$955`
|
||||
- direct-booking hints were visible for British Airways on at least some results
|
||||
- Implementation note:
|
||||
- KAYAK can be a primary source in this first implementation pass
|
||||
- parsed text is workable, but still brittle enough that bounded retries and status fallback remain necessary
|
||||
|
||||
### Skyscanner
|
||||
|
||||
- Status: `viable`
|
||||
- Probe: `node tmp_skyscanner_probe.mjs 'https://www.skyscanner.com/transport/flights/dfw/blq/260530/?adultsv2=3&cabinclass=economy&rtn=0'`
|
||||
- Evidence:
|
||||
- title returned as `Cheap flights from Dallas to Bologna on Skyscanner`
|
||||
- results page exposed concrete prices, total trip prices, stops, and itinerary text
|
||||
- one-stop and multi-stop options were visible in the captured text
|
||||
- Implementation note:
|
||||
- Skyscanner is viable for bounded result capture in this first pass
|
||||
- itinerary extraction should still be treated as text-scrape, not a stable API
|
||||
|
||||
### Expedia
|
||||
|
||||
- Status: `viable`
|
||||
- Probe: `node tmp_expedia_probe.mjs 'https://www.expedia.com/Flights-Search?...'`
|
||||
- Evidence:
|
||||
- title returned as `DFW to BLQ flights`
|
||||
- results page exposed current lowest price, airline/stops filters, and concrete per-traveler options such as `$877`, `$949`, `$961`
|
||||
- Expedia text already surfaced some itinerary summaries in a report-friendly format
|
||||
- Implementation note:
|
||||
- Expedia is viable for bounded result capture in this first pass
|
||||
- as with the other aggregators, source-specific timeouts and fallback rules are still required
|
||||
|
||||
### Airline direct-booking cross-check
|
||||
|
||||
- Status: `degraded`
|
||||
- Probe: `node tmp_skyscanner_probe.mjs 'https://www.united.com/en/us/fsr/choose-flights?...'`
|
||||
- Evidence:
|
||||
- United's booking shell loaded and recognized the route / date context
|
||||
- the search then returned `united.com was unable to complete your request. Please try again later.`
|
||||
- Implementation note:
|
||||
- direct-airline cross-checking remains in scope, but it should be treated as best-effort in the first pass
|
||||
- when a direct site fails or refuses completion, the skill should record the failure explicitly instead of hanging or pretending a clean cross-check happened
|
||||
|
||||
## Scope decision for implementation pass 1
|
||||
|
||||
- Primary bounded search sources: `KAYAK`, `Skyscanner`, `Expedia`
|
||||
- Direct-airline cross-check: `best-effort / degraded`
|
||||
- The skill should continue if the direct-airline step fails, but the report must say that the direct cross-check was not fully completed
|
||||
Reference in New Issue
Block a user