@cyanheads/congressgov-mcp-server 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/AGENTS.md +31 -19
  2. package/CLAUDE.md +31 -19
  3. package/Dockerfile +2 -2
  4. package/README.md +216 -92
  5. package/changelog/0.1.x/0.1.0.md +36 -0
  6. package/changelog/0.2.x/0.2.0.md +26 -0
  7. package/changelog/0.2.x/0.2.1.md +16 -0
  8. package/changelog/0.3.x/0.3.0.md +26 -0
  9. package/changelog/0.3.x/0.3.1.md +14 -0
  10. package/changelog/0.3.x/0.3.10.md +15 -0
  11. package/changelog/0.3.x/0.3.11.md +18 -0
  12. package/changelog/0.3.x/0.3.12.md +15 -0
  13. package/changelog/0.3.x/0.3.13.md +20 -0
  14. package/changelog/0.3.x/0.3.14.md +30 -0
  15. package/changelog/0.3.x/0.3.15.md +28 -0
  16. package/changelog/0.3.x/0.3.16.md +34 -0
  17. package/changelog/0.3.x/0.3.17.md +28 -0
  18. package/changelog/0.3.x/0.3.18.md +18 -0
  19. package/changelog/0.3.x/0.3.19.md +36 -0
  20. package/changelog/0.3.x/0.3.2.md +12 -0
  21. package/changelog/0.3.x/0.3.20.md +22 -0
  22. package/changelog/0.3.x/0.3.21.md +15 -0
  23. package/changelog/0.3.x/0.3.22.md +29 -0
  24. package/changelog/0.3.x/0.3.23.md +25 -0
  25. package/changelog/0.3.x/0.3.24.md +20 -0
  26. package/changelog/0.3.x/0.3.25.md +12 -0
  27. package/changelog/0.3.x/0.3.26.md +25 -0
  28. package/changelog/0.3.x/0.3.27.md +16 -0
  29. package/changelog/0.3.x/0.3.28.md +18 -0
  30. package/changelog/0.3.x/0.3.29.md +13 -0
  31. package/changelog/0.3.x/0.3.3.md +11 -0
  32. package/changelog/0.3.x/0.3.30.md +28 -0
  33. package/changelog/0.3.x/0.3.31.md +28 -0
  34. package/changelog/0.3.x/0.3.32.md +21 -0
  35. package/changelog/0.3.x/0.3.4.md +18 -0
  36. package/changelog/0.3.x/0.3.5.md +23 -0
  37. package/changelog/0.3.x/0.3.6.md +10 -0
  38. package/changelog/0.3.x/0.3.7.md +15 -0
  39. package/changelog/0.3.x/0.3.8.md +29 -0
  40. package/changelog/0.3.x/0.3.9.md +21 -0
  41. package/changelog/0.4.x/0.4.0.md +28 -0
  42. package/changelog/0.4.x/0.4.1.md +17 -0
  43. package/changelog/0.4.x/0.4.2.md +39 -0
  44. package/changelog/0.4.x/0.4.3.md +16 -0
  45. package/changelog/0.5.x/0.5.0.md +22 -0
  46. package/changelog/0.5.x/0.5.1.md +16 -0
  47. package/changelog/0.5.x/0.5.2.md +29 -0
  48. package/changelog/0.6.x/0.6.0.md +24 -0
  49. package/changelog/0.7.x/0.7.0.md +13 -0
  50. package/changelog/0.7.x/0.7.1.md +35 -0
  51. package/changelog/0.7.x/0.7.2.md +20 -0
  52. package/changelog/template.md +151 -0
  53. package/dist/config/server-config.d.ts +3 -3
  54. package/dist/config/server-config.d.ts.map +1 -1
  55. package/dist/config/server-config.js +6 -3
  56. package/dist/config/server-config.js.map +1 -1
  57. package/dist/index.js +23 -3
  58. package/dist/index.js.map +1 -1
  59. package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts +12 -4
  60. package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts.map +1 -1
  61. package/dist/mcp-server/tools/definitions/bill-lookup.tool.js +94 -3
  62. package/dist/mcp-server/tools/definitions/bill-lookup.tool.js.map +1 -1
  63. package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts +4 -0
  64. package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts.map +1 -1
  65. package/dist/mcp-server/tools/definitions/bill-summaries.tool.js +34 -6
  66. package/dist/mcp-server/tools/definitions/bill-summaries.tool.js.map +1 -1
  67. package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts +4 -0
  68. package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts.map +1 -1
  69. package/dist/mcp-server/tools/definitions/committee-lookup.tool.js +2 -2
  70. package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts +9 -2
  71. package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts.map +1 -1
  72. package/dist/mcp-server/tools/definitions/committee-reports.tool.js +2 -2
  73. package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts +4 -0
  74. package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts.map +1 -1
  75. package/dist/mcp-server/tools/definitions/crs-reports.tool.js +2 -2
  76. package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts +9 -2
  77. package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts.map +1 -1
  78. package/dist/mcp-server/tools/definitions/daily-record.tool.js +2 -2
  79. package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts +4 -0
  80. package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts.map +1 -1
  81. package/dist/mcp-server/tools/definitions/enacted-laws.tool.js +2 -2
  82. package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts +4 -0
  83. package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts.map +1 -1
  84. package/dist/mcp-server/tools/definitions/member-lookup.tool.js +2 -2
  85. package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts +4 -0
  86. package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts.map +1 -1
  87. package/dist/mcp-server/tools/definitions/roll-votes.tool.js +2 -2
  88. package/dist/mcp-server/tools/definitions/search-bills.tool.d.ts +1 -1
  89. package/dist/mcp-server/tools/definitions/search-bills.tool.js +3 -3
  90. package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts +4 -0
  91. package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts.map +1 -1
  92. package/dist/mcp-server/tools/definitions/senate-nominations.tool.js +2 -2
  93. package/dist/mcp-server/tools/format-helpers.d.ts.map +1 -1
  94. package/dist/mcp-server/tools/format-helpers.js +85 -30
  95. package/dist/mcp-server/tools/format-helpers.js.map +1 -1
  96. package/dist/mcp-server/tools/summary-window.d.ts +112 -0
  97. package/dist/mcp-server/tools/summary-window.d.ts.map +1 -0
  98. package/dist/mcp-server/tools/summary-window.js +182 -0
  99. package/dist/mcp-server/tools/summary-window.js.map +1 -0
  100. package/dist/mcp-server/tools/tool-helpers.d.ts +26 -2
  101. package/dist/mcp-server/tools/tool-helpers.d.ts.map +1 -1
  102. package/dist/mcp-server/tools/tool-helpers.js +26 -2
  103. package/dist/mcp-server/tools/tool-helpers.js.map +1 -1
  104. package/dist/services/congress-api/congress-api-service.d.ts.map +1 -1
  105. package/dist/services/congress-api/congress-api-service.js +8 -11
  106. package/dist/services/congress-api/congress-api-service.js.map +1 -1
  107. package/dist/services/congress-documents/congress-documents-service.d.ts.map +1 -1
  108. package/dist/services/congress-documents/congress-documents-service.js +10 -9
  109. package/dist/services/congress-documents/congress-documents-service.js.map +1 -1
  110. package/dist/services/congress-documents/extract-text-stream.js +1 -1
  111. package/dist/services/congress-documents/extract-text-stream.js.map +1 -1
  112. package/dist/services/congress-documents/extract-text.d.ts +0 -6
  113. package/dist/services/congress-documents/extract-text.d.ts.map +1 -1
  114. package/dist/services/congress-documents/extract-text.js +4 -37
  115. package/dist/services/congress-documents/extract-text.js.map +1 -1
  116. package/dist/services/congress-mirror/congress-mirror-service.js +1 -1
  117. package/dist/services/congress-mirror/ingest.d.ts +1 -1
  118. package/dist/services/congress-mirror/normalize.d.ts +4 -1
  119. package/dist/services/congress-mirror/normalize.d.ts.map +1 -1
  120. package/dist/services/congress-mirror/normalize.js +8 -12
  121. package/dist/services/congress-mirror/normalize.js.map +1 -1
  122. package/dist/services/congress-mirror/types.d.ts +1 -1
  123. package/dist/services/senate-lis/parse.d.ts.map +1 -1
  124. package/dist/services/senate-lis/parse.js +74 -2
  125. package/dist/services/senate-lis/parse.js.map +1 -1
  126. package/dist/services/senate-lis/senate-vote-service.d.ts.map +1 -1
  127. package/dist/services/senate-lis/senate-vote-service.js +9 -7
  128. package/dist/services/senate-lis/senate-vote-service.js.map +1 -1
  129. package/dist/services/senate-lis/types.d.ts +8 -1
  130. package/dist/services/senate-lis/types.d.ts.map +1 -1
  131. package/dist/utils/character-references.d.ts +27 -0
  132. package/dist/utils/character-references.d.ts.map +1 -0
  133. package/dist/utils/character-references.js +60 -0
  134. package/dist/utils/character-references.js.map +1 -0
  135. package/package.json +11 -9
  136. package/server.json +3 -3
