Skip to content

chore(release): 1.4.0 - #4

Closed
JacksonWeber wants to merge 12 commits into
mainfrom
jacksonweber-opentelemetry-dependency-release
Closed

JacksonWeber wants to merge 12 commits into
mainfrom
jacksonweber-opentelemetry-dependency-release

Conversation

@JacksonWeber

Copy link
Copy Markdown
Owner

Release 1.4.0

Prepare the next minor release from current upstream main, including all changes since 1.3.0.

Release metadata

  • Bump package.json and MICROSOFT_OPENTELEMETRY_VERSION to 1.4.0.
  • Roll unreleased changes into the 2026-09-08 release notes, including A365 durable delivery, LangChain GenAI attributes, AKS instrumentation, telemetry fixes, and CI/dependency maintenance.
  • Refresh the root lockfile and the samples' local-package metadata.

Azure Monitor / OpenTelemetry alignment

Use the published @azure/monitor-opentelemetry@1.20.0 and its @azure/monitor-opentelemetry-exporter@1.0.0-beta.45 dependency as the compatibility baseline.

Dependency Before Release
@azure/monitor-opentelemetry-exporter minimum 1.0.0-beta.44 1.0.0-beta.45
@azure/opentelemetry-instrumentation-azure-sdk ^1.0.0 ^1.1.0-beta.1
OpenTelemetry core/SDK 2.10.0 / 0.221.0 Retained: already matches Azure Monitor
OpenTelemetry API / semantic conventions 1.9.1 / 1.43.0 Retained: already matches Azure Monitor

All shared direct OpenTelemetry dependency ranges match both published Azure Monitor packages. Updating the exporter removes its nested OpenTelemetry core/resources 2.9.0 and logs 0.220.0 copies, allowing it to use the distro's 2.10.0 / 0.221.0 packages.

The exporter's npm latest tag still points to beta.32; this deliberately uses the newer beta.45 release referenced by Azure Monitor 1.20.0 and the exporter's beta tag. The existing beta-only version range remains in place.

Validation

  • Build, ESM import regression, and built-package OTLP integration passed on Node 24.15.0.
  • Dependency alignment, release version consistency, lockfile metadata, and changed-file formatting checks passed.
  • Test run: 1,119 passed, 5 todo, with three timing failures in A365 replay and browser-loader tests. Rerunning both affected files in isolation passed all 136 tests without code changes.

JacksonWeber and others added 12 commits August 11, 2026 13:34
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](fastify/fast-uri@v3.1.4...v3.1.5)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test: add integration and performance checks

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: stabilize performance comparison

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add AKS LangChain auto-instrumentation sample

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address AKS sample review feedback

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…microsoft#221)

Bumps [@hono/node-server](https://github.com/honojs/node-server) from 1.19.14 to 2.1.0.
- [Release notes](https://github.com/honojs/node-server/releases)
- [Commits](honojs/node-server@v1.19.14...v2.1.0)

---
updated-dependencies:
- dependency-name: "@hono/node-server"
  dependency-version: 2.1.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

Bumps the github-actions group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [actions/checkout](https://github.com/actions/checkout) | `4.4.0` | `7.0.1` |
| [actions/setup-node](https://github.com/actions/setup-node) | `4.4.0` | `7.0.0` |
| [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) | `3.0.1` | `5.0.0` |
| [actions/deploy-pages](https://github.com/actions/deploy-pages) | `4.0.5` | `5.0.0` |
| [actions/github-script](https://github.com/actions/github-script) | `7.1.0` | `9.0.0` |
| [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.6.2` | `7.0.1` |


Updates `actions/checkout` from 4.4.0 to 7.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@11d5960...3d3c42e)

Updates `actions/setup-node` from 4.4.0 to 7.0.0
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](actions/setup-node@49933ea...8207627)

Updates `actions/upload-pages-artifact` from 3.0.1 to 5.0.0
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](actions/upload-pages-artifact@56afc60...fc324d3)

Updates `actions/deploy-pages` from 4.0.5 to 5.0.0
- [Release notes](https://github.com/actions/deploy-pages/releases)
- [Commits](actions/deploy-pages@d6db901...cd2ce8f)

Updates `actions/github-script` from 7.1.0 to 9.0.0
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](actions/github-script@f28e40c...3a2844b)

Updates `actions/upload-artifact` from 4.6.2 to 7.0.1
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@ea165f8...043fb46)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/setup-node
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/upload-pages-artifact
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/deploy-pages
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/github-script
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix: remediate component governance dependencies

Update vulnerable transitive dependencies and align the samples OTLP exporter with the current OpenTelemetry release line.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address dependency review comments

Pin the nanoid remediation to the verified release commit and replace latest sample dependencies with tested semver ranges.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor: remove dependency overrides

Use the supported transitive keyv version and retain the patched nanoid release commit through the lockfile.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add CI check for CHANGELOG entry

* Retrigger CI/CD pipeline
* docs: design A365 durable delivery

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 42d7c423-38b3-4951-b6f3-124cedca83f2

* docs: plan A365 durable delivery

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 42d7c423-38b3-4951-b6f3-124cedca83f2

* feat(a365): add durable delivery options

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 42d7c423-38b3-4951-b6f3-124cedca83f2

* feat(a365): add secure durable storage

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 42d7c423-38b3-4951-b6f3-124cedca83f2

* fix(a365): harden persistent store recovery

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(a365): append task 2 fix report

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(a365): add shared transmission backoff

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 42d7c423-38b3-4951-b6f3-124cedca83f2

* Remove TransmissionGate clock override

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(a365): add durable delivery manager

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): share durable transmission gate

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(a365): integrate durable exporter delivery

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 42d7c423-38b3-4951-b6f3-124cedca83f2

* fix(a365): drain durable exports during shutdown

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: remove internal task reports

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(a365): document durable delivery

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): harden durable delivery final review

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): harden durable replay recovery

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: correct durable shutdown behavior

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: design final durable hardening alignment

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9afb195d-ff88-42e3-b16b-f45ec31391d9

* docs: plan final durable hardening alignment

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9afb195d-ff88-42e3-b16b-f45ec31391d9

* fix(a365): degrade unavailable durable storage

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 9afb195d-ff88-42e3-b16b-f45ec31391d9

* test(a365): pin network-only exporter fixtures

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): align retryable delivery outcomes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ca0adbef-9fc5-489a-84c2-fa6ed011f10a

* fix(a365): isolate replay token failures

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): make durable replay use current routing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): partition durable storage roots

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): drain network exports on shutdown

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): clarify shutdown timeout diagnostics

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(a365): document durable delivery defaults

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(a365): fix POSIX fallback order

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): stop durable replay starvation and make shutdown abort hung token resolution

Critical: PersistentStore.claimBatch now accepts excludeRecordIds so a
released token-unavailable record is skipped (and released back to
pending) on later claims within the same replay pass instead of being
reclaimed repeatedly. DurableDeliveryManager.runReplayPassInternal
tracks a per-pass skip set and processClaim returns a tri-state
outcome (advance/exclude/stop) so unrelated records that sort after a
stuck one are still processed in the same pass.

Important: runReplayPassInternal now rechecks closed/replayStopped at
the top of every loop iteration, not just once before the loop.
withTimeout races token resolution against the manager's
AbortController signal (in addition to the timeout), with listener
cleanup in finally, so beginShutdown() aborts a hung token-resolution
wait promptly even when tokenResolutionTimeoutMilliseconds exceeds
shutdownTimeoutMilliseconds (the default relationship).

Minor: remove the dead TransmissionGate.abandon method (no callers)
and its two tests. Clarify in A365_DOCUMENTATION.md that retention,
capacity, and pruning are scoped to the current process's own
app-<hash> partition only; orphaned sibling partitions are not
enumerated or age/capacity pruned.

Adds a real PersistentStore + DurableDeliveryManager integration test
for the starvation fix and a fake-timer shutdown-abort test for the
token-resolution fix; both were confirmed RED before the fix and
GREEN after.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address durable delivery review nits

Configure the shared durable-delivery abort signal for intentional listener fan-out and reject unsafe durable record ids so malformed on-disk records are quarantined instead of reused.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): preflight poison pending files before lease rename

PersistentStore.claimBatch validated DurableRecord ids only after
renaming a pending file to its lease name. A pending file with a
181-character id fits under the 255-byte filesystem component limit,
but appending lease metadata (`.lease-at-<timestamp>-<pid>-<uuid>`)
pushes the same basename over that limit, so the rename itself could
fail (ENAMETOOLONG on POSIX; an unhelpful ENOENT that the existing
benign-race handling silently swallowed on this Windows/NTFS setup)
before the record was ever parsed or quarantined -- aborting the batch
on POSIX, or wedging the poison file in place forever on Windows.

- Add a preflight in claimBatch that runs entirely before the pending
  -> lease rename: (1) a dynamic length check of the computed lease
  basename, and (2) a read+parse of the pending content. Either
  failure quarantines the pending file directly and continues the
  scan, so no poison basename or content can abort the batch or block
  later valid records.
- Quarantine destination for preflight failures is a new short,
  deterministic name (`<timestamp>-quarantined-<pid>-<uuid>.quarantine`)
  built only from current process state, never from the poison
  basename/id, so it can never exceed filesystem name limits or escape
  the storage root.
- Keep ENOENT handling on every rename/read as the benign
  already-claimed-elsewhere race, preserving atomic multi-process
  claiming.
- Add a defensive ENAMETOOLONG catch around the actual lease rename as
  belt-and-suspenders (quarantine-and-continue instead of throw),
  since the primary defense is the preflight, not any OS-specific
  errno.
- Re-read and re-parse from the lease path after a successful rename
  instead of trusting the preflight-parsed content, closing a TOCTOU
  gap where a same-user actor could replace the pending file's content
  between the preflight read and the rename.
- Reduce MAX_DURABLE_RECORD_ID_LENGTH from 180 to 128, a demonstrably
  safe bound against the lease filename format's worst-case suffix
  length, comfortably above the 36-character UUIDs
  createDurableRecord() actually generates.

Tests: add store-level coverage creating a real 181-character-id
pending file alongside a later valid record, asserting the poison
record is quarantined to a bounded short filename, the valid record is
still claimed in the same claimBatch pass, nothing is created outside
the storage root, and no ENAMETOOLONG escapes; a basename-only
oversize case (safe id, oversized on-disk basename) to prove the
length preflight is independent of content validation; a mocked
ENAMETOOLONG-on-rename case proving claimBatch quarantines and keeps
scanning instead of aborting; and extend the existing slash/backslash
unsafe-id quarantine test to assert the new bounded name pattern.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(a365): validate durable record timestamps

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9afb195d-ff88-42e3-b16b-f45ec31391d9

* Harden durable storage and replay

Align Windows ACL enforcement and replay endpoint validation with the final Python implementation. Remove internal planning artifacts and update durable delivery documentation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9afb195d-ff88-42e3-b16b-f45ec31391d9

---------

Co-authored-by: Nikhil Chitlur Navakiran (from Dev Box) <nikhilc@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 42d7c423-38b3-4951-b6f3-124cedca83f2
Copilot-Session: 9afb195d-ff88-42e3-b16b-f45ec31391d9
Copilot-Session: ca0adbef-9fc5-489a-84c2-fa6ed011f10a
* chore(deps): update sample OpenTelemetry packages

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* docs: add sample dependency changelog entry

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix: use public npm lockfile source

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Align Azure Monitor exporter and Azure SDK instrumentation with @azure/monitor-opentelemetry 1.20.0, deduplicate the exporter's OpenTelemetry dependencies, and roll up release notes since 1.3.0.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@JacksonWeber

Copy link
Copy Markdown
Owner Author

Opened against the fork by mistake. Superseded by microsoft#234, targeting upstream main.

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.

4 participants