# Run the Sentry preload before any entry point. Bun honors `preload` for # `bun run `, `bun `, and `bun test`, so this covers the chart's # `bun run src/cli/index.ts serve` command override, `bun start`, and local dev # from one place — it can't be forgotten by a launcher that doesn't pass a flag. # # The preload is a no-op unless NB_SENTRY_ENABLED=true (see instrument/sentry.ts), # so OSS/dev/test never load the SDK. Sentry must stay OUT of the kernel (`src/`); # this file and `instrument/` are the sanctioned out-of-kernel seam. preload = ["./instrument/sentry.ts"] # Hold a newly published version for 14 days before it can be resolved. # Matches the cooldown Renovate applies to its own PRs, so a dependency # reaches this repo on the same terms whether a bot or a person adds it. # The window is what makes it worth having: a compromised or typo-squatted # publish is usually caught and yanked well inside two weeks. # # This filters RESOLUTION only — `bun add`, `bun update`, and a non-frozen # `bun install`. Every install in CI and in both Dockerfiles is frozen, so # they replay the lockfile and are unaffected either way. # # bunfig.toml is NOT resolved up the directory tree, so this governs only # installs run from this directory. Every package with its own bun.lock # carries a copy; test/unit/release-age.test.ts holds them to Renovate's window. [install] minimumReleaseAge = 1209600 # `latest` here tracks the installed bun rather than naming a version, and # holding it back would pin types older than the runtime they describe. # # `@nimblebrain/synapse` is ours. The window buys time for a compromised or # typo-squatted publish to be caught and yanked, and neither vector reaches a # package we publish ourselves: there is no name to squat on that we would then # install, and the publish runs on npm trusted publishing (OIDC, provenance # attestation, no static token), so forging one means compromising the release # workflow of a repo we own — which two weeks of waiting does not help us # notice. What the window does cost here is real: this repo cannot consume a # fix on the day we ship it, including a fix we shipped FOR this repo. # # Scoped to the one package, not to `@nimblebrain/*`. A future first-party # dependency should be a decision someone makes, not one this line already made. # # The three MCP SDK v2 packages are excluded because the runtime tracks the # protocol as it is fixed: the 2026-07-28 revision and its extensions land in # patch and minor releases (the tasks extension's `Mcp-Name` binding arrived in # 2.1.0), and a peer on the new revision refuses a request the older release # builds. The window's protection is traded for that, deliberately and for # these three names only; every other `@modelcontextprotocol/*` package keeps it. # # `@agentclientprotocol/sdk` is excluded on the same terms: the runtime drives # external agent runtimes over ACP and tracks the SDK line those runtimes are # built against, and its 2.x line is where the stable v1 API now lives. minimumReleaseAgeExcludes = [ "@agentclientprotocol/sdk", "@types/bun", "@nimblebrain/synapse", "@modelcontextprotocol/client", "@modelcontextprotocol/core", "@modelcontextprotocol/server", ]