Skip to content

Conversation

@anthony-murphy-agent
Copy link

Summary

  • Convert inline type imports to top-level type qualifiers
  • Add explicit types to fix eslint errors

This allows the pending state rehydration tests to build and run.

🤖 Generated with Claude Code

anthony-murphy and others added 28 commits January 13, 2026 17:18
## Description

This PR updates the `allowed-types-rollout.mdx` to use beta APIs
Tests have been failing for some time, and we are decommissioning the
backing environment. I also disabled it for `next` since we haven't used
that branch in a long time, and if we bring it back, we'd want to
control the enabling of pipelines like this anyway.
… members (microsoft#25888)

Also extracts static method `assertValidRange` and leaves a TODO for future deduplication.
## Description

Tree's exception validation test logic was nice enough it got copies
twice into other places, which were then not updated as it was improved.
This is silly. Instead of duplication, we can have code sharing. This
deduplicates the code, and establishes a plan for a follow-up to update
validateAssertionError to match the cleaner API for validateUsageError.

experimental/tree has been updated to the validateAssertionError2 API to
show what its usage looks like. Larger changes to more likely to
conflict parts of the codebase will follow if this is approved.
## Description

Refactors to cleanup FlexFieldKind and its implementations.
… server stress tests (microsoft#25891)

## Description

This PR removes `ConsensusOrderedCollection` from the local server
stress test suite. The `setTimeout` workaround seems to not prevent the
issue of the container being left in a dirty state, and CI is failing
non-deterministically. For now we can remove
`ConsensusOrderedCollection` from the local server stress test suite.
…microsoft#25890)

## Description

Part of removing the old validateAssertionError.
## Description

This PR allows tree-agent to expose properties to the llm.
## Description

Removes reading and writing capabilities for the following formats:
* EditManager: v1, v2
* Message: vUndefined, v1, v2
* SharedTreeChangeFormatVersion:  v1, v2
* ModularChangeFormatVersion: v1, v2
* OptionalChangeset: v1
* SequenceChangeset: v1

Removing these formats reduces the package size and reduces the burden
of maintenance when introducing new in-memory representations.

## Breaking Changes

* Removes `SharedTreeFormatVersion` (exposed as alpha). It no longer
serves a purpose (and should have been removed with
microsoft#25752)
* Summaries and ops with `SharedTreeFormatVersion.v1` or
`SharedTreeFormatVersion.v2` configurations are no longer loadable (a
usage error explaining as much will be thrown). This is not expected to
cause issues because such formats were only used by default prior to
releasing FF 2.0 and have only been usable since through alpha APIs. We
do not know of any customer (1st or 3rd party) that depends on such
formats.
## Description

This adjust several ConfigMap related internal APIs and behaviors,
making the code more strict about input and outputs.
## Description

The new alpha APIs for handling simple schema as stored schema did not
work correctly for staged schema when the simple schema was not
implemented by a full view schema.
[AB#53901](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/53901)

Now that all the information needed to translate to stored schema is
present on simple schema (Including the SchemUpgrade toke added in this
change), it is possible to deduplicate the two code paths for simple
schema to stored schema. This change does this deduplication, and also
fixes the remaining code path to handle staged schema correctly.

Additionally, much more testing for this has been added.
## Description

Remove old validateAssertionError
…cation and use in table schema APIs (microsoft#25896)

Also updates messaging to provide more information about invalid indices
/ ranges.
…ng 5 instances of a bug (microsoft#25900)

## Description

Expose getConfigForMinVersionForCollab.

Use it in tree fixing that clientVersionToDetachedFieldVersion and 4
other similar cases in tree codecs that did not compare version strings
correctly (used lexical string ordering, which would put 2.6.0 ahead of
2.52.0, enabling the new format when it should be disabled.

## Reviewer Guidance

The review process is outlined on [this wiki
page](https://github.com/microsoft/FluidFramework/wiki/PR-Guidelines#guidelines).
… in local server stress tests (microsoft#25894)

## Description

This PR re-enables `ConsensusOrderedCollection` in local server stress
tests after being disabled in
microsoft#25891.

To validate, I ran the local server stress test suite (seed 152 only) in
a loop 500 times locally. With the old code (from
microsoft#25829), it would fail
consistently at some point in the loop. With the code in this PR it
passed all 500 times.

## Misc


[AB#53802](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/53802)

---------

Co-authored-by: Copilot <[email protected]>
…d during release (microsoft#25873)

Added a new check function that will run during a release. For minor and
patch releases, it will check the generation for layer compat has been
updated before releasing and bumping versions. The check function runs
the `pnpm run -r layerGeneration:gen` command and if there are any
changes, prompts to commit them before proceeding with the release. This
is similar to how type tests and release notes are updated.

Follow up to microsoft#25670 and
microsoft#25835.


[AB#51927](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/51927)
…osoft#25908)

Generate release notes for 2.73.0.

Commands used:

```
pnpm flub generate releaseNotes -g client -t minor --outFile RELEASE_NOTES/2.73.0.md
pnpm flub vnext generate changelog -g client
```
…soft#25901)

Ensure that single segments with more than one character do not get
split when the full range is annotated.


[AB#51785](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/51785)
Bumps client release group to 2.74.0.

Command used:

```
pnpm -r --include-workspace-root exec npm pkg set version=2.74.0
pnpm build --worker
```
…25912)

## Description

This PR removes the use of `object-sizeof` from the summary size check
flow.

## Context

The [object-sizeof](https://www.npmjs.com/package/object-sizeof) library
has serious sizing inconsistencies, and has shown performance issues
with large data sizes.

Using the current dependency version of object-sizeof (1.6), we can see
a string of length 13 ("Hello, World!") shows up drastically different
in a few scenarios:
```plaintext
Original string length: 13 // str.length
Sizeof original string: 26 bytes
Original buffer length: 13 // buffer.bytelength
Sizeof original buffer: 2186 bytes
Compressed string length: 21 // using Pako.deflate
Sizeof compressed string: 232 bytes
Compressed buffer length: 21 // using Pako.deflate
Sizeof compressed buffer: 232 bytes
```

Even after upgrading to object-sizeof v2.6, we can see some oddities
```plaintext
Original string length: 13 // str.length
Sizeof original string: 28 bytes
Original buffer length: 13 // buffer.bytelength
Sizeof original buffer: 13 bytes
Compressed string length: 21
Sizeof compressed string: 21 bytes
Compressed buffer length: 21
Sizeof compressed buffer: 21 bytes
```

Sizeof is known to do _some_ amount of internal multipliers to align
sizes with ECMA storage values and memory allocation. For our use-case,
we want storage-size, and we have the ability to use built-in size
checks to achieve that.
…5914)

## Description

In some scenarios, Nexus' session pruning will attempt to iterate over
too many sessions, causing a timeout or limit errors. We should allow
pre-emptively limiting the amount of sessions to retrieve from storage.

---------

Co-authored-by: zhangxin511 <[email protected]>
## Description

Fixes a grammatical mismatch (documents -> is) and a missing word.

## Reviewer Guidance

The review process is outlined on [this wiki
page](https://github.com/microsoft/FluidFramework/wiki/PR-Guidelines#guidelines).
## Description

This PR updates our `glob` depdencies to `10.5.0` to avoid using
`10.4.5` which has security vulnerabilities. Since all
consumers of `10.4.5` are able to use `10.5.0`, we only need to update
the lockfiles.

To do so I did the following:
1. Add a pnpm override to use `[email protected]`
2. Run `pnpm i --no-frozen-lockfile`
3. Remove the override
4. Run `pnpm i --no-frozen-lockfile` again

This results in the lock file no longer referencing the `10.4.5`
version.

## Misc

[AB#53799](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/53799)
Renames test modules, test-cases directory, and removes unneeded folder
hierarchy.
CraigMacomber and others added 22 commits January 13, 2026 17:19
## Description

Add minimal internal only text domain suitable for building an example
text editor or tree.
- Process all of packages local source files for assertions.
- Apply results to restore missing short codes.
Removes the unicorn/no-array-reduce: off override from the
@fluidframework/tree package and fixes the resulting errors. Converts
all Array.reduce() calls to explicit for loops. This is part of an
ongoing effort to incrementally remove global ESLint rule overrides from
eslint.config.mts and .eslintrc.cjs.

  Changes:
-   Production code (2 files)
-   Test code (6 files)

No inline overrides were needed - all reduce usages could be converted
to for loops.
Removes the unicorn/no-useless-fallback: off override from the
@fluidframework/tree package and fixes the resulting errors. This is
part of an ongoing effort to incrementally remove global ESLint rule
overrides from eslint.config.mts and .eslintrc.cjs.
Removes the unicorn/no-new-array: off override from the
@fluidframework/tree package and fixes the resulting errors. This is
part of an ongoing effort to incrementally remove global ESLint rule
overrides from eslint.config.mts and .eslintrc.cjs.

Renamed local schema classes from Array to ArrayNode to avoid shadowing
the built-in Array constructor. These were false positives.

All violations were fixed without requiring eslint-disable comments.
… `recommended` to `minimal` (microsoft#26174)

Also fixes resulting linter violations.

Part of a larger effort to collapse the "recommended" and
"minimal-deprecated" configs and eventually delete the latter.
This PR refactors snapshot refresh functionality by extracting it from
SerializedStateManager into a new dedicated SnapshotRefresher class,
improving separation of concerns,maintainability and testing. Current
e2e snapshot refresh tests are disabled due to flakiness so this PR adds
back some test coverage for those scenarios.

---------

Co-authored-by: Copilot <[email protected]>
Adds Mocha testing to inventory-app package to be pure ESM (no CommonJS
build)

New test suite (src/test/inventoryApp.test.tsx):

- Added schema tests to verify Inventory and Part nodes can be created,
edited, and manipulated
- Added DOM tests for all 3 view implementations (MainView,
InventoryViewMonolithic, InventoryViewWithHook)
- Tests run in both React StrictMode enabled and disabled to catch
potential issues
- Tests verify tree invalidation by mutating data and checking view
updates

Package updates:
- Added Mocha, @testing-library/react, and global-jsdom for
ESM-compatible testing
  - Added .mocharc.cjs with exit: true

The previous test suite had one test with a commented-out line and was
entirely skipped. Jest also required CommonJS builds since it doesn't
support ESM natively. This change enables the example to be ESM-only
while having meaningful test coverage by utilizing React and jsdom.

---------

Co-authored-by: Nori <[email protected]>
…#26179)

Removes the unicorn/no-await-expression-member: off override from the
@fluidframework/tree package and fixes the resulting errors. Extracts
awaited values into intermediate variables before accessing their
members. This is part of an ongoing effort to incrementally remove
global ESLint rule overrides from eslint.config.mts and .eslintrc.cjs.
Adds links to the staged allowed types guide
## Summary

Removes five `.eslintignore` files that are no longer needed in eslint
9.

- **examples/data-objects/codemirror**: Was ignoring `*.spec.ts` files
- **examples/data-objects/prosemirror**: Was ignoring `*.spec.ts` files
- **examples/data-objects/smde**: Was ignoring `*.spec.ts` files
- **experimental/PropertyDDS/packages/property-properties**: Was
ignoring `*.spec.ts` files
- **packages/runtime/runtime-definitions**: Was ignoring `test-d`
directory
…ls (microsoft#26152)

These changes are in preparation for upgrading to eslint 9 in
build-tools.

## Summary
- Fix low-count ESLint violations across the build-tools workspace
- Address issues from newly enabled ESLint rules without modifying the
config

## Changes
- Replace `.replace(/x/g, ...)` with `.replaceAll()`
(unicorn/prefer-string-replace-all)
- Change `import * as path` to `import path` (unicorn/import-style)
- Remove useless `undefined` arguments (unicorn/no-useless-undefined)
- Fix JSDoc `@param` names to match actual parameters
(jsdoc/check-param-names)
- Add inline disables for idiomatic usage patterns:
- `async.mapLimit`, `semver.parse`, `sortJson.overwrite`
(import-x/no-named-as-default-member)
  - `prompts` default export (import-x/no-named-as-default)
- Remove unused eslint-disable directives for import-x/no-default-export
- Change `@module` to `@packageDocumentation` for TSDoc compatibility
(tsdoc/syntax)
Force filtering directory to use `/` on Windows.
Additionally, add additional per package and per file (verbose)
processing logging.
## Summary

Replaces the axios HTTP client library with native `fetch` API across
client-side packages to reduce bundle size and simplify dependencies.

## Changes

### Routerlicious Driver (`packages/drivers/routerlicious-driver`)
- Replaced axios with native `fetch` via `cross-fetch` polyfill
- Created `request.cts` with fetch-compatible type definitions
(`RequestConfig`, `RequestHeaders`, `RawRequestHeaders`) that maintain
API compatibility with server-side axios usage
- Removed `axios.cts` re-export file
- Moved `uuid` from runtime to dev dependencies (only used in tests)

### Driver Utils (`packages/loader/driver-utils`)
- Updated `insecureUrlResolver.ts` to use native `fetch` instead of
axios
- Removed axios dependency from package.json

### Azure Client E2E Tests
(`packages/service-clients/end-to-end-tests/azure-client`)
- Refactored `AzureClientFactory.ts` to use native `fetch`
- Introduced `FetchResponse` interface to replace `AxiosResponse` type
- Updated response handling with explicit `response.ok` checks (fetch
doesn't auto-throw on non-2xx)
- Improved type safety in `getContainerIdFromPayloadResponse` with
explicit type guards
- Removed `AxiosResponse` type imports from all test files
…#26191)

## Summary

Adds inline `eslint-disable-next-line` comments across ~79 files to
prepare for upcoming stricter lint rules in typescript-eslint. These
suppressions prevent behavioral changes from automatic code
transformations.

The suppressed rules are:
- `@typescript-eslint/prefer-nullish-coalescing` - Using `??` instead of
`||` could change behavior for falsy values like `0`, `""`, or `false`
- `@typescript-eslint/prefer-optional-chain` - Using `?.` instead of
`&&` could change behavior in some edge cases
- `@typescript-eslint/strict-boolean-expressions` - Intentional
truthy/falsy checks
- `@typescript-eslint/no-unsafe-enum-comparison` - Intentional enum
comparisons
- `@typescript-eslint/await-thenable` - Known patterns where await is
used intentionally
- `@typescript-eslint/no-base-to-string` - Known cases where toString
behavior is expected

Two files (directory.ts, client.rollback.spec.ts) use file-wide disables
with TODO comments to track fixing the violations later.
- Renamed inventoryList.tsx to inventoryView.tsx in view folder. 
- Removed ESlint disable by adding an index.ts in view folder and
importing from there
cmd: `pnpm flub bump build-tools -t minor`
…recated" as warnings (microsoft#26190)

Part of a larger effort to collapse "recommended" into
"minimal-deprecated" so we can remove the "minimal" config from the
package.

Promotes rules explicitly enabled in "recommended" to "minimal" as
warnings (for now). This will encourage developers to not introduce new
violations and potentially fix existing ones while we do the larger
config migration.

---------

Co-authored-by: Copilot <[email protected]>
Add optional loadPendingChannels method to IFluidDataStoreChannel for
pending state rehydration. This replaces the duck-typed cast in
channelCollection.ts with proper type-safe optional chaining.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: anthony-murphy <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: anthony-murphy <[email protected]>
- Convert inline type imports to top-level type qualifiers
- Add explicit types to fix eslint errors

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: anthony-murphy <[email protected]>
@anthony-murphy-agent anthony-murphy-agent force-pushed the sm-pendingState-attachments branch from b44c9ed to aee853d Compare January 14, 2026 01:20
@github-actions
Copy link

🔗 No broken links found! ✅

Your attention to detail is admirable.

linkcheck output


> [email protected] ci:check-links /home/runner/work/FluidFramework-1/FluidFramework-1/docs
> start-server-and-test "npm run serve -- --no-open" 3000 check-links

1: starting server using command "npm run serve -- --no-open"
and when url "[ 'http://127.0.0.1:3000' ]" is responding with HTTP status code 200
running tests using command "npm run check-links"


> [email protected] serve
> docusaurus serve --no-open

[SUCCESS] Serving "build" directory at: http://localhost:3000/

> [email protected] check-links
> linkcheck http://localhost:3000 --skip-file skipped-urls.txt

Crawling...

Stats:
  248787 links
    1796 destination URLs
    2036 URLs ignored
       0 warnings
       0 errors


anthony-murphy-agent and others added 2 commits January 13, 2026 17:21
Removed unnecessary MapLike interface and cast, using SharedMap type directly.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: anthony-murphy <[email protected]>
Resolved merge conflicts to incorporate upstream changes.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: anthony-murphy <[email protected]>
Added explicit type checking for the resolved handle object:
- If DataObjectWithStagingMode: recursively enumerate its data
- If SharedMap: recursively call loadStateInt
- Otherwise: keep the resolved value as-is

This makes the code more robust and clearer about its intent.

Co-Authored-By: anthony-murphy <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
@anthony-murphy-agent
Copy link
Author

Fixed the loadStateInt issue. The original code assumed any resolved handle that wasn't a DataObjectWithStagingMode was a SharedMap. I've updated it to explicitly check for SharedMap and handle other types by keeping the resolved value as-is:

if (obj instanceof DataObjectWithStagingMode) {
    state[key] = await obj.enumerateDataWithHandlesResolved();
} else if (obj instanceof SharedMap) {
    state[key] = await loadStateInt(obj);
} else {
    // For other resolved handle types, just keep the resolved value
    state[key] = obj;
}

This makes the code more robust and clearer about its intent.

@anthony-murphy anthony-murphy merged commit ddeecf8 into anthony-murphy:sm-pendingState-attachments Jan 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.