Contents
- 🌳 SharedTree DDS Changes
- Upgrade LangChain dependencies to v1 (#27259)
- 🐛 Bug Fixes
- Correct some PropertyDDS "MSG" error constant entries (#26971)
- GC timers are now cancelled when a container closes, not just when it is disposed (#27130)
- Add SharedTreeOptionsBeta.healUnresolvableIdentifiersOnDecode to recover documents with corrupted identifiers (#27281)
- Fix a SharedTree document corruption bug (#27292)
- ⚠️ Deprecations
- Deprecate LogLevel.default and LogLevel.error (#27207)
- Legacy API Changes
- Add legacy beta map compatibility interfaces (#27240)
- Other Changes
🌳 SharedTree DDS Changes
Upgrade LangChain dependencies to v1 (#27259)
@fluidframework/tree-agent-langchain (and the LangChain dev-dependencies on @fluidframework/tree-agent) now target the LangChain v1 line:
@langchain/core:^0.3.80→^1.1.44@langchain/anthropic:^0.3.24→^1.3.28@langchain/google-genai:^0.2.16→^2.1.30@langchain/openai:^0.6.12→^1.4.5
LangChain v1 is backward-compatible for the message, tool, and chat-model APIs that tree-agent-langchain consumes (BaseChatModel, BaseMessage, AIMessage / HumanMessage / SystemMessage / ToolMessage, tool(), bindTools()). No source changes are required for consumers using these APIs. The new contentBlocks content-block API is opt-in.
Consumers of createLangchainChatModel who currently install @langchain/core@^0.3 should bump to @langchain/core@^1.1.43 (the lowest version that satisfies the peer ranges of all v1 sibling integrations—@langchain/google-genai@2.1.30 requires ^1.1.43).
Change details
Commit: eeebc23
Affected packages:
- @fluidframework/tree-agent-langchain
- @fluidframework/tree-agent
⬆️ Table of contents
🐛 Bug Fixes
Correct some PropertyDDS "MSG" error constant entries (#26971)
Several error constants referenced in other PropertyDDS packages did not exist and would produce errors with "undefined" (literal) in error message string. In the past:
OVERRIDEN_PROP_MUST_HAVE_SAME_CONTEXT_AS_BASE_TYPEuse was replaced byOVERRIDEN_PROP_MUST_HAVE_SAME_FIELD_VALUES_AS_BASE_TYPE(but never defined).CANNOT_INSERT_UNKNOWN_PROPERTY,MISMATCHING_PROPERTY_TYPEID, andCANNOT_REMOVE_NON_OPTIONAL_PROPuses were added without defining them.
Those all are now defined MSG properties.
Change details
Commit: 7aec5f1
Affected packages:
- @fluid-experimental/property-common
⬆️ Table of contents
GC timers are now cancelled when a container closes, not just when it is disposed (#27130)
Adds an optional close() hook to IRuntime that Container calls on close. ContainerRuntime implements it by cancelling all GC timers (session expiry and unreferenced-node timers) without clearing tracked state.
This prevents the timers from causing memory leaks after a Container is closed but not disposed. In Node.js environments this also prevents the timers from keeping the event loop alive until dispose(). This can reduce the need for Mocha's --exit in tests which create containers which are closed but not disposed.
Disposing of closed containers is still recommended, but it is now less critical for avoiding timer-related hangs after close. Disposal still helps clean up resources and can reduce the size of memory leaks if references to the container are leaked.
Change details
Commit: 86c0fff
Affected packages:
- @fluidframework/container-definitions
- @fluidframework/container-runtime
⬆️ Table of contents
Add SharedTreeOptionsBeta.healUnresolvableIdentifiersOnDecode to recover documents with corrupted identifiers (#27281)
A SharedTree bug can result in corrupted documents due to their attach summary compressing identifier-field values in a way that cannot be uncompressed. This bug manifested as remote clients processing the op throwing an error with the message "Unknown op space ID.".
This change adds an option (healUnresolvableIdentifiersOnDecode) to configuredSharedTreeBetaLegacy which will allow documents affected by this bug to load again when enabled. Enabling this option carries some risk, see documentation on the interface itself for more details.
Who is affected
Only SharedTrees attached to a container that was already attached can be impacted. Furthermore, this bug only occurs when the attached tree contains identifier fields which contain implicitly generated default values.
Change details
Commit: d9205dd
Affected packages:
- fluid-framework
- @fluidframework/tree
⬆️ Table of contents
Fix a SharedTree document corruption bug (#27292)
A SharedTree bug which could corrupt documents when attaching them to containers has been fixed. See healUnresolvableIdentifiersOnDecode on configuredSharedTreeBetaLegacy for a potential mitigation path for documents that were already corrupted by this bug.
Who is affected
Only SharedTrees attached to a container that was already attached can be impacted. Furthermore, this bug only occurs when the attached tree contains identifier fields which contain implicitly generated default values.
Change details
Commit: 6f4cdcb
Affected packages:
- fluid-framework
- @fluidframework/tree
⬆️ Table of contents
⚠️ Deprecations
Deprecate LogLevel.default and LogLevel.error (#27207)
LogLevel.default and LogLevel.error in @fluidframework/core-interfaces are deprecated in favor of the semantically clearer LogLevel.info and LogLevel.essential.
Migration
The recommended replacement for LogLevel.default depends on how the value is used:
- For an event's default
logLevel(e.g. thelogLevelargument toITelemetryBaseLogger.send), the recommendation isLogLevel.essential. - For a logger's default
minLogLevel(the threshold that filters events),LogLevel.infois the recommendation.
The replacement for LogLevel.error should always be LogLevel.essential.
See issue #26969 for full guidance and removal tracking (planned for v3.0).
Change details
Commit: 77ef335
Affected packages:
- @fluidframework/core-interfaces
⬆️ Table of contents
Legacy API Changes
Add legacy beta map compatibility interfaces (#27240)
New legacy beta map interfaces make it possible to type legacy map-like DDS APIs against Fluid's stable map abstraction while preserving the legacy DDS get and set APIs.
import type {
FluidMapLegacy,
IDirectoryBeta,
ISharedMapBeta,
} from "@fluidframework/map/legacy";
declare const directory: IDirectoryBeta;
declare const sharedMap: ISharedMapBeta;
const directoryMap: FluidMapLegacy<string, unknown> = directory;
const sharedMapAsLegacyMap: FluidMapLegacy<string, unknown> = sharedMap;Change details
Commit: b765c6a
Affected packages:
- @fluidframework/map
⬆️ Table of contents
Other Changes
🛠️ Start Building Today!
Please continue to engage with us on GitHub Discussion and Issue pages as you adopt Fluid Framework!