README and agent instructions for functions package - #211
Merged
berndverst merged 1 commit intoJul 27, 2026
Merged
Conversation
Contributor
There was a problem hiding this comment.
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-durablein 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
approved these changes
Jul 27, 2026
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updates the READMEs and agent instructions files noting the changes introduced by the new azure-functions-durable package