Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ name: CI
# TANGO_API_REPO_ACCESS_TOKEN is available, the same two checks ALSO run as
# hard gates against the fresh contract at makegov/tango HEAD, plus a warning
# annotation when the vendored copy has drifted (re-vendor reminder). Refresh
# the vendored contract by copying contracts/filter_shape_contract.json from
# makegov/tango.
# the vendored contract with `npm run vendor-contract -- <upstream contract>`,
# which vendors only the parts of the contract the SDK consumes.
on:
push:
branches: [ main ]
Expand Down Expand Up @@ -114,8 +114,8 @@ jobs:
- name: Warn when the vendored contract has drifted from tango HEAD
if: steps.gate.outputs.ready == 'true'
run: |
if ! diff -q contracts/filter_shape_contract.json tango-api/contracts/filter_shape_contract.json >/dev/null; then
echo "::warning::Vendored contract differs from makegov/tango HEAD. Re-vendor contracts/filter_shape_contract.json and regenerate the overlay."
if ! npx tsx scripts/vendor-contract.ts tango-api/contracts/filter_shape_contract.json --check >/dev/null; then
echo "::warning::Vendored contract differs from makegov/tango HEAD. Re-vendor with npm run vendor-contract and regenerate the overlay."
else
echo "Vendored contract matches makegov/tango HEAD."
fi
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ This project follows [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [1.5.0] - 2026-10-29

### Added

- **`fsc` filter on `listDibbsRfqs()`, `listDibbsRfps()` and `listDibbsAwards()`** (Tango API 5.13.0). Filters by Federal Supply Class, the first four digits of the 13-digit NSN (NSN `6515012345678` is FSC `6515`). Each value must be exactly four digits, and several are OR'd with `|`, e.g. `"6515|6530"`; any other value makes the API return a 400. It combines with every other filter, `nsn` and `part_number` included.

### Changed

- The vendored API contract now tracks Tango API 5.13.0. Its new financial-assistance award endpoints are not yet in the SDK and are recorded as known gaps in both conformance baselines.

## [1.4.1] - 2026-10-19

### Changed
Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ npm run coverage # single pass with v8 coverage
npm run check-conformance # SDK filters/shapes -> contract
npm run check-shape-coverage # contract shape fields -> SDK schemas
npm run generate-shape-overlay # regenerate src/shapes/generatedOverlay.ts
npm run vendor-contract -- PATH # re-vendor the contract from an upstream copy (projected to what the SDK consumes)
```

### Tests
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@ Useful scripts:
- `npm run check-conformance` – SDK filters/shapes vs the vendored API contract.
- `npm run check-shape-coverage` – Reverse gate: every contract shape field is captured by the SDK.
- `npm run generate-shape-overlay` – Regenerate `src/shapes/generatedOverlay.ts` from the vendored contract.
- `npm run vendor-contract -- PATH` – Re-vendor `contracts/filter_shape_contract.json` from an upstream copy, keeping only what the SDK consumes.

See [docs/DEVELOPERS.md](docs/DEVELOPERS.md) for the conformance architecture and the cassette record/replay workflow.

Expand Down
8 changes: 6 additions & 2 deletions contracts/conformance_baseline.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
{
"_comment": "Accepted SDK coverage gaps vs the API contract. Gaps listed here downgrade from error to warning in scripts/check-filter-shape-conformance.ts. Each entry is tracked backlog: remove it in the same PR that closes the gap in the SDK. `missing_filters` maps a resource to filter params the mapped method does not expose; `unimplemented_resources` lists contract resources with no SDK method at all. events and news are content endpoints with no list method and stay baselined permanently (tango-python does the same).",
"_comment": "Accepted SDK coverage gaps vs the API contract. Gaps listed here downgrade from error to warning in scripts/check-filter-shape-conformance.ts. Each entry is tracked backlog: remove it in the same PR that closes the gap in the SDK. `missing_filters` maps a resource to filter params the mapped method does not expose; `unimplemented_resources` lists contract resources with no SDK method at all. events and news are content endpoints with no list method and stay baselined permanently (tango-python does the same). The assistance/* resources (financial-assistance awards) are not yet ported.",
"missing_filters": {},
"unimplemented_resources": [
"events",
"news"
"news",
"assistance/direct_payments",
"assistance/grants",
"assistance/loans",
"assistance/other"
]
}
Loading
Loading