Skip to content

README and agent instructions for functions package - #211

Merged
berndverst merged 1 commit into
microsoft:mainfrom
andystaples:andystaples/functions-documentation-update
Jul 27, 2026
Merged

README and agent instructions for functions package#211
berndverst merged 1 commit into
microsoft:mainfrom
andystaples:andystaples/functions-documentation-update

Conversation

@andystaples

Copy link
Copy Markdown
Contributor

Updates the READMEs and agent instructions files noting the changes introduced by the new azure-functions-durable package

Copilot AI review requested due to automatic review settings July 27, 2026 17:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates repository documentation and Copilot/agent instruction files to reflect the addition of the new azure-functions-durable package alongside the existing durabletask core SDK and durabletask.azuremanaged provider.

Changes:

  • Refreshes the root README to describe the three-package layout and adds a direct reference link to Azure Functions Durable 2.x docs.
  • Expands the Azure Functions Durable README links section with upstream dependency/source references.
  • Updates Copilot and release-prep skill instructions to include azure-functions-durable in release/versioning/changelog guidance and development workflows.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
README.md Updates repo-level messaging to cover Durable Task Scheduler + Durable Functions and lists the three packages.
azure-functions-durable/README.md Adds helpful upstream links for the Azure Functions Durable provider.
.github/skills/release-prep/SKILL.md Extends release-prep guidance to include azure-functions-durable tags, versions, and changelog steps.
.github/copilot-instructions.md Updates Copilot repo instructions for three packages, including updated lint/test and Azure Functions Durable/Nox guidance.
Comments suppressed due to low confidence (1)

.github/copilot-instructions.md:155

  • This pytest example also uses Bash-only \ line continuation even though the instructions above require including both Bash and PowerShell examples when syntax differs. Add a PowerShell version using backticks.
