Repository navigation
build: Bump the dotnet group with 8 updates - #134
Closed
dependabot[bot] wants to merge 98 commits into
Closed
dependabot[bot] wants to merge 98 commits into
dependabot[bot] wants to merge 98 commits into
Conversation
Coins are entered on the portfolio page (coin, quantity, average buy price in EUR, location, held since, notes) and priced from public Yahoo quotes: EUR pair, else USD pair converted at the ECB rate. Each location is a read-only broker account, so portfolio, accounts, net worth and dashboards include it. Prices refresh at most every 15 minutes when the portfolio is opened and in the daily snapshot job; today's change uses yesterday's close (24/7 market). History is rebuilt from daily closes after each edit. Staking/Earn/airdrop rewards add coins at zero cost and are reported as income next to dividends. Co-authored-by: João Guimarães <joguima00@gmail.com>
* fix(ibkr): incremental syncs use the query period; backfill steps the end date back on 1003 * test(e2e): click the header's add-broker button; the empty state repeats it
…, yearly/net-worth series, allocation and hand-entered crypto (#37) * feat(ai): MCP tools for accounts, savings interest, recurring, any transaction, yearly and net-worth series, allocation and hand-entered crypto New read-only gateway tools: get_accounts (accounts.balances.read), get_recurring (recurring.read), get_transactions (transactions.read), get_year_breakdown (overview.read), get_net_worth_history (networth.read) and get_allocation (portfolio.summary.read). get_portfolio_summary and get_positions gain today's change; positions mark hand-entered crypto with its location; get_dividend_summary splits dividends from crypto rewards. Account names and IBANs stay behind accounts.identifiers.read; transaction search never looks at notes. The tool-to-scope list is pinned by an architecture test. * test(e2e): get_year_breakdown is listed for overview.read clients
… failed Flex probes (#38)
A strip of wallet cards at the top of the portfolio replaces the scope dropdown: one card per broker account and per hand-entered crypto wallet, plus All. Each shows its logo, value, today's change and return; picking one scopes the whole page. The summary now returns those figures per account (additive fields: netContributions, totalReturn, totalReturnPercent, dayChange, dayChangePercent, positions), so the strip needs no extra requests. Wallets named after Binance, Coinbase, Kraken, Ledger or Trezor get the official symbol (nominative use, noted in the README). In Add crypto the location field becomes Wallet: pick an existing one or name a new one; the wallet being viewed is preselected. Coins show their icon in the search, the dialog, the positions table and the income list, from cryptocurrency-icons (CC0) served as static files under /coins; unknown coins fall back to their initials (real 404 in Caddy).
…ures; one-column forms on phones; no sticky tooltips on touch (#40)
…ges and hardware wallets suggested (#41)
… crypto change over 24h (#42) - Summary: inception date per scope and account (`since`) and a `periodReturn` (`?period=1M|YTD|1Y|ALL`, default ALL). ALL keeps the total return (value minus net contributions) and states its start; a period is a time-weighted return from the last value on or before its start up to today's live value, with gain = end - start - net deposits; `partial` when history starts inside the period. - Performance: `?period=` measured the same way, so the chart and the hero agree. - Crypto day change is a rolling 24 hours: each price refresh also fetches the coin's 15-minute bars and stores the price 24 h before the latest quote on its listing; `dayChangeBasis` (PreviousClose / Rolling24Hours / Mixed) on positions, accounts and the summary. Falls back to the previous close if unavailable. - Web: one period selector (1M · YTD · 1A · Tudo, remembered in the browser) drives the hero, the wallet cards and the value chart; labels "Retorno desde 03/2024", "Retorno 1A (TWR)"; crypto rows and wallets say "24h"; the hero's "Hoje" explains that coins count 24 h. Dashboard states the return's start. - MCP/AI: dayChangeBasis and since in get_portfolio_summary/get_positions; docs.
…08) (#43) * feat(ai): opt-in write tools through the policy gateway (ADR-0008) Four sensitive write scopes (transactions, recurring, planning, holdings) and twelve typed single-record write tools that reuse the app's own commands and validators. Separate hourly write budget, idempotency keys, ai:<client> audit actor, before/after audit summaries, broker/investment/estimate/archived refusals, and a 30-day recycle bin for AI deletes with a purge job. Architecture tests replace 'no write tools' with an explicit allow-list. * feat(web): AI access groups read and write scopes, confirms write grants, shows writes in the audit log and a recycle bin with one-click restore EN and PT-PT strings; scope-selection helpers with specs; the E2E journey grants a writer client, creates and deletes a transaction over MCP and restores it from the recycle bin. The read-only client's tool list is unchanged. * test: portfolio tests look only at the demo brokers; other tests share the database * feat(remote-control): finance session asks before every write tool
Adds a Daily frequency: occurrences on start_on + k x interval days (1-365), counted with DateOnly so DST never moves one. day_of_month is refused for daily items and ignored if stored. - Next due is the first occurrence on or after today (list and get_recurring). - Editing the schedule drops pending proposals dated today or later and proposes again from the new anchor; confirmed, skipped and overdue ones stay. - Monthly equivalent: amount x 365 / (days x 12) for daily; weekly aligned to the same 365-day basis (was x 52 / 12). - upsert_recurring accepts frequency daily, interval 1-365 for daily. - UI: 'Every N days' option with a days field; list shows 'Every 15 days' and, on narrow screens, schedule and next date under the name.
…interest to reconcile, broker problems, budgets and AI writes (#46)
…and catch-up jobs/backups (#47) * Background jobs follow the wall clock so a PC that sleeps or is off catches up Periodic jobs (recurring proposals, interest accrual, daily snapshots, AI recycle bin purge) now poll every minute and run when their interval has passed, a new UTC day has begun or the clock moved back, instead of waiting on a PeriodicTimer that counts only running time. Broker sync checks what is due 1 minute after start and every 5 minutes (was 2 + 30), and a failed due-check no longer stops the schedule for good. * Windows deployment: Docker Desktop install, app launcher, auto-start and catch-up backups - deploy/compose.windows.yml + Caddyfile.windows: same images on Docker Desktop, served on http://localhost with the loopback hop marked HTTPS so Secure cookies keep working - deploy/windows: Install/Update/Uninstall, Start-PersonalFinance launcher (Start Menu and Desktop shortcut, Edge/Chrome app window, starts Docker Desktop and the stack on demand), sign-in task, Backup/Restore ports of backup.sh/restore.sh with a daily task that runs late when missed and an overdue check in the launcher, optional Remote Control script - CI: PowerShell parse + PSScriptAnalyzer + Pester on PowerShell 7 and 5.1 (windows-latest), Caddyfile.windows validated in the E2E job - docs/windows.md and README section * CI: analyze the Windows scripts and module only, not the Pester files or settings
Bumps Anthropic from 12.50.0 to 12.53.0 Bumps Scalar.AspNetCore from 2.17.10 to 2.17.13 --- updated-dependencies: - dependency-name: Anthropic dependency-version: 12.53.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dotnet - dependency-name: Scalar.AspNetCore dependency-version: 2.17.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
A transaction (one bank line, one total) can now be split into category lines, e.g. one energy bill for electricity and gas. Lines live in transaction_splits, add up exactly to the amount (EUR amounts via the transaction's rate, remainder on the last line) and take the explicit nature or their category's default. A split transaction has no single category. Every per-category figure reads the lines: reports, budgets, dashboard, the list's category/nature filters, CSV/Excel (one row per line), the JSON archive and the AI tools (rows show splits; create/update_transaction accept splits). Recurring templates can be split and carry the lines into proposals and the confirmed transaction (rescaled when the amount changes).
#49) * Linux and macOS desktop install: app shortcut, sign-in item, catch-up backups (deploy/desktop) One script, personal-finance.sh, mirrors the Windows install on an everyday Linux or macOS computer: install/start/update/backup/restore/stop/status/uninstall, an applications-menu entry or Personal Finance.app, XDG autostart or a LaunchAgent, and a systemd user timer (Persistent) or launchd backup with a launcher fallback when the newest backup is older than 24 h. backup.sh/restore.sh: honour PF_COMPOSE_OVERRIDE so a PC restore keeps the loopback-HTTP web config, use shasum when sha256sum is missing (macOS), and never delete the newest archive. CI: shellcheck plus smoke tests of the helpers on Ubuntu and on macOS (bash 3.2, BSD tools). Docs: docs/desktop.md with the install matrix for Windows, macOS and Linux. * test(desktop): build the fake age identity without a word-split substitution
#50) * AI access: activity at a glance, tabs and client cards; full-height flow tab in quick add - AI access: 24 h totals on top (active clients, calls, denied, writes), then tabs for clients, recycle bin (with counts) and activity with All/Writes/Denied filters. Clients are cards with status, permissions, per-client 24 h figures and actions, readable on phones. - Quick add: the selected flow (Everyday/Investments/Transfers) now fills the bar's height when labels wrap. - E2E: open the Recycle bin and Activity tabs before asserting on them. * fix(ai-access): one 'New AI client' button, also when there are no clients yet (E2E strict match)
…rd the rest, pending in notifications (#51) - Each bucket's status follows what was set aside against its target (to do / partial / done); a status picked by hand still wins, and 'Automatic' (DELETE /api/allocation-checks/{period}/{bucket}) goes back. - 'Record' opens the quick-add dialog prefilled: investment contribution or savings, the bucket, the amount left and the date. - Notification centre: once the month's income is in, every bucket not fully set aside appears with the amount left and Record / Not this month (AllocationNotificationSource, read-only like the others). - Tests: AllocationProgress theory, notification integration test, prefill and status helpers.
…rn rewards as income (ADR-0009) (#52) - BinanceProvider: one position per coin (spot + flexible + locked Earn) in EUR (EUR pair, else a dollar stablecoin pair over EURUSDT), EUR balances as cash, average cost from EUR/USDT/USDC/FDUSD fills, and every Earn reward (real-time, bonus, locked) as a dividend valued at that day's close with a stable external id. - Read-only by construction: each sync first checks GET /sapi/v1/account/apiRestrictions and refuses a key that can trade, transfer or withdraw; the HttpClient is allow-listed to the read GETs only. - A coin with no ISIN joins an existing coin of the same symbol, so Binance BTC and a hand-entered BTC are one position line; Binance coins get the crypto listing hint for public prices. - Web: Binance kind, logo, credential checks and translated sync errors. - Docs: broker-integrations Binance section, ADR-0009 (extends ADR-0005), README.
Six steps (verified account with 2FA, create a system-generated key, only Enable Reading, trusted IP, copy key + secret, paste), with the permissions to keep on and to leave off, in English and Portuguese.
…54) - The page no longer repeats the guide: with no connections it shows one button per broker, and each opens the form with its guide expanded (first connection of that broker) and scrolled to step 1. - 'How to fix it' on a failing connection opens its credentials form with the guide open. - Field labels and hints can be broker-specific: Binance's API Key / Secret Key no longer show Trading 212 hints. - Last guide step now says to paste below; Portuguese Binance guide uses 'tu' like the rest of the app.
… fiat deposits; unique custom keys (#55) - A broker account can be linked to an allocation bucket (PUT /api/accounts/{id}/allocation-bucket, Accounts page). Its synced deposits minus withdrawals in a month count towards that bucket (LedgerAggregates via the new IBrokerDeposits, implemented by the investments module). Ledger contributions recorded to that same broker are the same money: the bucket counts the larger of the two. Monthly shows the part that came from brokers. - Binance: fiat deposits, crypto bought with fiat and fiat withdrawals are imported as the account's cash movements (read-only GET /sapi/v1/fiat/orders|payments, allow-listed). - The JSON archive keeps the account-to-bucket link. - Fix: custom bucket and category keys used the timestamp prefix of a v7 GUID, so two created in the same millisecond (a JSON import) collided on the unique key; they are random now.
… theme button (#56) - Inter (variable) ships with the app, so text looks the same on Linux, macOS and Windows instead of falling back to whatever the system has (DejaVu on Linux). Served from 'self': the CSP is unchanged. Charts use it too. - One palette (shared/chart-options): income and net worth green, expenses rose, invested and portfolio value violet, saved teal, references grey. Asset classes come from the same family. The dashboard's net balance line is a quiet dashed grey over the bars instead of a competing amber. - The theme button's label and tooltip name the current theme (System / Light / Dark).
…lters (#57) * UI: calmer transactions list grouped by day, phone bottom navigation, foldable filters - Transactions are grouped by day with the day's net. Expenses use the normal text colour (only money in is green), each row has a badge in its category's colour, and the category no longer sits out of line. Actions appear on hover or keyboard focus on desktop (delete is grey until hovered); clicking a row edits it. On phones, tapping a row shows its actions. - Phones get a bottom bar: Dashboard, Transactions, a raised Add button, Portfolio and More (the full menu). Messages appear at the top there so they never cover it. - Phones: only the search box shows above the list; date, account, category and type filters fold behind a Filters button that counts the active ones. * fix(shell): phone header logo on the left
…r menu (#58) - Net worth card shows what it is made of (cash, investments, other assets, debts) from day one. - Dashboard monthly view: months still ahead are left out, the Status column is gone (the balance colour says it), and phones get one line per month instead of a wide table. Waiting/goals cards no longer stretch. - Portfolio: performance and dividend charts fill their card; 'available from the second day' is a dash with the reason on hover (also on the dashboard). - Budgets: a live bar shows how the edited version divides income (invest / save / expenses, fixed amounts apart, warning above 100%). - Menu: Import, Export and AI access are tabs inside Settings, so the sidebar has 14 entries instead of 17.
…ks which goal (#62) - A goal can follow a cash account (savings, bank, cash; EUR): its progress is that account's balance, so money moved there and interest count without linking anything (finance.goals.account_id, FK set null). Without an account it works as before (starting amount + linked savings, or an amount tracked by hand). Brokers and cards cannot be followed: investments never count towards goals. - Quick add: recording a month's savings allocation highlights 'Is this for a goal?'; picking a goal that follows an account makes that account the destination. - AI tools keep the link when updating a goal and refuse 'add to goal' for one that follows an account; the JSON archive round-trips it.
… a simulator (#63) - A Loan account can have terms: amount, first instalment, term, fixed rate or index + spread revised every 1/3/6/12 months (finance.loans, loan_rates, loan_prepayments). - LoanSchedule: the French method of Portuguese banks — constant instalment, recalculated at each rate revision; early repayments shorten the term (same instalment) or lower the instalment (same end date). - With terms, the account's balance (and net worth) is the plan's outstanding debt on that day, so instalments need not be booked to keep the debt right. - /api/loans: summary (outstanding, next instalment with interest/capital, end date, interest paid/left, current rate, next revision), plan, rates, prepayments and a what-if simulator. - Loan page: KPIs, debt chart, simulator ('record this repayment'), rates/revisions, early repayments and the plan by year; account cards link to it. - Tests: schedule (textbook instalment, zero rate, revision, both prepayment modes, status) and API integration.
…board card (#64) - A loan can say which bank account pays it: from then on each instalment due is proposed (notification centre and the loan page) and booking it records the interest as an expense (new built-in category Loan interest) and the capital as a transfer to the loan. Skip leaves it out; only the oldest pending one can be handled. - Variable-rate loans: a revision date within 14 days (or past) without a rate entered is announced. - Dashboard: Loans card with what is owed, the next instalment and the end date of each loan.
…avings interest (#65) - Menu: Overview (dashboard, monthly, annual, assistant), Money (transactions, recurring, budgets, goals), Wealth (accounts, portfolio, loans, net worth), Setup (connections, categories, settings). The assistant entry only shows when the server has an Anthropic key (/api/assistant/status). - Loans page: all loans with what is owed, monthly instalments and interest still to pay; 'New loan' creates the debt account and goes to its terms. - Accounts are grouped: everyday money, savings, investments, debts (cards and loans). - Savings interest on the account card reads like the bank: TANB, about how much per day gross and net, and 'net this year (since …)' when the account or its rate is newer than 1 January (AccruingSince in the API), with a hint that earlier interest can be recorded as income.
… and undo; category chart centred (#111)
…ta (#112) * feat(desktop): MCP server for AI clients inside the app; uninstall can delete the data - The launcher runs the MCP server in-process on 127.0.0.1:47821 (or the next free port) against the API's gateway (ADR-0012). AI access shows the claude mcp add command and a Claude Desktop config (mcp-remote) with that address. - The smoke test checks the MCP server answers on every platform. - The Windows uninstaller asks whether to delete the data too (kept by default). - Desktop docs: where data lives, removing everything, when it syncs, AI clients. * fix(desktop): publish keeps only the API's appsettings
…nds included (#113) The last 12 months of net dividends by calendar month for every position (crypto only when it paid), with yield, the monthly average and the thin months: where a payer would even out a monthly income.
…es (#114) - DELETE /api/accounts/{id} after GET /api/accounts/{id}/deletion shows what goes with it: its movements (and transfers to or from it), recurring items, the shares of its expenses, loan terms and interest history. A deleted person stops sharing recurring items. Broker accounts are removed with their connection. - Delete buttons on Accounts and Sharing, with that confirmation. - README, docs/ai.md and the changelog describe sharing without an account, paid for me, the dividend calendar, the monthly status, the desktop MCP and deleting.
) - Categories (custom only): GET /deletion shows usage; in use, DELETE needs moveTo, a category of the same kind; movements and recurring items (and split lines) move there, sub-categories move up, budget limits go. - Buckets (custom only): same with moveTo a bucket of the same group; linked broker accounts follow; budget targets and monthly checks go. - Goals and manually valued assets: deleted with a confirmation. - Built-in categories and buckets can still only be archived (or renamed).
… person; changelog for 1.2.0 (#118)
…119) - Overlays (dialogs, selects, tooltips) stay in the CDK overlay container instead of the browser's top layer, which drew them above everything, the toasts included. - A shared FormState: required fields, numbers, amounts above zero, choices and limits are checked before saving and explained under each field; what the server refuses shows in the dialog (under the field it names, or above the buttons). Forms use novalidate so the messages are the app's, in its language. - Applied to the account, sharing (person, received/paid, paid for me), goal, loan (new, terms, rate), asset, recurring and category dialogs.
…rked partial (#120) - Spending by category: a donut with the month's total in the middle and a ranked list with shares; the six biggest categories, the rest together as Other. - Allocation: one row per bucket with a progress bar (set aside of target), its status and what is left; the expense budget as spent of budget, with what is left or over. - The month tracking started in, after the 1st, is marked partial (with how to complete it) and left out of the 12-month averages, overall and by category.
The cash not invested yet was only part of the total value. A card now shows it, its share of the portfolio and, with several brokers, how much sits at each.
…124) * feat(brokers): synced deposits ask which account the money came from A deposit or withdrawal synced at a broker linked to an allocation bucket no longer counts on its own: it waits for the owner to record it from one of their accounts (from the notification or the new list in Portfolio), so the source account's balance follows it too. Until then the month shows it apart, as to record. History older than five weeks keeps counting as it did. * test: seed the reviewed broker directly so no other test sees its holdings * test: remove the reviewed broker afterwards so the portfolio tests see only theirs
At phone width the annual summary and the dividend calendar become a list of months (tap a month for every figure; who pays in each), and the other wide tables keep their essential columns with the rest folded under the main line: monthly categories, recurring items, recent dividends, the loan plan and the AI recycle bin and audit.
…nths included (#127) The dividends and rewards by month chart showed only the months that paid (the last 24) whatever the period at the top. It now covers that period (1M, YTD, 1Y, all since the first payment) with every month, and the dividend calendar lists only the positions that pay unless asked.
…128) Trading 212 reports card payments as WITHDRAW, like money sent to the bank. A withdrawal can now be recorded as a card payment: a recurring item still to confirm (shares kept), an expense already recorded elsewhere (moved to the broker) or a new expense. It is paid from the broker account, counts as the month's expense and comes off the broker's bucket. Trading 212's reference is kept next to the type.
… when its buys spend it (#129) A broker deposit or withdrawal can be recorded as a transfer between one of your accounts and the broker (now the default). The money waits there as cash and counts towards the bucket when synced buys spend it, up to the cash transferred and not yet spent. Undo puts a recorded or ignored movement back to be recorded.
…ate (#130) * style(web): apply Prettier to three files that drifted * chore: spec-driven workflow with Spec Kit, agent loop config and project subagents
Bumps Anthropic from 12.58.0 to 13.1.0 Bumps ModelContextProtocol.AspNetCore from 2.2.0 to 2.3.0 Bumps OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.20.0 to 1.20.1 Bumps OpenTelemetry.Extensions.Hosting from 1.20.0 to 1.20.1 Bumps OpenTelemetry.Instrumentation.AspNetCore from 1.20.0 to 1.20.1 Bumps OpenTelemetry.Instrumentation.Http from 1.20.0 to 1.20.1 Bumps OpenTelemetry.Instrumentation.Runtime from 1.20.0 to 1.20.1 Bumps Scalar.AspNetCore from 2.18.0 to 2.18.2 --- updated-dependencies: - dependency-name: Anthropic dependency-version: 13.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: dotnet - dependency-name: ModelContextProtocol.AspNetCore dependency-version: 2.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dotnet - dependency-name: OpenTelemetry.Exporter.OpenTelemetryProtocol dependency-version: 1.20.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet - dependency-name: OpenTelemetry.Extensions.Hosting dependency-version: 1.20.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet - dependency-name: OpenTelemetry.Instrumentation.AspNetCore dependency-version: 1.20.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet - dependency-name: OpenTelemetry.Instrumentation.Http dependency-version: 1.20.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet - dependency-name: OpenTelemetry.Instrumentation.Runtime dependency-version: 1.20.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet - dependency-name: Scalar.AspNetCore dependency-version: 2.18.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dotnet ... Signed-off-by: dependabot[bot] <support@github.com>
5 tasks done
Owner
|
Superseded by #138, which includes all 8 updates and adapts the code to Anthropic SDK 13. |
joaoguimaraespro
deleted the
dependabot/nuget/backend/dotnet-31c49130b9
branch
October 23, 2026 22:32
joaoguimaraespro
added a commit
that referenced
this pull request
Oct 23, 2026
Supersedes Dependabot #134 (the dotnet group with 8 updates), which conflicts with main and failed to build. Anthropic 13 turns BetaMessageParam into a union of user, assistant and system message types; Role and Content are no longer settable. The assistant now builds BetaUserMessageParam and BetaAssistantMessageParam directly. Same requests on the wire.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Anthropic from 12.58.0 to 13.1.0.
Updated ModelContextProtocol.AspNetCore from 2.2.0 to 2.3.0.
Release notes
Sourced from ModelContextProtocol.AspNetCore's releases.
2.3.0
This release improves HTTP discovery, OAuth, protocol interoperability, and shutdown reliability, preserves registration order for server primitives, and exposes a
TimeProviderfor deterministic client timeout tests. It also corrects optional server-identity handling; applications readingMcpClient.ServerInfoshould adopt nullable handling.Breaking Changes
Refer to the C# SDK Versioning documentation for details on versioning and breaking change policies.
McpClient.ServerInfois nullable — #1903ImplementationtoImplementation?. Existing non-nullable assignments or dereferences can produce nullable warnings and fail warnings-as-errors builds.2026-07-28connections,ServerInfoisnullwhen the server omits optional identity metadata fromserver/discover. Legacyinitializestill requiresserverInfo. Reading the property before connecting still throwsInvalidOperationException.client.ServerInfo?.Name ?? "Unknown server". Self-reported identity must not be used for security decisions.What's Changed
ServerInfonullable #1903 by @Coding-ProfessionalDiscoverProbeTimeout, exposeMcpClientOptions.TimeProviderfor deterministic timeout tests, and default SSE to legacy initialization #1719 by @halter73 (co-authored by @Copilot)InitializationTimeoutand caller cancellation; it is excluded only from the short discovery-probe budget.HttpTransportMode.SseandProtocolVersion = "2026-07-28"; pinning the version withAutoDetectis not equivalent.RequestOptionsserialization #1832 by @dfedoryshchevDocumentation Updates
Test Improvements
Repository Infrastructure Updates
McpServerFactoryreferences in Copilot instructions #1892 by @Zir0-93Acknowledgements
... (truncated)
Commits viewable in compare view.
Updated OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.20.0 to 1.20.1.
Release notes
Sourced from OpenTelemetry.Exporter.OpenTelemetryProtocol's releases.
1.20.1
For highlights and announcements pertaining to this release see: Release Notes > 1.20.1.
The following changes are from the previous release 1.20.0.
NuGet: OpenTelemetry v1.20.1
Fixed a possible race condition on ARM64 when multiple threads record the
first measurement with no tags, or the first overflow measurement, that could
cause the measurement to be recorded incorrectly.
(#7951)
Fixed self-diagnostics preamble redaction of quoted or encoded PEM material
and prefixed JWTs.
(#7955)
Fixed default HTTP client log filtering when registering the OTLP log exporter
through
OpenTelemetryLoggerOptions.(#7959)
Fixed legacy self-diagnostics logging terminating the process when the log
file is truncated or the log volume runs out of space.
(#7956)
Experimental (pre-release builds only): Fixed
Logger.EmitLogignoringinstrumentation suppression, which could cause recursive exports or deadlocks.
(#7961)
Fixed delta double counters losing subsequent measurements after a non-finite
or large value and idle metric points with a
NaNvalue failing to be reclaimed.(#7963)
Improve the assignment of values to exponential histogram buckets when the
value is near a bucket boundary by using a pre-computed lookup table.
(#7911)
Fixed
LogRecords being returned to the shared pool while still queued forexport when an exporter stops enumerating a single-item or array
Batch<LogRecord>early which could cause aBatchLogRecordExportProcessoron the same provider to export missing or incorrect data.
(#7965)
Fixed a
SuppressInstrumentationScope.Enter()reference count never beingreleased when the
Activityit was entered for is not recorded, which causedall subsequent telemetry in that execution context to be suppressed.
(#7966)
Self-diagnostics log files, whether configured through
OTEL_DIAGNOSTICS.jsonor
SelfDiagnosticsOptions, are now always created as new files.(#7968)
... (truncated)
1.20.1-rc.1
The following changes are from the previous release 1.20.0.
NuGet: OpenTelemetry v1.20.1-rc.1
Fixed a possible race condition on ARM64 when multiple threads record the
first measurement with no tags, or the first overflow measurement, that could
cause the measurement to be recorded incorrectly.
(#7951)
Fixed self-diagnostics preamble redaction of quoted or encoded PEM material
and prefixed JWTs.
(#7955)
Fixed default HTTP client log filtering when registering the OTLP log exporter
through
OpenTelemetryLoggerOptions.(#7959)
Fixed legacy self-diagnostics logging terminating the process when the log
file is truncated or the log volume runs out of space.
(#7956)
Experimental (pre-release builds only): Fixed
Logger.EmitLogignoringinstrumentation suppression, which could cause recursive exports or deadlocks.
(#7961)
Fixed delta double counters losing subsequent measurements after a non-finite
or large value and idle metric points with a
NaNvalue failing to be reclaimed.(#7963)
Improve the assignment of values to exponential histogram buckets when the
value is near a bucket boundary by using a pre-computed lookup table.
(#7911)
Fixed
LogRecords being returned to the shared pool while still queued forexport when an exporter stops enumerating a single-item or array
Batch<LogRecord>early which could cause aBatchLogRecordExportProcessoron the same provider to export missing or incorrect data.
(#7965)
Fixed a
SuppressInstrumentationScope.Enter()reference count never beingreleased when the
Activityit was entered for is not recorded, which causedall subsequent telemetry in that execution context to be suppressed.
(#7966)
Self-diagnostics log files, whether configured through
OTEL_DIAGNOSTICS.jsonor
SelfDiagnosticsOptions, are now always created as new files.(#7968)
Self-diagnostics messages written to the sinks configured by
SelfDiagnosticsOptionsare now truncated to 16,384 characters so that the... (truncated)
1.20.1-beta.1
The following changes are from the previous release 1.20.0-beta.1.
NuGet: OpenTelemetry.Exporter.Prometheus.AspNetCore v1.20.1-beta.1
Fixed scrape responses being handed to the server in a single write, which
made the server buffer a full copy of the response for each client that did
not read it until the request completed or timed out. Responses are now
written in bounded slices so the server's back-pressure applies.
(#7957)
Fixed startup scrapes permanently omitting
target_infoand configuredresource constant labels from subsequent scrape responses.
(#7984)
Updated OpenTelemetry core component version(s) to
1.20.1.(#7990)
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Prometheus.HttpListener v1.20.1-beta.1
Fixed scrape responses being handed to the server in a single write, which
on Linux and macOS made the listener allocate and hold a full copy of the
response for each client that did not read it until the request completed or
timed out. Responses are now written in bounded slices.
(#7957)
Fixed scrape requests that announce a request body holding a thread pool
thread after their response had been sent on Linux and macOS for as long as
the client kept trickling in the body. The connection is now closed after
responding to a request with a body instead of being kept alive.
(#7962)
Fixed startup scrapes permanently omitting
target_infoand configuredresource constant labels from subsequent scrape responses.
(#7984)
Updated OpenTelemetry core component version(s) to
1.20.1.(#7990)
See CHANGELOG for details.
NuGet: OpenTelemetry.Shims.OpenTracing v1.20.1-beta.1
1.20.1.(#7990)
See CHANGELOG for details.
Commits viewable in compare view.
Updated OpenTelemetry.Extensions.Hosting from 1.20.0 to 1.20.1.
Release notes
Sourced from OpenTelemetry.Extensions.Hosting's releases.
1.20.1
For highlights and announcements pertaining to this release see: Release Notes > 1.20.1.
The following changes are from the previous release 1.20.0.
NuGet: OpenTelemetry v1.20.1
Fixed a possible race condition on ARM64 when multiple threads record the
first measurement with no tags, or the first overflow measurement, that could
cause the measurement to be recorded incorrectly.
(#7951)
Fixed self-diagnostics preamble redaction of quoted or encoded PEM material
and prefixed JWTs.
(#7955)
Fixed default HTTP client log filtering when registering the OTLP log exporter
through
OpenTelemetryLoggerOptions.(#7959)
Fixed legacy self-diagnostics logging terminating the process when the log
file is truncated or the log volume runs out of space.
(#7956)
Experimental (pre-release builds only): Fixed
Logger.EmitLogignoringinstrumentation suppression, which could cause recursive exports or deadlocks.
(#7961)
Fixed delta double counters losing subsequent measurements after a non-finite
or large value and idle metric points with a
NaNvalue failing to be reclaimed.(#7963)
Improve the assignment of values to exponential histogram buckets when the
value is near a bucket boundary by using a pre-computed lookup table.
(#7911)
Fixed
LogRecords being returned to the shared pool while still queued forexport when an exporter stops enumerating a single-item or array
Batch<LogRecord>early which could cause aBatchLogRecordExportProcessoron the same provider to export missing or incorrect data.
(#7965)
Fixed a
SuppressInstrumentationScope.Enter()reference count never beingreleased when the
Activityit was entered for is not recorded, which causedall subsequent telemetry in that execution context to be suppressed.
(#7966)
Self-diagnostics log files, whether configured through
OTEL_DIAGNOSTICS.jsonor
SelfDiagnosticsOptions, are now always created as new files.(#7968)
... (truncated)
1.20.1-rc.1
The following changes are from the previous release 1.20.0.
NuGet: OpenTelemetry v1.20.1-rc.1
Fixed a possible race condition on ARM64 when multiple threads record the
first measurement with no tags, or the first overflow measurement, that could
cause the measurement to be recorded incorrectly.
(#7951)
Fixed self-diagnostics preamble redaction of quoted or encoded PEM material
and prefixed JWTs.
(#7955)
Fixed default HTTP client log filtering when registering the OTLP log exporter
through
OpenTelemetryLoggerOptions.(#7959)
Fixed legacy self-diagnostics logging terminating the process when the log
file is truncated or the log volume runs out of space.
(#7956)
Experimental (pre-release builds only): Fixed
Logger.EmitLogignoringinstrumentation suppression, which could cause recursive exports or deadlocks.
(#7961)
Fixed delta double counters losing subsequent measurements after a non-finite
or large value and idle metric points with a
NaNvalue failing to be reclaimed.(#7963)
Improve the assignment of values to exponential histogram buckets when the
value is near a bucket boundary by using a pre-computed lookup table.
(#7911)
Fixed
LogRecords being returned to the shared pool while still queued forexport when an exporter stops enumerating a single-item or array
Batch<LogRecord>early which could cause aBatchLogRecordExportProcessoron the same provider to export missing or incorrect data.
(#7965)
Fixed a
SuppressInstrumentationScope.Enter()reference count never beingreleased when the
Activityit was entered for is not recorded, which causedall subsequent telemetry in that execution context to be suppressed.
(#7966)
Self-diagnostics log files, whether configured through
OTEL_DIAGNOSTICS.jsonor
SelfDiagnosticsOptions, are now always created as new files.(#7968)
Self-diagnostics messages written to the sinks configured by
SelfDiagnosticsOptionsare now truncated to 16,384 characters so that the... (truncated)
1.20.1-beta.1
The following changes are from the previous release 1.20.0-beta.1.
NuGet: OpenTelemetry.Exporter.Prometheus.AspNetCore v1.20.1-beta.1
Fixed scrape responses being handed to the server in a single write, which
made the server buffer a full copy of the response for each client that did
not read it until the request completed or timed out. Responses are now
written in bounded slices so the server's back-pressure applies.
(#7957)
Fixed startup scrapes permanently omitting
target_infoand configuredresource constant labels from subsequent scrape responses.
(#7984)
Updated OpenTelemetry core component version(s) to
1.20.1.(#7990)
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Prometheus.HttpListener v1.20.1-beta.1
Fixed scrape responses being handed to the server in a single write, which
on Linux and macOS made the listener allocate and hold a full copy of the
response for each client that did not read it until the request completed or
timed out. Responses are now written in bounded slices.
(#7957)
Fixed scrape requests that announce a request body holding a thread pool
thread after their response had been sent on Linux and macOS for as long as
the client kept trickling in the body. The connection is now closed after
responding to a request with a body instead of being kept alive.
(#7962)
Fixed startup scrapes permanently omitting
target_infoand configuredresource constant labels from subsequent scrape responses.
(#7984)
Updated OpenTelemetry core component version(s) to
1.20.1.(#7990)
See CHANGELOG for details.
NuGet: OpenTelemetry.Shims.OpenTracing v1.20.1-beta.1
1.20.1.(#7990)
See CHANGELOG for details.
Commits viewable in compare view.
Updated OpenTelemetry.Instrumentation.AspNetCore from 1.20.0 to 1.20.1.
Release notes
Sourced from OpenTelemetry.Instrumentation.AspNetCore's releases.
1.20.1
NuGet: OpenTelemetry.Extensions.AWS v1.20.1
1.20.1.(#5651)
See CHANGELOG for details.
NuGet: OpenTelemetry.Instrumentation.AWS v1.20.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Instrumentation.AWSLambda v1.20.1
No notable changes.
See CHANGELOG for details.
1.20.1-rc.1
NuGet: OpenTelemetry.Instrumentation.Process v1.20.1-rc.1
1.20.1.(#5651)
See CHANGELOG for details.
1.20.1-beta.1
NuGet: OpenTelemetry.Extensions.Enrichment v1.20.1-beta.1
1.20.1.(#5651)
See CHANGELOG for details.
1.20.1-alpha.1
NuGet: OpenTelemetry.Instrumentation.EventCounters v1.20.1-alpha.1
1.20.1.(#5651)
See CHANGELOG for details.
Commits viewable in compare view.
Updated OpenTelemetry.Instrumentation.Http from 1.20.0 to 1.20.1.
Release notes
Sourced from OpenTelemetry.Instrumentation.Http's releases.
1.20.1
NuGet: OpenTelemetry.Extensions.AWS v1.20.1
1.20.1.(#5651)
See CHANGELOG for details.
NuGet: OpenTelemetry.Instrumentation.AWS v1.20.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Instrumentation.AWSLambda v1.20.1
No notable changes.
See CHANGELOG for details.
1.20.1-rc.1
NuGet: OpenTelemetry.Instrumentation.Process v1.20.1-rc.1
1.20.1.(#5651)
See CHANGELOG for details.
1.20.1-beta.1
NuGet: OpenTelemetry.Extensions.Enrichment v1.20.1-beta.1
1.20.1.(#5651)
See CHANGELOG for details.
1.20.1-alpha.1
NuGet: OpenTelemetry.Instrumentation.EventCounters v1.20.1-alpha.1
1.20.1.(#5651)
See CHANGELOG for details.
Commits viewable in compare view.
Updated OpenTelemetry.Instrumentation.Runtime from 1.20.0 to 1.20.1.
Release notes
Sourced from OpenTelemetry.Instrumentation.Runtime's releases.
1.20.1
NuGet: OpenTelemetry.Extensions.AWS v1.20.1
1.20.1.(#5651)
See CHANGELOG for details.
NuGet: OpenTelemetry.Instrumentation.AWS v1.20.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Instrumentation.AWSLambda v1.20.1
No notable changes.
See CHANGELOG for details.
1.20.1-rc.1
NuGet: OpenTelemetry.Instrumentation.Process v1.20.1-rc.1
1.20.1.(#5651)
See CHANGELOG for details.
1.20.1-beta.1
NuGet: OpenTelemetry.Extensions.Enrichment v1.20.1-beta.1
1.20.1.(#5651)
See CHANGELOG for details.
1.20.1-alpha.1
NuGet: OpenTelemetry.Instrumentation.EventCounters v1.20.1-alpha.1
1.20.1.(#5651)
See CHANGELOG for details.
Commits viewable in compare view.
Updated Scalar.AspNetCore from 2.18.0 to 2.18.2.
Release notes
Sourced from Scalar.AspNetCore's releases.
No release notes found for this version range.
Commits viewable in compare view.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditions