Skip to content

APIM Cut 1.54#2808

Merged
EdwardWills-nhs merged 138 commits into
masterfrom
develop
Jun 10, 2026
Merged

APIM Cut 1.54#2808
EdwardWills-nhs merged 138 commits into
masterfrom
develop

Conversation

@EdwardWills-nhs

Copy link
Copy Markdown
Contributor

Summary

  • Routine Change
  • ❗ Breaking Change
  • 🤖 Operational or Infrastructure Change
  • ✨ New Feature
  • ⚠️ Potential issues that might be caused by this change

Add any other relevant notes or explanations here. Remove this line if you have nothing to add.

Reviews Required

  • Dev
  • Test
  • Tech Author
  • Product Owner

Review Checklist

ℹ️ This section is to be filled in by the reviewer.

  • I have reviewed the changes in this PR and they fill all or part of the acceptance criteria of the ticket, and the code is in a mergeable state.
  • If there were infrastructure, operational, or build changes, I have made sure there is sufficient evidence that the changes will work.
  • I have ensured the changelog has been updated by the submitter, if necessary.

dependabot Bot and others added 30 commits November 17, 2025 00:08
Bumps [default-browser-id](https://github.com/sindresorhus/default-browser-id) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/sindresorhus/default-browser-id/releases)
- [Commits](sindresorhus/default-browser-id@v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: default-browser-id
  dependency-version: 5.0.1
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [default-browser-id](https://github.com/sindresorhus/default-browser-id) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/sindresorhus/default-browser-id/releases)
- [Commits](sindresorhus/default-browser-id@v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: default-browser-id
  dependency-version: 5.0.1
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@hapi/cryptiles](https://github.com/hapijs/cryptiles) from 6.0.1 to 6.0.3.
- [Commits](hapijs/cryptiles@v6.0.1...v6.0.3)

---
updated-dependencies:
- dependency-name: "@hapi/cryptiles"
  dependency-version: 6.0.3
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.4 to 4.0.5.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](form-data/form-data@v4.0.4...v4.0.5)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.5
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@eslint/eslintrc](https://github.com/eslint/eslintrc) from 3.3.1 to 3.3.3.
- [Release notes](https://github.com/eslint/eslintrc/releases)
- [Changelog](https://github.com/eslint/eslintrc/blob/main/CHANGELOG.md)
- [Commits](eslint/eslintrc@v3.3.1...eslintrc-v3.3.3)

---
updated-dependencies:
- dependency-name: "@eslint/eslintrc"
  dependency-version: 3.3.3
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [exceptiongroup](https://github.com/agronholm/exceptiongroup) from 1.3.0 to 1.3.1.
- [Release notes](https://github.com/agronholm/exceptiongroup/releases)
- [Changelog](https://github.com/agronholm/exceptiongroup/blob/main/CHANGES.rst)
- [Commits](agronholm/exceptiongroup@1.3.0...1.3.1)

---
updated-dependencies:
- dependency-name: exceptiongroup
  dependency-version: 1.3.1
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pytest-check](https://github.com/okken/pytest-check) from 2.6.0 to 2.6.2.
- [Release notes](https://github.com/okken/pytest-check/releases)
- [Changelog](https://github.com/okken/pytest-check/blob/main/changelog.md)
- [Commits](okken/pytest-check@2.6.0...2.6.2)

---
updated-dependencies:
- dependency-name: pytest-check
  dependency-version: 2.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.12.4 to 2.12.5.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/v2.12.5/HISTORY.md)
- [Commits](pydantic/pydantic@v2.12.4...v2.12.5)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-version: 2.12.5
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [rpds-py](https://github.com/crate-py/rpds) from 0.29.0 to 0.30.0.
- [Release notes](https://github.com/crate-py/rpds/releases)
- [Commits](crate-py/rpds@v0.29.0...v0.30.0)

---
updated-dependencies:
- dependency-name: rpds-py
  dependency-version: 0.30.0
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.5.0 to 2.6.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](urllib3/urllib3@2.5.0...2.6.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.6.0
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [undici](https://github.com/nodejs/undici) from 6.22.0 to 6.23.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v6.22.0...v6.23.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 6.23.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@eslint-community/eslint-utils](https://github.com/eslint-community/eslint-utils) from 4.9.0 to 4.9.1.
- [Release notes](https://github.com/eslint-community/eslint-utils/releases)
- [Commits](eslint-community/eslint-utils@v4.9.0...v4.9.1)

---
updated-dependencies:
- dependency-name: "@eslint-community/eslint-utils"
  dependency-version: 4.9.1
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [esquery](https://github.com/estools/esquery) from 1.6.0 to 1.7.0.
- [Commits](https://github.com/estools/esquery/commits)

---
updated-dependencies:
- dependency-name: esquery
  dependency-version: 1.7.0
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [globals](https://github.com/sindresorhus/globals) from 16.5.0 to 17.0.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](sindresorhus/globals@v16.5.0...v17.0.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5.
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](isaacs/minimatch@v3.1.2...v3.1.5)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
…lop/default-browser-id-5.0.1

npm(deps): bump default-browser-id from 5.0.0 to 5.0.1
Bumps [spdx-license-ids](https://github.com/jslicense/spdx-license-ids) from 3.0.22 to 3.0.23.
- [Commits](jslicense/spdx-license-ids@v3.0.22...v3.0.23)

---
updated-dependencies:
- dependency-name: spdx-license-ids
  dependency-version: 3.0.23
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.46.0 to 3.48.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.48.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-version: 3.48.0
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
EdwardWills-nhs and others added 15 commits May 27, 2026 10:06
- Split copilot-instructions.md into targeted .instructions.md files (proxy, sandbox, testing, specification) loaded by applyTo patterns
- Add /overview, /release, and /add-context prompts
- Document release process, sandbox patterns, Actor model, and proxy architecture
- lxml: ^5.1.0 -> ^6.1.0 (CVE fix, earliest fixed version 6.1.0)
- pytest: ^8.4.2 -> ^9.0.3 (CVE fix, earliest fixed version 9.0.3)
- werkzeug: add >=3.1.6 (CVE fix, earliest fixed version 3.1.6)
- openapi-core: ^0.19.5 -> ^0.20.0 (unblock werkzeug update)
- pytest-nhsd-apim: ^5.0.6 -> ^6.0.0 (unblock lxml and pytest updates)
fix: update vulnerable dependencies
[RAA-7705]-[]-[testdev environment apim support]-[DW]
pin GitHub Actions to latest versions with commit SHAs
[RAA-5861]-[GC]-[Bumping version to 1.54 +minor]-[EW]

Copilot AI left a comment

Copy link
Copy Markdown

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 looks like an “APIM cut” that updates API specification/behaviour (notably attachment retrieval error handling), refreshes dependency/tooling versions, and extends deployment/ops configuration (new environment + pipeline stage), alongside adding internal repo guidance prompts/instructions.

Changes:

  • Update attachment retrieval semantics/documentation for FHIR R4 to return 422 Unprocessable Entity when an attachment is not yet downloadable, including new OperationOutcome example.
  • Refactor STU3 upload/download content-type schemas (inline media types) and update sandbox mappings/mocks accordingly.
  • Update dependency/tooling configuration (Redocly CLI, Python deps) and CI/CD/pipeline wiring (new testdev internal-dev deployment stage), plus add repo “Copilot context” and instruction/prompt docs.

Reviewed changes

Copilot reviewed 30 out of 33 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tests/integration/test_user_restricted.py Simplifies the user-restricted integration tests and removes negative-path cases.
tests/data.py Updates the Actor.RC user ID used in integration/auth flows.
tests/conftest.py Removes apim_app_flow_vars fixture usage and updates app-restricted user ID.
specification/components/stu3/schemas/responses/retrieveAttachment/200Response.yaml Expands 200 response content to explicit media types using StringBinarySchema.
specification/components/stu3/schemas/file/FileContentTypeSchemaUpload.yaml Removes the shared upload content-type schema file.
specification/components/stu3/schemas/file/FileContentTypeSchemaDownload.yaml Removes the shared download content-type schema file.
specification/components/stu3/schemas/endpoints/a020-upload-file-to-document-store.yaml Inlines requestBody media types instead of $ref to removed schema file.
specification/components/r4/schemas/responses/retrieveAttachment/422Response.yaml Adds a new documented 422 OperationOutcome response for attachment retrieval.
specification/components/r4/schemas/endpoints/a042-retrieve-attachment.yaml Updates docs + adds 422 response reference for attachment availability errors.
sandbox/src/routes/stu3/services/mockResponseProvider.js Adds new request→response mappings for cancel referral scenarios.
sandbox/src/mocks/r4/NHSDigital-OperationOutcome-422.json Adds sandbox mock example used by the spec examples pipeline.
sandbox/python-deps.txt Adds a Python dependency snapshot file (appears generated).
sandbox/package.json Bumps globals devDependency.
sandbox/package-lock.json Updates lockfile to v3 and refreshes transitive deps.
redocly.yaml Updates Redocly rule configuration (stops disabling info-license-url).
pyproject.toml Updates Python dependency versions (incl. openapi-core, pytest, pytest-nhsd-apim) and adds werkzeug constraint.
package.json Upgrades @redocly/cli to v2 and adds handlebars override.
node-deps.json Adds a Node dependency tree/snapshot file (appears generated).
manifest_template.yml Adds testdev-internal-dev Apigee environment entry.
azure/azure-release-pipeline.yml Adds testdev release stage and manual approval gate.
.github/workflows/continous-integration-workflow.yaml Pins GitHub Actions to specific SHAs.
.github/workflows/combine-prs.yml Pins actions/github-script to a specific SHA.
.github/prompts/release.prompt.md Adds a release-process Copilot prompt.
.github/prompts/overview.prompt.md Adds a repo overview/onboarding Copilot prompt.
.github/prompts/add-context.prompt.md Adds a Copilot prompt for updating .github/copilot-instructions.md.
.github/instructions/testing.instructions.md Adds test-suite conventions and guidance.
.github/instructions/specification.instructions.md Adds OAS workflow + examples pipeline documentation.
.github/instructions/sandbox.instructions.md Adds sandbox architecture + patterns documentation.
.github/instructions/proxy.instructions.md Adds Apigee proxy architecture + flow documentation.
.github/copilot-instructions.md Adds repo-wide Copilot context (structure, workflows, conventions).
.github/CODEOWNERS Adds an additional code owner for dependency/version files.
Files not reviewed (1)
  • sandbox/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

redocly.yaml:7

  • redocly.yaml no longer disables the info-license-url rule, but the OpenAPI spec only provides info.license.name (no info.license.url). With the recommended ruleset this will cause make lint / redocly lint to fail unless the spec is updated.

Either re-disable the rule here, or add a license URL to specification/e-referrals-service-api.yaml.

extends:
  - recommended
rules:
  no-invalid-media-type-examples:
    severity: off
  tag-description: off


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 31 to 38
@pytest.mark.asyncio
@pytest.mark.parametrize(
"endpoint_url, is_fhir_4, user, apim_app_flow_vars ",
"endpoint_url, is_fhir_4, user",
[
("", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
("/FHIR/R4/", True, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
("/FHIR/STU3/", False, Actor.RC_DEV, [Actor.RC_DEV.org_code]),
("", False, Actor.RC_DEV),
("/FHIR/R4/", True, Actor.RC_DEV),
("/FHIR/STU3/", False, Actor.RC_DEV),
],
Comment thread node-deps.json
Comment on lines +1 to +7
{
"version": "1.0.0",
"name": "e-referrals-service-api-sandbox",
"problems": [
"invalid: globals@16.5.0 /home/ers/git/e-referrals-service-api/sandbox/node_modules/globals"
],
"dependencies": {
Comment thread sandbox/python-deps.txt
Comment on lines +21 to +25
├── ply *
└── six *
lxml 5.4.0 Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
openapi-core 0.19.5 client-side and server-side support for the OpenAPI Specification v3
├── isodate *

@georgeCraftReferrals georgeCraftReferrals 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.

lgtm

@EdwardWills-nhs EdwardWills-nhs merged commit 77c1535 into master Jun 10, 2026
5 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.

7 participants