```bash
python -m pytest
python -m pytest tests/azure-functions-durable \
  -m "not dts and not azurite and not functions_e2e"
</details>

Comment on lines 143 to 146
```bash
python -m pip install -e . -e ./durabletask-azuremanaged
python -m pip install -e . -e ./durabletask-azuremanaged \
-e ./azure-functions-durable
```
@berndverst
berndverst merged commit 58f99b2 into microsoft:main Jul 27, 2026
23 checks passed
berndverst pushed a commit that referenced this pull request Jul 27, 2026
The repo's agent instructions, updated in #211, now explicitly codify the
changelog style: 'wrapped entry text remains unindented rather than being
aligned beneath the bullet.'

My earlier commit e1db0f4 indented these continuations after surveying
existing entries (105 of 105 wrapped bullets were indented). That survey
measured the legacy style; the documented convention is a deliberate
forward-looking change, and andystaples had said as much in review. The
maintainer's stated preference is now written policy, so this reverts to
unindented.

Content is unchanged apart from removing 18 leading spaces.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b6ec6f9e-f919-4874-b146-fa764b5c5617
berndverst added a commit that referenced this pull request Jul 27, 2026
…ge (#209)

* Avoid eager worker imports from the durabletask package initializer

The `durabletask` package initializer eagerly imported `durabletask.worker`
just to re-export a handful of public types. Because the
`durabletask-azuremanaged` distribution shares the same `durabletask`
namespace package, importing anything from it (for example
`durabletask.azuremanaged.client`) first executed this initializer and
therefore loaded the entire worker dependency graph - gRPC, protobuf,
entities, serialization, and OpenTelemetry - even for client-only
applications.

Resolve the public re-exports lazily with a module-level `__getattr__`
(PEP 562), paired with a `TYPE_CHECKING` block so static type checkers and
IDEs still resolve every symbol. Resolved values are cached in the module
globals so subsequent lookups bypass the hook entirely.

Measured with `python -X importtime`, median of 11 runs:

  import durabletask                     419.2 ms -> 5.5 ms (76x faster)
                                         293 -> 81 modules loaded

  import durabletask.azuremanaged.client 641.1 ms -> 610.8 ms
                                         408 -> 398 modules loaded

No public API changes: every existing import path, `__all__`, `PACKAGE_NAME`,
`dir()`, star-imports, and the `AttributeError` message shape are preserved.

Fixes #196

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b6ec6f9e-f919-4874-b146-fa764b5c5617

* Keep eagerly bound submodules reachable as package attributes

Making the public re-exports lazy also removed a side effect of the previous
eager imports: the import system had been binding the imported submodules as
attributes of the `durabletask` package. A bare `import durabletask` therefore
left `entities`, `grpc_options`, `internal`, `payload`, `serialization`, `task`,
and `worker` reachable through plain attribute access, and that stopped working.

`from durabletask import task` kept working either way, because importlib's
`_handle_fromlist` imports the submodule when `__getattr__` raises, which is why
the existing submodule test did not catch this. Plain attribute access has no
such fallback.

Resolve those seven names through `__getattr__` as well, and include them in
`__dir__`. They are still imported only when touched, so the cold-start win is
unchanged: a bare `import durabletask` continues to load 81 modules and pulls in
neither the worker nor gRPC.

The list deliberately mirrors the previous surface rather than extending it -
`durabletask.client` was never bound this way, so it stays unreachable by
attribute access, and a test pins that.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b6ec6f9e-f919-4874-b146-fa764b5c5617

* Skip the azuremanaged lazy-import test when the provider is absent

`test_importing_azuremanaged_client_does_not_import_worker` failed on all
five Python versions in the `run-tests` job of `.github/workflows/durabletask.yml`
with `ModuleNotFoundError: No module named 'durabletask.azuremanaged'`.

The cause is a missing package, not lazy initialization. That job installs
`requirements.txt`, `.[azure-blob-payloads]` and `aiohttp`, and never installs
`durabletask-azuremanaged` -- so the test's subprocess could never import the
provider there. It passes locally only because a development environment has
both distributions installed.

Guard the test with `pytest.importorskip("durabletask.azuremanaged")` so it
skips cleanly where the provider is not installed. The assertion itself is
unchanged, and the test still runs (and still has teeth) wherever the provider
is present. Widening the workflow's install scope would be a broader change
than this fix needs.

Verified by blocking the provider behind a `sys.meta_path` hook to simulate the
CI environment: 42 passed, 1 skipped without the provider, 43 passed with it.

Also rewrap the CHANGELOG entry to the 100-character md013 limit using
non-indented continuation lines. The file has 16 pre-existing md013 violations
on `main`; this keeps that count unchanged rather than adding to it.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b6ec6f9e-f919-4874-b146-fa764b5c5617

* Indent CHANGELOG continuation lines for repo consistency

The wrapped bullet added by this PR used non-indented continuation
lines. Surveying every wrapped bullet in the repository shows that is
the sole exception:

  CHANGELOG.md                        59 indented, 0 non-indented
  durabletask-azuremanaged/CHANGELOG  20 indented, 0 non-indented
  azure-functions-durable/CHANGELOG   26 indented, 0 non-indented

Indent the nine continuation lines to match. Content is unchanged --
the diff is exactly 18 added space characters (9 lines x 2).

Note the rendering rationale offered in review does not apply here.
CommonMark lazy continuation keeps unindented paragraph text inside
the list item, and GitHub's own renderer returns byte-identical HTML
for both forms (1 <ul>, 1 <li>, no text escaping the item). The reason
to indent is consistency with the other 105 wrapped bullets, not a
rendering defect. Indented text is still more robust, since a future
reflow that starts a line with "-" or "1." would silently open a new
list block.

Longest line is now 89 characters, within the md013 limit of 100.
Violation count is unchanged at 16, all pre-existing and none on the
lines this PR touches.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b6ec6f9e-f919-4874-b146-fa764b5c5617

* Restore unindented changelog continuation lines

The repo's agent instructions, updated in #211, now explicitly codify the
changelog style: 'wrapped entry text remains unindented rather than being
aligned beneath the bullet.'

My earlier commit e1db0f4 indented these continuations after surveying
existing entries (105 of 105 wrapped bullets were indented). That survey
measured the legacy style; the documented convention is a deliberate
forward-looking change, and andystaples had said as much in review. The
maintainer's stated preference is now written policy, so this reverts to
unindented.

Content is unchanged apart from removing 18 leading spaces.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b6ec6f9e-f919-4874-b146-fa764b5c5617

---------

Co-authored-by: Bernd Verst <beverst@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b6ec6f9e-f919-4874-b146-fa764b5c5617
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.

3 participants