Skip to content

v0.6.3 — Codex review closeout, first npm publish, per-transaction routing#84

Merged
telivity-otaip merged 1 commit into
mainfrom
release/v0.6.3
Apr 18, 2026
Merged

v0.6.3 — Codex review closeout, first npm publish, per-transaction routing#84
telivity-otaip merged 1 commit into
mainfrom
release/v0.6.3

Conversation

@telivity-otaip
Copy link
Copy Markdown
Collaborator

Summary

Eleven PRs (#73#83) merged since 0.6.2.

Root + all 15 workspace packages bumped `0.6.2 → 0.6.3`. Full CHANGELOG entry below; inline here for PR review.

What's in this release

Published to npm

All 15 `@otaip/*` packages are live on npm for the first time (at 0.6.2; 0.6.3 will go out when this merges).

Removed invented domain logic (Codex review HIGH #3/#4/#5)

  • New `@otaip/core` regulation modules: `applyEU261()` (EC 261/2004 — distance bands, 3h delay trigger, Article 7(2) reduction, 14-day safe harbour, extraordinary circumstances) and `applyUsDotIdb()` (14 CFR §250.5 denied-boarding, current $1,075/$2,150 caps effective 2025-01-22). Plus `DomainInputRequired` sentinel type.
  • Fare Construction (2.2): ROE 1.0 fallback removed (was silently multiplying every non-USD by 1); simplified HIP/BHC heuristics replaced with `missing_inputs` surface. Output widened to `FareConstructionOutput | DomainInputRequired`.
  • Change Management (5.1) + Refund Processing (6.1): $200 default removed. Engines read `cat31_rules` / `cat33_rules` from input; absent → ATPCO default (no charge for voluntary, waived for involuntary). Invented rule data relocated to test fixtures.
  • Involuntary Rebook (5.3): 60min IRROP hardcode removed; caller supplies threshold. Real EU261 compensation via core module when inputs present.
  • Feedback & Complaint (6.5): ~250 lines of inline EU261/DOT math replaced with core module calls. DOT IDB caps updated to current law.

Per-transaction GDS/NDC routing (MEDIUM #5)

New required `transaction_type` input (`shopping` | `booking` | `ticketing` | `servicing` | `group` | `corporate`). Built-in carrier defaults cover shopping/booking only; other types need `capability_overrides` or return `domain_input_required: true`.

HTTP hardening (HIGH #2)

New `@otaip/core` `fetchWithRetry` (30s timeout + retry on 5xx/429/network) wired into TripPro SOAP, Sabre auth, Navitaire create+refresh, Duffel adapter. TripPro defaults now HTTPS.

Correctness fixes (MEDIUM #1 + #4)

  • Rate limiter counter now increments per attempt inside the retry loop (was counting once per execute() call, under-reporting by up to 4× on retries)
  • Stub agents throw typed `UnimplementedDomainInputError` instead of raw `Error`

CLI + counts (MEDIUM #3 + LOW #2)

  • CLI agent registry auto-discovered from source (was hand-maintained, drifted from 71→69 and names mismatched)
  • CLI now in lint; 7 new discovery tests
  • New `scripts/count-agents.ts` as single source of truth — used by release notes. Today: 75 agents across 12 stages

CI / release (HIGH #1 + bootstrap + publish prep)

  • Release workflow fails on test failures (was `|| true`'d)
  • CI builds before typecheck (cross-package `@otaip/*` imports now need `dist/`)
  • `publish.yml` verifies packages are live on registry after publish
  • Every workspace package now has `"type": "module"` so tsup output matches declared `main`
  • Root `postinstall` removed (was blocked by `ignore-scripts=true` anyway); docs instruct explicit `pnpm run data:download`
  • tsconfig strictness claim in README/CLAUDE.md corrected

Potentially-breaking (pre-1.0 policy allows this in patch bumps)

  • `FareConstruction` return type widened to union with `DomainInputRequired`
  • `GdsNdcRouter` requires `transaction_type`
  • `ChangeManagement` / `RefundProcessing` default to "no charge" when rules absent (was $200)
  • `InvoluntaryRebook` requires `thresholds.time_change_minutes` for TIME_CHANGE
  • TripPro `searchUrl` / `calendarSearchUrl` defaults switched http→https
  • US DOT IDB caps updated to current law ($1,075 / $2,150)
  • 11 packages gained `"type": "module"`

See full details in the CHANGELOG entry for 0.6.3.

Test plan

  • `pnpm install` — clean
  • `pnpm -r run build` — all 16 packages Done
  • `pnpm test` — 3,092 passed (3 skipped)
  • `pnpm run lint` — clean
  • `pnpm -r run typecheck` — clean
  • Post-merge: `release.yml` builds release notes from this CHANGELOG entry; `publish.yml` publishes 0.6.3 to npm and the new verification step confirms all 15 are live

🤖 Generated with Claude Code

Eleven PRs (#73#83) merged since 0.6.2:
- Codex review closeout (12 findings, all severities)
- First npm publish of the @otaip/* scope
- HTTP hardening (fetchWithRetry, https defaults)
- EU 261 + US DOT IDB regulation modules in @otaip/core
- Per-transaction GDS/NDC routing
- ATPCO-rule-driven change/refund penalties (no invented defaults)
- CLI agent registry auto-discovery
- Bootstrap docs + single-source agent count
- CI/publish workflow hardening (fail on test failures, verify packages live)

Root + 15 workspace packages bumped 0.6.2 → 0.6.3.
See CHANGELOG.md 0.6.3 entry for full detail and potentially-breaking notes.

Verification: 3,092 tests pass, all 16 packages build, dry-run publish
emits 15 tarballs at 0.6.3.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@telivity-otaip telivity-otaip merged commit 2a17a0c into main Apr 18, 2026
1 check passed
@telivity-otaip telivity-otaip deleted the release/v0.6.3 branch April 18, 2026 23:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant