* fix(document-service): preserve self-referential relations during publish/discard
* test(document-service): convert self-referential API test to TypeScript
* fix(document-service): use JoinTable type and tighten Record types in self-referential-relations
* test(document-service): remove weak load() happy-path unit test
* fix(document-service): skip mappedBy attrs, deduplicate and idempotent-insert self-refs
* test(document-service): fix missing dialect and trx mocks in self-referential-relations tests
* fix(tests): use count assertions for CM API self-referential relation tests
* enhancement: update progress per chunk
* fix: check stageprogress exists to make ts happy
* chore: split progress tracker into two methods
* test: fix lint
* enhancement: display readable times
* fix: speed indication for assets
* fix: restore speed indicator and fix double counting
* chore: clean up code
* fix: data transfer memory leak
* fix: yarn.lock
* chore: fix memory logging
* ci: complex project remote transfer
* enhancement: optimized transfer mode
* test(cli): data transfer and env passthrough
* chore: only send one message warning of legacy mode
* enhancement: show transfer totals and estimated time
* test(cli): fix deterministic transfer test files
* fix: push and pull shared utils backwards compatibility
* fix(data-transfer): extract legacy asset chunk parsing and tighten transfer logging/test coverage
* enhancement: checksum negotiation
* enhancement: show skipped file warnings on client
* fix: transfer diagnostics
* test: fix open handle
* fix: clear stall timeout for assets
* chore: fix misleading comments and variables
* test: fix misleading test
* test: fix typo
* test: make checks deterministic, less flaky
* enhancement(data-transfer): speed up asset totals; widen assets start reply window on remote pull
* fix(data-transfer): harden WebSocket JSON serialization for transfer frames
* fix(data-transfer): more transfer hardening
* test: fix test imports
* fix: await async write
* fix(data-transfer): resolve push transfer deadlock and harden async writes
- Extract createAssetsDestinationWritable so Writable callbacks run before
uploadStream completes (same WS batch as PassThrough chunks).
- Add writable-async-write (write callback + drain/finished race; avoid hang
on destroy).
- Wire push/pull, remote-source, file & directory sources to shared write().
- Fire-and-forget pull flush: Promise.resolve(flush).catch(onError); guard
missing stream inside try.
- Add regression tests (assets writable, writable-async-write, handler checks).
* fix(data-transfer): write push stream batches sequentially
Use a for-loop with await write() instead of Promise.all over msg.data
so non-asset stages respect one in-flight write per objectMode Writable
and backpressure from writable-async-write.
- Validate minChunksForBackpressure in assertReadStreamBackpressure
- Add engine test for non-Buffer asset chunk byte progress (counts as 1)
- Assert push.ts keeps sequential msg.data handling in static handler test
* fix(data-transfer): align push streamAsset with remote-source and harden tests
- Push handler: combine stream/end under one branch, error when start is missing
or action is invalid; shorten stage write comments.
- Engine version-matching tests: use a fresh createDestination() per engine so
parallel transfers do not share destination writables (MaxListeners warnings).
- File destination tests: mock createWriteStream with a new Writable per call.
- CLI transfer tests: mock progress.stream so transfer::finish runs after transfer
and clears the progress setInterval (fixes Jest worker hang).
- Misc test cleanup: assets-destination timeout clearTimeout, collect listeners,
writable-async-write teardown; tighten push/static test descriptions.
* test: remove parity test
* fix(data-transfer): harden collect() and stabilize transfer tests
- collect(): settle once, remove listeners on resolve/reject, avoid double completion
- engine tests: add expectHeapGrowthWithinNoise for heap smoke checks
- CLI transfer tests: console spies in beforeAll; jest.restoreAllMocks in afterAll
- stream test: remove removeAllListeners workaround
* fix(core): add firstPublishedAt field to draft
* test: add unit test firstPublishedAt
---------
Co-authored-by: Ziyi <daydreamnation@live.com>
Co-authored-by: Alex Birkner <github@tyrola.dev>
* feat: 'toPermissions' in stage management
* test: enhance stage tests
* test: add api tests for to stage permissions
* feat: migration for backward compatible stage transfer permissions
* chore: rename permissions to fromPermissions in workflow stages
* chore: improve type definitions
* chore: rename permissions to fromPermissions
* fix(core): relation handling preserves order during unpublish/republish cycles
* fix: preserve bidirectional order (#25792)
- Keep join rows when related side is still draft; map to published id when available
- Sync owner-side join order when publishing the owning type (inversedBy path)
- Refactor bidirectional load into shared capture + draft→published mapping helpers
Co-authored-by: Ben Irvin <ben@innerdvations.com>
* chore(core): re add order fix
* chore(core): improve structure and batch processing
---------
Co-authored-by: Ben Irvin <ben@innerdvations.com>
* fix: contains filter no longer returns empty data
* chore: fix comments
* fix(utils): stop recursing opaque operator operands in filter traversal
* fix(utils): keep Date and other operand objects when stripping empty filters
* feat(content-manager): add publication status filter in list view
Add a publication status filter to the content manager list view when draft & publish is enabled
* feat(content-manager): translate status query filter into document service params
Transform a "status" filter in URL query to a top level document-service param
* feat(content-manager): update publication filter key to prevent conflict with user-defined attribute
* feat(content-manager): add unit tests to extractStatusFilter util
Adds unit tests to extractStatusFilter utility function with permutations of query params as inputs.
* feat(content-manager): expand extractStatusFilter unit tests
Adds additional test cases to extractStatusFilter util
* chore: rename status filter and add test
* enhancement: add full list of status filters
* chore: update labels
---------
Co-authored-by: Ben Irvin <ben@innerdvations.com>
Co-authored-by: Ben Irvin <ben.irvin@strapi.io>
* future(upload): add folder creation functionality in AssetsPage
* future(upload): update CreateFolderDialog to use props for open state and folder name
* future(upload): front/e2e tests for folder creation + error handling
* fix: add params actually works
* fix: rename addInputParams
* test: fix register timing
* chore: update getstarted
* test(api): remove ai comment
* revert: do not merge in type unneccessarily
* revert: do not add type to route