@@ -0,0 +1,23 @@
1
+ ---
2
+ summary: Ten domain-specific markdown formatters replace the generic formatResult; core 0.1.29 → 0.2.3 bump; report-issue skills added
3
+ breaking: false
4
+ ---
5
+
6
+ # 0.3.5 — 2026-03-28
7
+
8
+ ### Changed
9
+
10
+ - Rewrote tool output formatting — replaced generic `formatResult` with 10 domain-specific markdown formatters (`formatBills`, `formatMembers`, `formatSummaries`, `formatCommittees`, `formatCommitteeReports`, `formatCrsReports`, `formatDailyRecord`, `formatLaws`, `formatVotes`, `formatNominations`) for richer, more readable LLM output
11
+ - Bumped `@cyanheads/mcp-ts-core` from ^0.1.29 to ^0.2.3
12
+ - Updated `polish-docs-meta` skill to v1.2 — added GitHub repo metadata sync step and description propagation guidance
13
+
14
+ ### Added
15
+
16
+ - `report-issue-framework` skill for filing bugs against `@cyanheads/mcp-ts-core`
17
+ - `report-issue-local` skill for filing bugs against this server's repo
18
+ - Security overrides for `brace-expansion` (>=2.0.3) and `path-to-regexp` (>=8.4.0)
19
+ - `LOGS_DIR` env var documented in README and skill references
20
+
21
+ ### Removed
22
+
23
+ - `tsx` dev dependency (no longer needed)
@@ -0,0 +1,10 @@
1
+ ---
2
+ summary: Core 0.2.3 → 0.2.8 bump
3
+ breaking: false
4
+ ---
5
+
6
+ # 0.3.6 — 2026-03-28
7
+
8
+ ### Changed
9
+
10
+ - Bumped `@cyanheads/mcp-ts-core` from ^0.2.3 to ^0.2.8
@@ -0,0 +1,15 @@
1
+ ---
2
+ summary: Author metadata + funding links, core 0.2.8 → 0.2.10 bump, skill updates (add-tool v1.1, add-resource v1.1, design-mcp-server v2.1)
3
+ breaking: false
4
+ ---
5
+
6
+ # 0.3.7 — 2026-03-30
7
+
8
+ ### Changed
9
+
10
+ - Updated author metadata and added funding links (GitHub Sponsors, Buy Me a Coffee) in package.json
11
+ - Bumped `@cyanheads/mcp-ts-core` from ^0.2.8 to ^0.2.10
12
+ - Bumped `@biomejs/biome` from ^2.4.9 to ^2.4.10
13
+ - Updated `add-tool` skill to v1.1 — expanded `format()` template with content-complete rendering, added Tool Response Design section (partial success, empty results, error classification, operational metadata, context budget)
14
+ - Updated `add-resource` skill to v1.1 — added tool coverage guidance (resources invisible to tool-only clients)
15
+ - Updated `design-mcp-server` skill to v2.1 — live API probing, batch input design, error classification table, convenience shortcuts, tool-first surface design, service resilience planning
@@ -0,0 +1,29 @@
1
+ ---
2
+ summary: AGENTS.md for non-Claude agents, add-app-tool skill, shared schema helpers, core 0.2.10 → 0.3.5 bump, stricter tool schemas and service resilience improvements
3
+ breaking: false
4
+ ---
5
+
6
+ # 0.3.8 — 2026-04-19
7
+
8
+ ### Added
9
+
10
+ - Added `AGENTS.md` for non-Claude agents
11
+ - Added the `add-app-tool` skill for MCP Apps tool and UI resource scaffolding
12
+ - Added shared tool schema helpers in `src/mcp-server/tools/tool-helpers.ts`
13
+
14
+ ### Changed
15
+
16
+ - Bumped `@cyanheads/mcp-ts-core` from `^0.2.10` to `^0.3.5`
17
+ - Bumped `@biomejs/biome` from `^2.4.10` to `^2.4.12`, `@types/node` from `^25.5.0` to `^25.6.0`, `typescript` from `^6.0.2` to `^6.0.3`, and `vitest` from `^4.1.2` to `^4.1.4`
18
+ - Updated Congress.gov tool and resource outputs to use stricter schemas, preserve pagination metadata, and pass request context through service calls. Tools return only normalized fields (`data`/`pagination` for lists, `bill`/`member`/`committee`/etc. for details) — upstream envelopes are no longer duplicated in structured output
19
+ - Updated markdown formatters to surface upstream URLs and improve empty-field handling
20
+ - Updated `CongressApiService` to use framework retry and timeout utilities, and carry request context and abort signals through HTTP calls
21
+ - Updated project skills for direct `createApp()` registration guidance, external-service resilience, testing layout, field-test coverage, and devcheck expectations
22
+ - Dropped the `overrides` block for `brace-expansion` and `path-to-regexp` — upstream chains now resolve to patched versions and `bun audit` is clean without them
23
+
24
+ ### Fixed
25
+
26
+ - Fixed `getLaw` returning an empty `law` field — Congress.gov returns the law endpoint payload under `bill`, not `law`, so the normalized field was always undefined. Added a service-level test asserting `result.law` is populated
27
+ - Fixed CRS report error handling to distinguish structured upstream "not found" responses from real service outages
28
+ - Fixed member lookup validation to reject ambiguous `congress` and location filters instead of silently dropping one
29
+ - Fixed the `CLAUDE.md` commands table to use `bun run test`
@@ -0,0 +1,21 @@
1
+ ---
2
+ summary: Fix list-rendering regressions across crs-reports, daily-record, roll-votes, bill actions, committee reports, and committee detail; bill summaries doc clarity; format-helpers regression tests
3
+ breaking: false
4
+ ---
5
+
6
+ # 0.3.9 — 2026-04-19
7
+
8
+ ### Fixed
9
+
10
+ - Fixed `congressgov_crs_reports` list rendering every entry as "Report number not available" — `renderCrsReportItem` now falls back to the API's `id` field (e.g., `R46991`) when `reportNumber` and `number` are absent, and also checks `publishDate` when `updateDate` is missing (closes #2)
11
+ - Fixed `congressgov_daily_record`, `congressgov_roll_votes`, `congressgov_bill_lookup` (actions sub-resource), and `congressgov_committee_reports` (text sub-resource) rendering every list entry as `"Item"` — added domain-specific renderers (`renderDailyRecordItem`, `renderRollVoteItem`, `renderBillActionItem`, `renderCommitteeReportTextItem`) that use the actual field shapes returned by Congress.gov (closes #2)
12
+ - Fixed `congressgov_committee_lookup` detail view hiding the committee name — `formatCommittees` now extracts the display name from `history[0].officialName` (with `libraryOfCongressName` fallback) and surfaces it as a top-level heading (closes #2)
13
+
14
+ ### Changed
15
+
16
+ - Clarified `congressgov_bill_summaries` description and parameter docs — `fromDateTime`/`toDateTime` filter on the summary update time, not the bill action date. The list heading now shows both the bill's action date and the summary update date (closes #2)
17
+ - Documented ordering behavior on `congressgov_committee_lookup`'s `bills` sub-resource — results are ascending by update date and the upstream API does not honor a `sort` parameter; description now explains the `offset = count - limit` workaround for reaching recent activity (closes #2)
18
+
19
+ ### Added
20
+
21
+ - Added `tests/mcp-server/tools/format-helpers.test.ts` with extensive regression coverage for every renderer, using fixtures captured from live Congress.gov API responses
@@ -0,0 +1,28 @@
1
+ ---
2
+ summary: "New congressgov_search_bills tool — keyword search over a local SQLite + FTS5 mirror of bill titles and CRS summaries, the discovery path the Congress.gov API lacks. Opt-in, off by default (CONGRESS_MIRROR_ENABLED); adds node-cron + optional better-sqlite3, four optional mirror env vars, and mirror:init/refresh/verify scripts."
3
+ breaking: false
4
+ security: false
5
+ agent-notes: |
6
+ The mirror and congressgov_search_bills are opt-in and off by default
7
+ (CONGRESS_MIRROR_ENABLED=false); until enabled the tool registers via
8
+ disabledTool() (visible but uncallable) and no existing tool changes. Even
9
+ when enabled, search returns results only after an out-of-band
10
+ `bun run mirror:init` builds the index — the mirror is never built on server
11
+ startup. Hosted deployments need a persistent volume at CONGRESS_MIRROR_PATH
12
+ (default .mirror/bills.sqlite3) to survive container recreates.
13
+ ---
14
+
15
+ # 0.4.0 — 2026-06-30
16
+
17
+ ## Added
18
+
19
+ - **`congressgov_search_bills`** — keyword search over bill titles and CRS summary text, the discovery path the Congress.gov API structurally lacks (it exposes no keyword search). Backed by a local SQLite + FTS5 mirror; returns BM25-ranked matches, each with the derived bill id (`congress/billType/billNumber`) for a follow-up `congressgov_bill_lookup` call and a truncated summary preview, narrowable by optional `congress`, `billType`, and `originChamber` filters. Opt-in and off by default — registered via `disabledTool()` (visible but uncallable) until `CONGRESS_MIRROR_ENABLED=true`, so no existing tool changes. ([#40](https://github.com/cyanheads/congressgov-mcp-server/issues/40))
20
+ - **`CongressMirrorService`** (`src/services/congress-mirror/`) — a local FTS5 mirror of bill title + CRS summary built on the framework `MirrorService`, ingesting through the existing `CongressApiService` (bill list + `/summaries`). No live-API fallback: a mirror that has not finished its initial build returns an empty result with a notice, not an error.
21
+ - **Mirror lifecycle scripts** — `mirror:init` (full out-of-band build), `mirror:refresh` (incremental re-scan from the last `updateDate` checkpoint), and `mirror:verify` (readiness + SQLite integrity check), sharing a `scripts/_mirror-context.ts` bootstrap. Under HTTP transport, `CONGRESS_MIRROR_REFRESH_CRON` schedules an in-process incremental refresh; the mirror is never built or refreshed on server startup.
22
+ - **Four optional mirror env vars** — `CONGRESS_MIRROR_ENABLED` (default `false`), `CONGRESS_MIRROR_PATH` (default `.mirror/bills.sqlite3`), `CONGRESS_MIRROR_REFRESH_CRON` (unset), and `CONGRESS_MIRROR_CONGRESSES` (default: current congress + the one prior). None required — the standard deploy stays config-free.
23
+ - **`Dockerfile`** — mirror-CLI copy stanza so `docker exec <container> bun run mirror:init` / `mirror:refresh` / `mirror:verify` work against a deployed image; copies the lifecycle scripts and emits a runtime `tsconfig.json` resolving the `@/` alias against `./dist`.
24
+
25
+ ## Dependencies
26
+
27
+ - **`node-cron`** `^4.4.1` added — in-process incremental-refresh scheduler.
28
+ - **`better-sqlite3`** `^12.0.0` added as an optional peer dependency (`^12.11.1` devDependency) — Bun uses its built-in `bun:sqlite` at runtime; `better-sqlite3` covers the Node install path.
@@ -0,0 +1,17 @@
1
+ ---
2
+ summary: "Packaging fix — ships the 0.4.0 mirror feature's GHCR image, which 0.4.0 couldn't build. The build-stage bun install skips better-sqlite3's node-gyp postinstall (the image uses bun:sqlite), and better-sqlite3 becomes a regular dependency so npm/Node consumers of the opt-in mirror install it. No runtime change."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.4.1 — 2026-06-30
8
+
9
+ Ships the GHCR container image for the 0.4.0 `congressgov_search_bills` mirror feature — 0.4.0 published to npm, the MCP Registry, and GitHub, but its multi-arch image failed to build. Packaging only; no source or runtime behavior change.
10
+
11
+ ## Fixed
12
+
13
+ - **Container image build** — the 0.4.0 multi-arch GHCR build failed because `better-sqlite3`'s `node-gyp` postinstall ran during `bun install` in the toolchain-less `oven/bun` base image. The build-stage `bun install` now passes `--ignore-scripts`, matching the production stage; the image runs under Bun and uses `bun:sqlite`, so the native `better-sqlite3` binding is never loaded or needed in the container. ([#40](https://github.com/cyanheads/congressgov-mcp-server/issues/40))
14
+
15
+ ## Changed
16
+
17
+ - **`better-sqlite3`** — promoted from an optional peer dependency to a regular `dependency` (`^12.11.1`); `trustedDependencies` removed. npm/Node consumers of the opt-in mirror now install it automatically; Bun continues to use its built-in `bun:sqlite` at runtime.
@@ -0,0 +1,39 @@
1
+ ---
2
+ summary: "Fixes chainable list-row identifiers, committee_lookup filtered pagination and single-word name resolution, reversed date-range validation, and exhausted-page notices bleeding into no-match guidance; adopts mcp-ts-core ^0.11.5 and TypeScript 7."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.4.2 — 2026-08-16
8
+
9
+ ## Added
10
+
11
+ - **Supply-chain guards** — `bunfig.toml` now blocks installing package versions published in the last 3 days (`minimumReleaseAge`, `@cyanheads/mcp-ts-core` excluded for same-day adoption) and scans installs with `@socketsecurity/bun-security-scanner`.
12
+ - **Community health files** — `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, `FUNDING.yml`, and `.gitattributes`.
13
+
14
+ ## Changed
15
+
16
+ - **Upstream HTTP diagnostics** now read from the framework's canonical `error.data.status`/`error.data.body` fields instead of `statusCode`/`responseBody`, and 404 is marked an expected status so a Congress.gov not-found response logs at debug rather than error severity.
17
+ - **Docker build** uses BuildKit cache mounts and installs production dependencies with `--omit=peer`, keeping the framework's optional peer tiers (test runner, service SDKs, parsers) out of the runtime image.
18
+
19
+ ## Fixed
20
+
21
+ - **`congressgov_bill_lookup`/`congressgov_daily_record`** — `billNumber`, `volumeNumber`, and `issueNumber` now accept the digit-string form list rows carry (e.g. `"9479"`), not just a JSON number, so a list row's identifier chains directly into the matching detail call. ([#43](https://github.com/cyanheads/congressgov-mcp-server/issues/43))
22
+ - **`congressgov_committee_lookup`** — the filtered `list` result is now paginated by `offset`/`limit` with a real `nextOffset`, instead of returning every match regardless of the caller's page size. ([#44](https://github.com/cyanheads/congressgov-mcp-server/issues/44))
23
+ - **`congressgov_committee_lookup`** — `committeeCode` now resolves single-word committee names (e.g. `Judiciary`) the same way multi-word names already did; matching routes on committee-code shape rather than on the presence of whitespace. ([#46](https://github.com/cyanheads/congressgov-mcp-server/issues/46))
24
+ - **`congressgov_bill_lookup`/`congressgov_bill_summaries`** — a reversed `fromDateTime`/`toDateTime` pair is now rejected as an input error instead of silently returning an empty result indistinguishable from a genuine no-match. ([#48](https://github.com/cyanheads/congressgov-mcp-server/issues/48))
25
+ - **Exhausted-page notices** — a shared `notifyIfNoMatches()` now gates every browse/list tool's no-match enrichment notice on the upstream total, across 22 call sites in 11 tool definitions, so paging past the end of a non-empty result set no longer pairs the accurate "page is empty" text with a contradictory "no matches" notice. ([#49](https://github.com/cyanheads/congressgov-mcp-server/issues/49))
26
+
27
+ ## Dependency bumps
28
+
29
+ - `@cyanheads/mcp-ts-core` `^0.10.10` → `^0.11.5`
30
+ - `typescript` `^6.0.3` → `^7.0.2`
31
+ - `better-sqlite3` `^12.11.1` → `^13.0.3`
32
+ - `fast-xml-parser` `^5.9.3` → `^5.10.1`
33
+ - `node-cron` `^4.4.1` → `^4.6.0`
34
+ - `@biomejs/biome` `^2.5.1` → `^2.5.8`
35
+ - `@types/node` `^26.0.1` → `^26.2.0`
36
+ - `ignore` `^7.0.5` → `^7.0.6`
37
+ - `tsc-alias` `^1.8.17` → `^1.9.1`
38
+ - `vitest` `^4.1.9` → `^4.1.10`
39
+ - `@socketsecurity/bun-security-scanner` added at `^1.1.2`
@@ -0,0 +1,16 @@
1
+ ---
2
+ summary: "Fix silent data loss and truncation across detail/list rendering, HTML-to-Markdown spacing, and the enacted-laws list-to-get chain."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.4.3 — 2026-08-16
8
+
9
+ ## Fixed
10
+
11
+ - **`congressgov_enacted_laws` list rows** now render the public/private law citation (`**Law:** Public Law 118-90`), shared by `lawCitations()` with bill lists and member sponsored/cosponsored legislation ([#45](https://github.com/cyanheads/congressgov-mcp-server/issues/45)).
12
+ - **Detail renderers no longer silently drop or cut off upstream data.** The member, roll-vote, senate-vote, and nomination detail formatters now fall through to `renderDetailRest` for any field outside their curated header set, and every hard cap on nested arrays (terms, leadership, nominees) and inline-string previews was removed — `renderInline` recurses into nested objects/arrays instead of truncating or JSON-stringifying them ([#50](https://github.com/cyanheads/congressgov-mcp-server/issues/50)).
13
+ - **Curated collection rows** (member terms, party history, leadership; nomination nominees) now append their own fields the curated line doesn't name, via a new `withUnnamedFields()` helper — found verifying #50, since the `renderDetailRest` fall-through only reaches a record's top level, not a collection the header renders itself.
14
+ - **`htmlToMarkdown()` boundary whitespace.** Emphasis spans (`<em>`/`<strong>`) are now matched and wrapped as whole units so a space inside the tag boundary (`<em>de minimis </em>treatment`) stays outside the Markdown marker instead of corrupting word spacing ([#51](https://github.com/cyanheads/congressgov-mcp-server/issues/51)).
15
+ - **`bill_lookup operation:"subjects"` now includes the policy area.** `extractSubjectItems()` emits it ahead of `legislativeSubjects[]`, each row tagged with a new `subjectType` field (`policyArea` | `legislativeSubject`) — previously dropped by `extractListItems()`'s single-array extraction, so pagination's advertised total exceeded what a caller could retrieve ([#47](https://github.com/cyanheads/congressgov-mcp-server/issues/47)).
16
+ - **`enacted_laws` `lawNumber` accepts the citation list rows actually carry.** `lawNumber` now takes either the bare integer or the compound `{congress}-{number}` citation (`"118-90"`), cross-checked against the supplied `congress` and normalized via `toLawNumber()` — removes the undocumented split-on-hyphen step between `list` and `get` ([#54](https://github.com/cyanheads/congressgov-mcp-server/issues/54)).
@@ -0,0 +1,22 @@
1
+ ---
2
+ summary: "Add bounded legislative document text retrieval (`content`) to bill, committee-report, and daily-record tools; fix list-row field loss and make the research prompt mirror-aware."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.5.0 — 2026-08-16
8
+
9
+ ## Added
10
+
11
+ - **`content` operation** on `congressgov_bill_lookup`, `congressgov_committee_reports`, and `congressgov_daily_record` retrieves the actual document text behind their format URLs, one exact character window at a time (`characterOffset`/`characterLimit`, default 25,000, max 100,000) — pick a `format` (`text` or `xml`) and follow `nextOffset` to walk a whole document. Backed by a new `CongressDocumentsService` reaching `www.congress.gov` — a second host from the rest of the server, no API key, bounded by a 5,000,000-byte fetch ceiling, a 30s deadline, and host/content-type allowlists. Adds five error contracts: `document_unavailable`, `format_unavailable`, `document_fetch_failed`, `document_too_large`, `offset_past_end` ([#53](https://github.com/cyanheads/congressgov-mcp-server/issues/53)).
12
+
13
+ ## Changed
14
+
15
+ - **`congressgov_legislative_research` prompt** now emits a discovery plan matching the deployment: with `CONGRESS_MIRROR_ENABLED` it routes through `congressgov_search_bills`; without it, it asks for a bill/member/committee/report seed instead of naming tools that can't filter by topic ([#52](https://github.com/cyanheads/congressgov-mcp-server/issues/52)).
16
+
17
+ ## Fixed
18
+
19
+ - **List-row renderers no longer drop fields the curated line doesn't name.** New `withRowRest()`/`pick()` primitives in `format-helpers.ts` extend the existing completeness invariant from detail views to list rows — recovers values like a subcommittee row's `parent.systemCode` and a House vote row's `bioguideId` ([#55](https://github.com/cyanheads/congressgov-mcp-server/issues/55)).
20
+ - **`bill_lookup content` no longer serves the wrong version past the end of the list.** Congress.gov appends the enacted "Public Law" text version to every page, so an out-of-range `textVersionIndex` silently returned that row instead of failing — now decided from `pagination.count`.
21
+ - **`renderGenericItem` no longer drops `citation`/`bioguideId`/`systemCode`** when a row also carries a `type`+`number` pair.
22
+ - **`latestAction` rendering no longer drops `actionTime`** at the six sites that render it.
@@ -0,0 +1,16 @@
1
+ ---
2
+ summary: "Raise the `content` document ceiling to 25 MB via a streaming extractor, reaching the largest enacted bills; map mid-stream fetch failures correctly and fix the too-large recovery hint."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.5.1 — 2026-08-17
8
+
9
+ ## Changed
10
+
11
+ - **`content` document ceiling raised 5,000,000 → 25,000,000 bytes**, backed by a new incremental extractor (`extract-text-stream.ts`) that extracts text as the body streams and retains only the requested character window instead of buffering the whole document — a read's live set stays flat in size regardless of the document. The largest enacted bills are now reachable in either published format: 116th Congress H.R. 133 is 6,790,482 bytes as Formatted Text and 9,812,888 as XML, both previously refused outright. The extractor is held byte-for-byte identical to the existing whole-string `extract-text.ts`, which remains the normative definition of the extraction, by a differential test ([#56](https://github.com/cyanheads/congressgov-mcp-server/issues/56)).
12
+ - **`document_too_large` recovery hint** no longer points callers at the other format, which fails the same way — it names the `sourceUrl` instead.
13
+
14
+ ## Fixed
15
+
16
+ - **A document body that fails mid-stream now maps to `document_fetch_failed`** instead of surfacing an unmapped, retried `Error`.
@@ -0,0 +1,29 @@
1
+ ---
2
+ summary: "Adopts mcp-ts-core 0.12.x: HTTP serves protocol revision 2026-07-28, tool arguments are strict and advertised as 2020-12 JSON Schema with a declared error envelope, and the catalog and resource reads now carry cache hints."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.5.2 — 2026-08-25
8
+
9
+ ## Added
10
+
11
+ - **Cache hints on the cacheable results** ([mcp-ts-core#359](https://github.com/cyanheads/mcp-ts-core/issues/359)). `createApp({ cacheHints })` marks the catalog operations — `tools/list`, `prompts/list`, `resources/list`, `resources/templates/list`, `server/discover` — cacheable for an hour and `resources/read` for five minutes, both `public`; `congress://bill-types` overrides to a day and `congress://current` to an hour. Honored on protocol revision 2026-07-28 only, so 2025-era responses are unchanged.
12
+
13
+ ## Changed
14
+
15
+ - **HTTP serves protocol revision `2026-07-28`** alongside the `initialize`-negotiated 2025 revisions, and `/.well-known/mcp.json` reports `mcp_version: 2026-07-28`.
16
+ - **Tool arguments are strict** ([mcp-ts-core#232](https://github.com/cyanheads/mcp-ts-core/issues/232)). An argument key no tool declares is rejected by name instead of silently stripped, and every advertised `inputSchema` carries `additionalProperties: false` — a caller who sends `querry` gets an `unrecognized_keys` failure rather than an unfiltered answer.
17
+ - **Advertised schemas are JSON Schema 2020-12**, and every tool's `outputSchema` declares the failure envelope ([mcp-ts-core#241](https://github.com/cyanheads/mcp-ts-core/issues/241)): success fields become optional, `error` is declared, and an `anyOf` restores requiredness per branch. A client that validates `structuredContent` without checking `isError` no longer rejects error results with `-32602`.
18
+ - **`resources/subscribe` and `logging` are advertised and backed.** `logging/setLevel` resolves, and handler log lines reach the client as `notifications/message` at their RFC 5424 level.
19
+ - **The API, document, and Senate LIS services derive their network context from the handler's own context** via `requestContextService.createRequestContext({ parentContext: ctx })`, replacing a local `RequestContextLike` shim — the request ID now carries into upstream fetch logs and retry reports instead of being replaced by a per-service literal.
20
+ - **Bun pins move to `1.4.0`** — both `Dockerfile` stages and `packageManager`; `engines.bun` stays `>=1.3.0`. The build stage is pinned to `--platform=$BUILDPLATFORM`, since Bun ≥1.4 aborts under QEMU user-mode emulation and would kill the `linux/amd64` leg of a multi-arch `buildx` run on an arm64 host.
21
+ - **`MCP_SESSION_MODE` is documented** in `.env.example` and the README config table: `auto` by default, resolving to `stateful`, while the published Docker image runs `stateless`. No behavior change — the image already set it.
22
+
23
+ ## Dependencies
24
+
25
+ - `@cyanheads/mcp-ts-core` `^0.11.5` → `^0.12.3`
26
+ - `@biomejs/biome` `^2.5.8` → `^2.5.10`
27
+ - `fast-xml-parser` `^5.10.1` → `^5.11.0`
28
+ - `tsc-alias` `^1.9.1` → `^1.9.2`
29
+ - `vitest` `^4.1.10` → `^4.1.11`
@@ -0,0 +1,24 @@
1
+ ---
2
+ summary: "Tightens advertised tool contracts: names every result root, adds readable titles, and validates searches and member identifiers at the MCP boundary."
3
+ breaking: true
4
+ security: false
5
+ ---
6
+
7
+ # 0.6.0 — 2026-08-30
8
+
9
+ ## Changed
10
+
11
+ - **`tools/list` output schemas** now declare every non-list result root while retaining permissive nested Congress.gov records ([#64](https://github.com/cyanheads/congressgov-mcp-server/issues/64)).
12
+ - **Tool titles** now use explicit `Congress.gov` branding, preserve `CRS`, and omit internal committee-filter implementation details ([#65](https://github.com/cyanheads/congressgov-mcp-server/issues/65)).
13
+ - **`congressgov_search_bills.query`** now requires at least one Unicode letter or number and rejects tokenless searches at the MCP boundary ([#61](https://github.com/cyanheads/congressgov-mcp-server/issues/61)).
14
+ - **`congressgov_member_lookup` identifiers** now validate Bioguide IDs as one ASCII letter plus six digits and state codes as two ASCII letters ([#66](https://github.com/cyanheads/congressgov-mcp-server/issues/66)).
15
+
16
+ ## Fixed
17
+
18
+ - **List formatters** now preserve list rendering when results also carry named document-content metadata.
19
+
20
+ ## Dependencies
21
+
22
+ - `fast-xml-parser` `^5.11.0` → `^5.11.1`
23
+ - `@biomejs/biome` `^2.5.10` → `^2.5.11`
24
+ - `@types/node` `^26.2.0` → `^26.4.0`
@@ -0,0 +1,13 @@
1
+ ---
2
+ summary: "Preserves HTML list structure, safely fences document text, and separates adjacent XML elements in the content contract."
3
+ breaking: true
4
+ security: false
5
+ ---
6
+
7
+ # 0.7.0 — 2026-08-30
8
+
9
+ ## Changed
10
+
11
+ - **Rendered HTML lists** now preserve item and following-paragraph boundaries in `content[]` while retaining the source HTML in structured results ([#58](https://github.com/cyanheads/congressgov-mcp-server/issues/58)).
12
+ - **Document `content[]`** now wraps exact structured text in a Markdown fence longer than any backtick run it contains ([#59](https://github.com/cyanheads/congressgov-mcp-server/issues/59)).
13
+ - **XML document extraction** now separates adjacent structural siblings while leaving inline tags and existing whitespace transparent; this intentionally changes `content` text, offsets, `nextOffset`, and total characters for no-`<pre>` XML documents ([#60](https://github.com/cyanheads/congressgov-mcp-server/issues/60)).
@@ -0,0 +1,35 @@
1
+ ---
2
+ summary: "With MCP_SESSION_MODE unset, HTTP defaults to stateless; an explicit MCP_SESSION_MODE value still overrides it. This release also adopts mcp-ts-core 0.13.6 with typed argument recovery."
3
+ breaking: true
4
+ security: false
5
+ agent-notes: |
6
+ Require Bun 1.4.0 or newer. Development skills now live in framework-skills/ rather than skills/.
7
+ ---
8
+
9
+ # 0.7.1 — 2026-09-19
10
+
11
+ ## Changed
12
+
13
+ - **`@cyanheads/mcp-ts-core`** advances from `^0.12.3` to `^0.13.6`. Require Bun 1.4.0 or newer; development skills now live in `framework-skills/` rather than `skills/`.
14
+ - **HTTP sessions:** With `MCP_SESSION_MODE` unset, HTTP defaults to stateless; an explicit `MCP_SESSION_MODE` value still overrides it.
15
+ - **Tool argument rejections** now use typed `InvalidParams` envelopes with schema-derived recovery advice and client-visible reason text.
16
+ - **Environment configuration** treats empty strings and whole-value unsubstituted `${…}` placeholders as unset.
17
+ - **Argument key normalization** accepts `state_code` as `stateCode` when the canonical key is absent; unrelated unknown keys remain rejected.
18
+ - **Plugins and MCPB metadata** now expose `CONGRESS_API_KEY` as optional user configuration.
19
+ - **Development tooling and documentation** refresh the capability reference and contributor metadata, synchronize framework build and validation scripts, add CodeQL analysis, and include per-version changelogs in the npm package.
20
+
21
+ ## Fixed
22
+
23
+ - **Upstream requests** preserve caller cancellation and non-retryable outcomes across Congress.gov documents, Congress.gov API calls, and Senate LIS votes.
24
+ - **Mirror lifecycle** stops scheduled refreshes and awaits cancellation before closing SQLite during teardown.
25
+ - **`congressgov_member_lookup` documentation** no longer advertises a nonexistent chamber filter ([#72](https://github.com/cyanheads/congressgov-mcp-server/issues/72)).
26
+
27
+ ## Dependencies
28
+
29
+ - `@cyanheads/mcp-ts-core` `^0.12.3` → `^0.13.6`
30
+ - `zod` `^4.4.3` → `^4.6.5`
31
+ - `@biomejs/biome` `^2.5.11` → `^2.5.14`
32
+ - `@types/node` `^26.4.0` → `^26.6.1`
33
+ - `ignore` `^7.0.6` → `^7.0.9`
34
+ - `tsc-alias` `^1.9.2` → `^1.9.5`
35
+ - `vitest` `^4.1.11` → `^5.0.1`
@@ -0,0 +1,20 @@
1
+ ---
2
+ summary: "Character references now decode in a single pass, closing three CodeQL double-escaping alerts. This release also resolves Senate roll-call vote dates and bounds summary text windows."
3
+ breaking: false
4
+ security: true
5
+ ---
6
+
7
+ # 0.7.2 — 2026-09-22
8
+
9
+ ## Fixed
10
+
11
+ - **`congressgov_roll_votes` Senate list rows** now carry a resolved `voteDateIso` beside the menu's year-less `voteDate`, derived by walking the session's vote sequence across December→January rollovers. ([#67](https://github.com/cyanheads/congressgov-mcp-server/issues/67))
12
+ - **`congressgov_bill_summaries` and `congressgov_bill_lookup` `summaries`** now bound page size and per-row summary text — a windowed row carries `textTotalCharacters`/`textTruncated`/`textNextOffset`, and `summaries` gains a `versionCode` selector. ([#70](https://github.com/cyanheads/congressgov-mcp-server/issues/70))
13
+
14
+ ## Security
15
+
16
+ - **Character references** decode in a single pass through a shared decoder (`src/utils/character-references.ts`) — replacing the two `replace()` chains in tool formatting and the one in the search mirror, and taking over the single-pass decoder document extraction already used. A reference naming an inherited object member (`&constructor;`) now stays verbatim instead of resolving to it. Closes three CodeQL `js/double-escaping` alerts. ([#73](https://github.com/cyanheads/congressgov-mcp-server/issues/73))
17
+
18
+ ## Dependencies
19
+
20
+ - `@types/node` `^26.6.1` → `^26.6.2`
@@ -0,0 +1,151 @@
1
+ ---
2
+ # FORMAT REFERENCE — do not edit. Copy this file to
3
+ # `changelog/<major.minor>.x/<version>.md` (e.g. `changelog/0.8.x/0.8.6.md`)
4
+ # to author a new release. Set that file's H1 to `# <version> — YYYY-MM-DD`
5
+ # with a concrete date.
6
+
7
+ # Required. One-line GitHub Release-style headline. 350 character cap — a
8
+ # ceiling, not a target. Default short and scannable. Don't pad, don't stitch
9
+ # unrelated changes with commas/semicolons into an inventory — pick the one
10
+ # headline the release is about. Quotes required: unquoted YAML treats
11
+ # `: ` inside the value as a key separator and fails GitHub's strict parser.
12
+ summary: ""
13
+
14
+ # Set `true` when consumers must change code to upgrade: API removals,
15
+ # signature changes, config renames, behavior changes that break existing
16
+ # usage. Flagged as `Breaking` in the rollup.
17
+ breaking: false
18
+
19
+ # Set `true` ONLY for a security fix in THIS project's own source code — a
20
+ # vulnerability or hardening in code you ship. A dependency or transitive CVE
21
+ # bump is routine maintenance, NOT a security release: record it under
22
+ # `## Dependencies` (with the advisory ID) and leave this `false`. When true,
23
+ # pairs with the `## Security` section below and flags `Security` in the rollup.
24
+ security: false
25
+
26
+ # Optional free-form notes for maintenance agents processing this release.
27
+ # Not rendered in CHANGELOG — consumed by agents running `maintenance` on
28
+ # downstream servers. ADOPTION STEPS ONLY — new files to create, fields to
29
+ # populate, one-time migration steps. Never a second rendering of the body:
30
+ # if a body bullet already says it, name the bullet's symbol instead of
31
+ # re-explaining. Omit the field entirely when there's nothing to say.
32
+ # agent-notes: |
33
+ # <instructions for downstream maintenance agents>
34
+ ---
35
+
36
+ # <version> — YYYY-MM-DD
37
+
38
+ <!--
39
+ AUTHORING GUIDE — applies to the new per-version file you create from this
40
+ template.
41
+
42
+ Audience: someone scanning release notes to decide what affects them. Lead
43
+ each bullet with the symbol or concept name in **bold** so they can skip
44
+ what's irrelevant and zoom in on what's not.
45
+
46
+ Tone: terse, fact-dense, not verbose. Bullet shape: **symbol** + what
47
+ changed + at most one consumer-facing caveat. One sentence by default, two
48
+ when the second carries weight — a bullet past ~40 words or three sentences
49
+ is wrong. The depth lives one hop away: the linked issue carries the why,
50
+ the commit diff carries the how. The changelog names what changed and what
51
+ a consumer does about it; a reader who wants mechanism opens the link.
52
+
53
+ Model length on THIS guide, never on the previous entry — entries modeled
54
+ on entries compound.
55
+
56
+ Cut (each has shipped as a wall of text; these are the cruft):
57
+ - History/justification narration — how the bug worked, why the old
58
+ behavior was wrong. One short clause at most; the issue carries the story.
59
+ - Design-rationale defense — "chosen over Y because…", "guarding the
60
+ getter is not enough…". That is the author arguing with a reviewer;
61
+ reviewers read the PR, not the changelog.
62
+ - Defensive unchanged-clauses — "X is unchanged", "byte-identical to
63
+ <prev>". Keep one only where its absence would cause a real misread,
64
+ as a short parenthetical.
65
+ - Edge-case inventories — marker lists, not-flagged lists, escape tables.
66
+ Tests and the issue carry those.
67
+ - Mechanism walkthroughs (JSDoc, CLAUDE.md/AGENTS.md, or the relevant
68
+ skill own those), ceremonial framings ("This release introduces…"),
69
+ backwards-compat paragraphs, file-by-file test enumerations. Prefer
70
+ code/symbol names over English re-explanations.
71
+
72
+ Verified ≠ included: the every-claim-verified-from-the-diff rule bounds
73
+ the TRUTH of what you write, never the AMOUNT.
74
+
75
+ Example — same fact, right size:
76
+
77
+ TOO LONG: **`fetchWithTimeout`'s `timeoutMs` bounds the whole exchange**
78
+ (#341). `fetch` resolves once headers arrive and the deadline was
79
+ cleared as the helper returned, so a peer that answered promptly and
80
+ then stalled the stream held the request open indefinitely. A 2xx
81
+ carrying a body now comes back as a passthrough wrapper that disarms
82
+ the deadline when the body closes, errors, or is cancelled; …
83
+ [+90 more words of mechanism and edge cases]
84
+
85
+ RIGHT: **`fetchWithTimeout`'s `timeoutMs` now bounds the whole
86
+ exchange, not just the headers** (#341). A stalled body aborts with
87
+ the same `Timeout` error; the returned `Response` is a wrapper, so
88
+ identity assertions (`toBe(response)`) no longer hold.
89
+
90
+ Narrative intro: skip by default. Add one short sentence only when the
91
+ release theme genuinely needs framing the bullets can't carry. When many
92
+ bullets share one upgrade consequence, state it ONCE — intro line or
93
+ agent-notes — never per bullet.
94
+
95
+ Sections: Keep a Changelog order — Added, Changed, Deprecated, Removed,
96
+ Fixed, Security. Include only sections with entries; delete the rest
97
+ (including the commented-out scaffolding below). Don't ship empty headers.
98
+
99
+ Include: every distinct fact a reader needs to adopt or audit the release —
100
+ new exports, signatures, lint rule IDs, env vars, breaking changes, version
101
+ bumps on shipped skills. Nothing more.
102
+
103
+ Links: link issues, PRs, docs, or skills where they help a reader jump to
104
+ context. Once per item per entry — don't re-link the same issue in summary,
105
+ narrative, and bullet. Skip links for inline symbol names; code spans speak
106
+ for themselves.
107
+
108
+ Issue/PR URLs: use full URLs. GitHub's bare `#NN` auto-link only resolves
109
+ inside its own UI, not in npm reads or local editors.
110
+
111
+ [#38](https://github.com/cyanheads/mcp-ts-core/issues/38) ← issue
112
+ [#42](https://github.com/cyanheads/mcp-ts-core/pull/42) ← PR
113
+
114
+ Verify numbers exist before linking (`gh issue view NN`, `gh pr view NN`).
115
+ Never speculate on a future number — `#42` for an upcoming PR silently
116
+ resolves to whatever real item already owns 42, and timeline previews pull
117
+ in that unrelated item's metadata.
118
+
119
+ TAG ANNOTATIONS — the annotated tag body renders as the GitHub Release body
120
+ via `gh release create --notes-from-tag`. It is a condensed digest of this
121
+ entry, never a copy, and its format is owned by the `release-and-publish`
122
+ skill (step 4, "Create the annotated tag"): a short subject line without the
123
+ version, flat headline bullets — no Keep-a-Changelog section headers, no
124
+ gates line — at most one deps line, issue backlinks, and the changelog link
125
+ last. In release-PR mode the `git-wrapup` skill authors those bullets as the
126
+ PR body's `## Changes` and the tag copies them.
127
+ -->
128
+
129
+ ## Added
130
+
131
+ -
132
+
133
+ ## Changed
134
+
135
+ -
136
+
137
+ <!-- ## Deprecated
138
+
139
+ - -->
140
+
141
+ <!-- ## Removed
142
+
143
+ - -->
144
+
145
+ ## Fixed
146
+
147
+ -
148
+
149
+ <!-- ## Security
150
+
151
+ - -->
@@ -15,10 +15,10 @@ export declare function currentCongressNumber(date?: Date): number;
15
15
  declare const ServerConfigSchema: z.ZodObject<{
16
16
  apiKey: z.ZodDefault<z.ZodString>;
17
17
  baseUrl: z.ZodDefault<z.ZodString>;
18
- mirrorEnabled: z.ZodPreprocess<z.ZodCodec<z.ZodString, z.ZodBoolean>>;
18
+ mirrorEnabled: z.ZodDefault<z.ZodCodec<z.ZodString, z.ZodBoolean>>;
19
19
  mirrorPath: z.ZodDefault<z.ZodString>;
20
- mirrorRefreshCron: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
21
- congresses: z.ZodPreprocess<z.ZodArray<z.ZodNumber>>;
20
+ mirrorRefreshCron: z.ZodOptional<z.ZodString>;
21
+ congresses: z.ZodPreprocess<z.ZodArray<z.ZodNumber>, unknown>;
22
22
  }, z.core.$strip>;
23
23
  export type ServerConfig = z.infer<typeof ServerConfigSchema>;
24
24
  export declare function getServerConfig(): ServerConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAErE;AAoBD,QAAA,MAAM,kBAAkB;;;;;;;iBA0CtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,eAAe,IAAI,YAAY,CAU9C;AAED,2CAA2C;AAC3C,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
1
+ {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAErE;AAoBD,QAAA,MAAM,kBAAkB;;;;;;;iBA6CtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,eAAe,IAAI,YAAY,CAU9C;AAED,2CAA2C;AAC3C,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -45,10 +45,11 @@ const ServerConfigSchema = z.object({
45
45
  /**
46
46
  * Master switch for the local bill FTS mirror + `congressgov_search_bills`.
47
47
  * Off by default so the standard deploy stays config-free and the live-API
48
- * tools are unaffected. Unset/empty/malformed resolves to `false`.
48
+ * tools are unaffected. Unset/empty uses `false`; malformed values are rejected.
49
49
  */
50
50
  mirrorEnabled: z
51
- .preprocess((v) => (v === undefined || v === null || v === '' ? 'false' : v), z.stringbool())
51
+ .stringbool()
52
+ .default(false)
52
53
  .describe('Enable the local bill search mirror and the congressgov_search_bills tool.'),
53
54
  /** Filesystem path to the SQLite mirror index file (matches the Dockerfile `.mirror` dir). */
54
55
  mirrorPath: z
@@ -61,7 +62,9 @@ const ServerConfigSchema = z.object({
61
62
  * Unset means no in-process schedule — run `bun run mirror:refresh` out-of-band.
62
63
  */
63
64
  mirrorRefreshCron: z
64
- .preprocess((v) => (v === '' || v === null ? undefined : v), z.string().min(1).optional())
65
+ .string()
66
+ .min(1)
67
+ .optional()
65
68
  .describe('Cron schedule for the in-process mirror refresh (HTTP only; omit to run manually).'),
66
69
  /**
67
70
  * Congresses to mirror. Defaults to the current congress plus the one prior.
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAI,GAAS,IAAI,IAAI,EAAE;IAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,OAAO,KAAK;aACT,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CACP,+FAA+F,CAChG;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,OAAO,CAAC,6BAA6B,CAAC;SACtC,QAAQ,CAAC,2BAA2B,CAAC;IAExC;;;;OAIG;IACH,aAAa,EAAE,CAAC;SACb,UAAU,EAAE;SACZ,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,4EAA4E,CAAC;IACzF,8FAA8F;IAC9F,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,mBAAmB,CAAC;SAC5B,QAAQ,CAAC,kDAAkD,CAAC;IAC/D;;;OAGG;IACH,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG;;;;OAIG;IACH,UAAU,EAAE,CAAC;SACV,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxE,QAAQ,CAAC,uEAAuE,CAAC;CACrF,CAAC,CAAC;AAIH,IAAI,OAAiC,CAAC;AAEtC,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,cAAc,CAAC,kBAAkB,EAAE;QAC7C,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,uBAAuB;QAChC,aAAa,EAAE,yBAAyB;QACxC,UAAU,EAAE,sBAAsB;QAClC,iBAAiB,EAAE,8BAA8B;QACjD,UAAU,EAAE,4BAA4B;KACzC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC"}