diff --git a/.zuul.yaml b/.zuul.yaml
index 9ac00275..6dcb3943 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -13,42 +13,43 @@
 - project:
     templates:
       - docs-on-readthedocs
-      - openstack-python38-jobs
     vars:
       rtd_webhook_id: '38572'
       rtd_project_name: 'airship-deckhand'
     check:
       jobs:
-        - deckhand-tox-py38-postgresql
-        - deckhand-functional-uwsgi-py38
-        - deckhand-functional-docker-py38
-        - deckhand-integration-uwsgi-py38
-        - deckhand-integration-docker-py38
+        - openstack-tox-py310
+        - deckhand-tox-py310-postgresql
+        - deckhand-functional-uwsgi-py310
+        - deckhand-functional-docker-py310
+        - deckhand-integration-uwsgi-py310
+        - deckhand-integration-docker-py310
         - deckhand-chart-build-gate
         - deckhand-chart-build-latest-htk
         - deckhand-docker-build-gate
-        - deckhand-openstack-tox-pep8-focal
-        - deckhand-openstack-tox-cover-focal
-        - deckhand-airskiff-deployment-focal-kubeadm
+        - deckhand-openstack-tox-pep8-jammy
+        - deckhand-openstack-tox-cover-jammy
+        - deckhand-airskiff-deployment-jammy-kubeadm
 
     gate:
       jobs:
-        - deckhand-tox-py38-postgresql
-        - deckhand-functional-uwsgi-py38
-        - deckhand-functional-docker-py38
-        - deckhand-integration-uwsgi-py38
-        - deckhand-integration-docker-py38
+        - openstack-tox-py310
+        - deckhand-tox-py310-postgresql
+        - deckhand-functional-uwsgi-py310
+        - deckhand-functional-docker-py310
+        - deckhand-integration-uwsgi-py310
+        - deckhand-integration-docker-py310
         - deckhand-chart-build-gate
         - deckhand-chart-build-latest-htk
         - deckhand-docker-build-gate
-        - deckhand-openstack-tox-pep8-focal
-        - deckhand-openstack-tox-cover-focal
+        - deckhand-openstack-tox-pep8-jammy
+        - deckhand-openstack-tox-cover-jammy
 
 
     post:
       jobs:
         - deckhand-upload-git-mirror
-        - deckhand-docker-publish-ubuntu_focal
+        - deckhand-docker-publish-ubuntu_jammy
 
 
 - nodeset:
@@ -64,37 +65,37 @@
         label: ubuntu-bionic
 
 - nodeset:
-    name: deckhand-single-node-focal
+    name: deckhand-single-node-jammy
     nodes:
       - name: primary
-        label: ubuntu-focal
+        label: ubuntu-jammy
 
 - nodeset:
-    name: deckhand-single-node-airskiff-focal
+    name: deckhand-single-node-airskiff-jammy
     nodes:
       - name: primary
-        label: ubuntu-focal
+        label: ubuntu-jammy
 
 - job:
-    name: deckhand-openstack-tox-pep8-focal
+    name: deckhand-openstack-tox-pep8-jammy
     parent: openstack-tox-pep8
-    description: Runs pep8 job on focal
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    description: Runs pep8 job on jammy
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
 
 - job:
-    name: deckhand-openstack-tox-cover-focal
+    name: deckhand-openstack-tox-cover-jammy
     parent: openstack-tox-cover
-    description: Runs cover job on focal
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    description: Runs cover job on jammy
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
 
 - job:
-    name: deckhand-tox-py38-postgresql
-    parent: openstack-tox-py38
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    name: deckhand-tox-py310-postgresql
+    parent: openstack-tox-py310
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     pre-run:
       - tools/gate/playbooks/prepare-hosts.yaml
     vars:
-      tox_envlist: py38-postgresql
+      tox_envlist: py310-postgresql
 
 - job:
     name: deckhand-base
@@ -117,6 +118,7 @@
       - ^deckhand/tests/unit/.*$
     timeout: 10800
     pre-run:
+      - tools/gate/playbooks/checkout-treasuremap-ref.yaml
       - tools/gate/playbooks/prepare-hosts.yaml
       - tools/gate/playbooks/mount-volumes.yaml
       - tools/gate/playbooks/deploy-env.yaml
@@ -125,6 +127,7 @@
     post-run:
       - tools/gate/playbooks/osh-infra-collect-logs.yaml
     vars:
+      treasuremap_ref: refs/changes/43/927643/4
       extra_volume:
         size: 80G
         type: Linux
@@ -141,15 +144,16 @@
       loopback_device: /dev/loop100
       loopback_image: "/opt/ext_vol/openstack-helm/ceph-loop.img"
       ceph_osd_data_device: /dev/loop100
-      kube_version_repo: "v1.29"
-      kube_version: "1.29.5-1.1"
+      kube_version_repo: "v1.30"
+      kube_version: "1.30.3-1.1"
       calico_setup: true
-      calico_version: "v3.27.0"
+      calico_version: "v3.27.4"
       cilium_setup: false
-      cilium_version: "1.15.6"
-      helm_version: "v3.6.3"
-      yq_version: "v4.6.0"
-      crictl_version: "v1.26.1"
+      cilium_version: "1.16.0"
+      flannel_setup: false
+      flannel_version: v0.25.4
+      helm_version: "v3.15.4"
+      crictl_version: "v1.30.1"
       zuul_osh_relative_path: ../../openstack/openstack-helm
       zuul_osh_infra_relative_path: ../../openstack/openstack-helm-infra
       zuul_treasuremap_relative_path: ../../airship/treasuremap
@@ -158,61 +162,61 @@
 
 
 - job:
-    name: deckhand-functional-docker-py38
+    name: deckhand-functional-docker-py310
     description: |
       Run tox-based functional tests for the Airship Deckhand project under
-      cPython version 3.8. Uses tox with the ``functional-py38`` environment.
-      Ubuntu (focal) image is built and used.
+      cPython version 3.10. Uses tox with the ``functional-py310`` environment.
+      Ubuntu (jammy) image is built and used.
     parent: deckhand-base
     run: tools/gate/playbooks/run-functional-tests-docker.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     vars:
-      tox_envlist: py38-functional
+      tox_envlist: py310-functional
       disable_keystone: true
-      DISTRO: ubuntu_focal
+      DISTRO: ubuntu_jammy
     irrelevant-files: *irrelevant-files
 
 - job:
-    name: deckhand-functional-uwsgi-py38
+    name: deckhand-functional-uwsgi-py310
     description: |
       Run tox-based functional tests for the Airship Deckhand project using a
       minimalistic deployment consisting of uwsgi for Deckhand API and pifpaf
-      for ephemeral PostgreSQL DB, under cPython version 3.8.
+      for ephemeral PostgreSQL DB, under cPython version 3.10.
     parent: deckhand-base
     run: tools/gate/playbooks/run-functional-tests-uwsgi.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     vars:
-      tox_envlist: py38-functional-dev
-      DISTRO: ubuntu_focal
+      tox_envlist: py310-functional-dev
+      DISTRO: ubuntu_jammy
     irrelevant-files: *irrelevant-files
 
 
 - job:
-    name: deckhand-integration-uwsgi-py38
+    name: deckhand-integration-uwsgi-py310
     description: |
       Run tox-based integration tests for the Airship Deckhand project using a
       minimalistic deployment consisting of uwsgi for Deckhand API and pifpaf
-      for ephemeral PostgreSQL DB, under cPython version 3.8.
+      for ephemeral PostgreSQL DB, under cPython version 3.10.
     parent: deckhand-base
     run: tools/gate/playbooks/run-integration-tests-uwsgi.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     irrelevant-files: *irrelevant-files
     vars:
       disable_keystone: true
-      DISTRO: ubuntu_focal
+      DISTRO: ubuntu_jammy
 
 - job:
-    name: deckhand-integration-docker-py38
+    name: deckhand-integration-docker-py310
     description: |
       Run tox-based integration tests for the Airship Deckhand project under
-      cPython version 3.8. Builds ubuntu (focal) deckhand image.
+      cPython version 3.10. Builds ubuntu (jammy) deckhand image.
     parent: deckhand-base
     run: tools/gate/playbooks/run-integration-tests-docker.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     vars:
-      tox_envlist: py38-functional
+      tox_envlist: py310-functional
       disable_keystone: false
-      DISTRO: ubuntu_focal
+      DISTRO: ubuntu_jammy
     irrelevant-files: *irrelevant-files
 
 - job:
@@ -221,9 +225,9 @@
       Build charts using pinned Helm toolkit.
     timeout: 900
     run: tools/gate/playbooks/build-charts.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     vars:
-      HTK_COMMIT: cfff60ec10a6c386f38db79bb9f59a552c2b032f
+      HTK_COMMIT: 43fd7143481b6ddda0dbd2f26bf6ec39a417b15b
 
 - job:
     name: deckhand-chart-build-latest-htk
@@ -231,48 +235,26 @@
       Build charts using latest Helm toolkit.
     timeout: 900
     run: tools/gate/playbooks/build-charts.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     vars:
       HTK_COMMIT: master
 
-# - job:
-#     name: deckhand-airskiff-deployment-focal
-#     voting: true
-#     nodeset: treasuremap-airskiff-1node-ubuntu_focal
-#     description: |
-#       Deploy Memcached using Airskiff and submitted Deckhand changes.
-#     timeout: 9600
-#     pre-run:
-#       - tools/gate/playbooks/git-config.yaml
-#       - tools/gate/playbooks/airskiff-reduce-site.yaml
-#     run: tools/gate/playbooks/airskiff-deploy.yaml
-#     post-run: tools/gate/playbooks/debug-report.yaml
-#     required-projects:
-#       - airship/treasuremap
-#     vars:
-#       CLONE_DECKHAND: false
-#       DECKHAND_IMAGE_DISTRO: ubuntu_focal
-#       HELM_ARTIFACT_URL: https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz
-#       HTK_COMMIT: cfff60ec10a6c386f38db79bb9f59a552c2b032f
-#       OSH_INFRA_COMMIT: cfff60ec10a6c386f38db79bb9f59a552c2b032f
-#       OSH_COMMIT: 2d9457e34ca4200ed631466bd87569b0214c92e7
-#       DISTRO: ubuntu_focal
-#     irrelevant-files: *irrelevant-files
 
 - job:
-    name: deckhand-airskiff-deployment-focal-kubeadm
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    name: deckhand-airskiff-deployment-jammy-kubeadm
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     description: |
       Deploy Memcached using Airskiff and submitted Deckhand changes.
     parent: deckhand-base
     vars:
       site: airskiff
-      HELM_ARTIFACT_URL: https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz
-      HTK_COMMIT: 05f2f45971abcf483189358d663e2b46c3fc2fe8
-      OSH_INFRA_COMMIT: 05f2f45971abcf483189358d663e2b46c3fc2fe8
-      OSH_COMMIT: 049e679939fbd3b0c659dd0977911b8dc3b5a015
+      HELM_ARTIFACT_URL: https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz
+      HTK_COMMIT: 43fd7143481b6ddda0dbd2f26bf6ec39a417b15b
+      OSH_INFRA_COMMIT: 43fd7143481b6ddda0dbd2f26bf6ec39a417b15b
+      OSH_COMMIT: 540df5cb0dbdaed63c202e2d6f2b7891062f8203
+      TREASUREMAP_COMMIT: refs/changes/43/927643/2
       CLONE_DECKHAND: false
-      DISTRO: ubuntu_focal
+      DISTRO: ubuntu_jammy
       DOCKER_REGISTRY: localhost:5000
       MAKE_DECKHAND_IMAGES: true
       gate_scripts_relative_path: ../../airship/treasuremap
@@ -286,6 +268,7 @@
         - ./tools/deployment/airskiff/developer/025-start-artifactory.sh
         - ./tools/deployment/airskiff/developer/026-reduce-site.sh
         - ./tools/deployment/airskiff/developer/030-armada-bootstrap.sh
+        # - ./tools/deployment/airskiff/common/sleep.sh
         - ./tools/deployment/airskiff/developer/100-deploy-osh.sh
         - ./tools/deployment/airskiff/common/os-env.sh
         - ./tools/gate/wait-for-shipyard.sh
@@ -295,7 +278,7 @@
     name: deckhand-docker-build-gate
     timeout: 3600
     run: tools/gate/playbooks/docker-image-build.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     irrelevant-files: &non-code-files-template
       - ^.*\.rst$
       - ^doc/.*$
@@ -305,36 +288,36 @@
       - ^setup.cfg$
     vars:
       publish: false
-      DISTRO: ubuntu_focal
+      DISTRO: ubuntu_jammy
       tags:
         dynamic:
           patch_set: true
 
 - job:
-    name: deckhand-docker-publish-ubuntu_focal
+    name: deckhand-docker-publish-ubuntu_jammy
     description: |
       Runs on every merge, unless files in a dictionary below are changed.
       Builds and publishes container ubuntu images on quay.io with a set of tags
       listed in vars section. Waits in Zuul queue for a node (VM) assignment.
     timeout: 3600
     run: tools/gate/playbooks/docker-image-build.yaml
-    nodeset: treasuremap-airskiff-1node-ubuntu_focal
+    nodeset: treasuremap-airskiff-1node-ubuntu_jammy
     secrets:
       - airship_deckhand_quay_creds
     irrelevant-files: *non-code-files-template
     vars:
       publish: true
-      DISTRO: ubuntu_focal
+      DISTRO: ubuntu_jammy
       tags:
         dynamic:
           branch: true
           commit: true
         static:
           - latest
-          - airflow_2.8.2
+          - airflow_2.10.0
 
 - job:
-    name: deckhand-docker-tag-ubuntu_focal
+    name: deckhand-docker-tag-ubuntu_jammy
     description: |
       Runs on every merge when files in a dictionalry below are changed, and
       adds git commit id tag onto the ubuntu container image published on quay.io,
@@ -347,7 +330,7 @@
     secrets:
       - airship_deckhand_quay_creds
     vars:
-      DISTRO: ubuntu_focal
+      DISTRO: ubuntu_jammy
 
 
 - secret:
diff --git a/ChangeLog b/ChangeLog
index 61aafc90..fa54fb58 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,18 @@
 CHANGES
 =======
 
+* Update deploy-env parameters
+* Kubeadm based Airskiff gate
+* Fix deckhand-api dependences
 * Airflow stable 2.8.2
+* Airflow stable 2.8.1
+* Use deploy-env role
+* Rollback python deps update
+* Remove openstack-helm nodeset
+* Update helm toolkit reference
+* Deprecating the Ingress Class Annotation
+* Airflow stable 2.6.2
+* Deckhand updates
 * Restored ubuntu\_bionic image build
 * [focal] Fix requests.body attribute deprecation
 * Update airskiff deployment gate
diff --git a/Makefile b/Makefile
index 6da5acfe..a48501d1 100644
--- a/Makefile
+++ b/Makefile
@@ -25,10 +25,11 @@ USE_PROXY          ?= false
 PUSH_IMAGE         ?= false
 # use this variable for image labels added in internal build process
 LABEL              ?= org.airshipit.build=community
-DISTRO             ?= ubuntu_focal
+DISTRO             ?= ubuntu_jammy
+DISTRO_ALIAS	   ?= ubuntu_focal
 COMMIT             ?= $(shell git rev-parse HEAD)
 IMAGE              := ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}-${DISTRO}
-
+IMAGE_ALIAS              := ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}-${DISTRO_ALIAS}
 export
 
 # Build Deckhand Docker image for this project
@@ -87,6 +88,13 @@ else
 		$(_BASE_IMAGE_ARG) \
 		-f images/deckhand/Dockerfile.$(DISTRO) .
 endif
+ifneq ($(DISTRO), $(DISTRO_ALIAS))
+	docker tag $(IMAGE) $(IMAGE_ALIAS)
+endif
+ifeq ($(DOCKER_REGISTRY), localhost:5000)
+	docker push $(IMAGE)
+	docker push $(IMAGE_ALIAS)
+endif
 ifeq ($(PUSH_IMAGE), true)
 	docker push $(IMAGE)
 endif
diff --git a/bindep.txt b/bindep.txt
index 0b8697f6..ed469c27 100644
--- a/bindep.txt
+++ b/bindep.txt
@@ -10,6 +10,7 @@ libpq-dev [platform:dpkg]
 libsasl2-dev [platform:dpkg]
 libssl-dev [platform:dpkg]
 libre2-dev [platform:dpkg]
-postgresql [platform:dpkg]
+postgresql-14 [platform:dpkg]
 postgresql-contrib [platform:dpkg]
 ethtool [platform:dpkg]
+net-tools [platform:dpkg]
diff --git a/charts/deckhand/Chart.yaml b/charts/deckhand/Chart.yaml
index 72662b96..ad0a0871 100644
--- a/charts/deckhand/Chart.yaml
+++ b/charts/deckhand/Chart.yaml
@@ -15,7 +15,7 @@
 apiVersion: v1
 description: A Helm chart for Deckhand
 name: deckhand
-version: 0.2.1
+version: 0.2.2
 appVersion: 1.1.0
 keywords:
 - deckhand
diff --git a/charts/deckhand/values.yaml b/charts/deckhand/values.yaml
index 47ad1e42..1ebae27c 100644
--- a/charts/deckhand/values.yaml
+++ b/charts/deckhand/values.yaml
@@ -340,7 +340,7 @@ pod:
   security_context:
     deckhand:
       pod:
-        runAsUser: 65534
+        runAsUser: 1000
       container:
         deckhand_api:
           readOnlyRootFilesystem: true
@@ -354,7 +354,7 @@ pod:
           allowPrivilegeEscalation: false
     db_sync:
       pod:
-        runAsUser: 65534
+        runAsUser: 1000
       container:
         deckhand_db_sync:
           readOnlyRootFilesystem: true
diff --git a/deckhand/tests/functional/gabbits/document/document-crud-error-bucket-conflict.yaml b/deckhand/tests/functional/gabbits/document/document-crud-error-bucket-conflict.yaml
index d527bd9e..d489e14c 100644
--- a/deckhand/tests/functional/gabbits/document/document-crud-error-bucket-conflict.yaml
+++ b/deckhand/tests/functional/gabbits/document/document-crud-error-bucket-conflict.yaml
@@ -8,8 +8,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -17,16 +17,20 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create
     desc: Create initial documents
     PUT: /api/v1.0/buckets/a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/sample-doc.yaml
 
   - name: error
     desc: Trigger error case
     PUT: /api/v1.0/buckets/b/documents
     status: 409
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/sample-doc.yaml
diff --git a/deckhand/tests/functional/gabbits/document/document-crud-success-multi-bucket.yaml b/deckhand/tests/functional/gabbits/document/document-crud-success-multi-bucket.yaml
index 8bcf91d9..beb4b918 100644
--- a/deckhand/tests/functional/gabbits/document/document-crud-success-multi-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/document/document-crud-success-multi-bucket.yaml
@@ -16,8 +16,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -25,18 +25,22 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create_a
     desc: Create documents in one bucket (a)
     PUT: /api/v1.0/buckets/a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/layering-needs-substitution-source.yaml
 
   - name: verify_first_bucket
     desc: Verify document count and revisions
     GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[*].metadata.name:
@@ -56,6 +60,8 @@ tests:
     desc: Create documents in a second bucket (b)
     PUT: /api/v1.0/buckets/b/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/passphrase.yaml
 
   - name: verify_second_bucket
@@ -84,6 +90,8 @@ tests:
     desc: Verify initial revision is unchanged
     GET: /api/v1.0/revisions/$HISTORY['create_a'].$RESPONSE['$.[0].status.revision']/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[*].metadata.name:
diff --git a/deckhand/tests/functional/gabbits/document/document-crud-success-owned-documents.yaml b/deckhand/tests/functional/gabbits/document/document-crud-success-owned-documents.yaml
index d8f1d764..dc2f3df9 100644
--- a/deckhand/tests/functional/gabbits/document/document-crud-success-owned-documents.yaml
+++ b/deckhand/tests/functional/gabbits/document/document-crud-success-owned-documents.yaml
@@ -9,8 +9,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -18,18 +18,22 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/deckhand-owned-sample.yaml
 
   - name: verify_certificate_content
     desc: Verify Passphrase content
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents?schema=deckhand/Certificate/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].data: |
@@ -62,6 +66,8 @@ tests:
     desc: Verify Passphrase content
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents?schema=deckhand/Passphrase/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].data: hunter2
diff --git a/deckhand/tests/functional/gabbits/document/document-crud-success-single-bucket.yaml b/deckhand/tests/functional/gabbits/document/document-crud-success-single-bucket.yaml
index 7134c6e2..4cd62eba 100644
--- a/deckhand/tests/functional/gabbits/document/document-crud-success-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/document/document-crud-success-single-bucket.yaml
@@ -35,8 +35,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -44,12 +44,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: verify_initial
@@ -58,6 +60,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -80,17 +84,23 @@ tests:
     desc: Push a duplicate bucket of documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: verify_ignore
     desc: Verify duplicate documents were ignored
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -113,6 +123,8 @@ tests:
     desc: Update a single document, ignore other documents in the bucket
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-with-update.yaml
 
   - name: verify_update
@@ -121,6 +133,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -146,6 +160,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -169,6 +185,8 @@ tests:
     desc: Delete a single document
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-with-delete.yaml
 
   - name: verify_delete
@@ -177,6 +195,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[*].status.revision:
@@ -199,6 +219,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -224,6 +246,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
diff --git a/deckhand/tests/functional/gabbits/document/document-crud-success-unusual-documents.yaml b/deckhand/tests/functional/gabbits/document/document-crud-success-unusual-documents.yaml
index 0aab1fa5..86a8d49b 100644
--- a/deckhand/tests/functional/gabbits/document/document-crud-success-unusual-documents.yaml
+++ b/deckhand/tests/functional/gabbits/document/document-crud-success-unusual-documents.yaml
@@ -8,8 +8,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -17,18 +17,22 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/unusual-documents.yaml
 
   - name: verity_list_content
     desc: Verify list content
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents?schema=unusual/List/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].data:
@@ -40,6 +44,8 @@ tests:
     desc: Verify DictWithSecret content
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents?schema=unusual/DictWithSecret/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].data:
@@ -50,6 +56,8 @@ tests:
     desc: Verify String content
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents?schema=unusual/String/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].data: strings are useful
@@ -58,6 +66,8 @@ tests:
     desc: Verify Integer content
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents?schema=unusual/Integer/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].data: 9000
diff --git a/deckhand/tests/functional/gabbits/layering/layering-multiple-bucket.yaml b/deckhand/tests/functional/gabbits/layering/layering-multiple-bucket.yaml
index e44a5b26..af2ed5af 100644
--- a/deckhand/tests/functional/gabbits/layering/layering-multiple-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/layering/layering-multiple-bucket.yaml
@@ -8,8 +8,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -17,7 +17,7 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: add_bucket_layering
     desc: |-
@@ -25,6 +25,8 @@ tests:
      and site.
     PUT: /api/v1.0/buckets/layering/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -41,12 +43,16 @@ tests:
     desc: Create documents for bucket a
     PUT: /api/v1.0/buckets/a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-split-bucket-a.yaml
 
   - name: add_bucket_b
     desc: Create documents for bucket b
     PUT: /api/v1.0/buckets/b/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-split-bucket-b.yaml
 
   - name: verify_layering
@@ -57,6 +63,8 @@ tests:
         - schema
         - metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[0].schema: deckhand/LayeringPolicy/v1
diff --git a/deckhand/tests/functional/gabbits/layering/layering-policy-conflict.yaml b/deckhand/tests/functional/gabbits/layering/layering-policy-conflict.yaml
index e50fd6f2..0a6be4cb 100644
--- a/deckhand/tests/functional/gabbits/layering/layering-policy-conflict.yaml
+++ b/deckhand/tests/functional/gabbits/layering/layering-policy-conflict.yaml
@@ -7,8 +7,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -16,15 +16,19 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/passphrase.yaml
 
   - name: verify_missing_layering_policy_raises_conflict
     desc: Verify that attempting to render documents without a layering policy raises a 409
     GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/rendered-documents
     status: 409
+    response_headers:
+      content-type: application/x-yaml
diff --git a/deckhand/tests/functional/gabbits/layering/layering-single-bucket.yaml b/deckhand/tests/functional/gabbits/layering/layering-single-bucket.yaml
index 89591135..aae91f21 100644
--- a/deckhand/tests/functional/gabbits/layering/layering-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/layering/layering-single-bucket.yaml
@@ -8,8 +8,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -17,12 +17,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create_documents_for_validating_2_level_layering
     desc: Create documents for validating 2 levels of layering (global, site)
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-2-layers.yaml
 
   - name: verify_layering_2_layers
@@ -31,6 +33,8 @@ tests:
     query_parameters:
       sort: schema
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 2
       $.[0].schema: deckhand/LayeringPolicy/v1
@@ -47,12 +51,16 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers:
+      content-type: application/x-yaml
+    response_headers: {}
 
   - name: create_documents_for_validating_3_level_layering
     desc: Create documents for validating 3 levels of layering (global, region, site)
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: verify_layering_3_layers
@@ -61,6 +69,8 @@ tests:
     query_parameters:
       sort: schema
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 2
       $.[0].schema: deckhand/LayeringPolicy/v1
diff --git a/deckhand/tests/functional/gabbits/layering/layering-with-replacement-single-bucket.yaml b/deckhand/tests/functional/gabbits/layering/layering-with-replacement-single-bucket.yaml
index a8616b2c..0f46a5a1 100644
--- a/deckhand/tests/functional/gabbits/layering/layering-with-replacement-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/layering/layering-with-replacement-single-bucket.yaml
@@ -12,8 +12,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -21,13 +21,15 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create_documents_for_validating_replacement_of_sub_source
     desc: |
       Create documents for validating replacement of a substitution source.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -102,6 +104,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
 
@@ -128,6 +132,8 @@ tests:
       Create documents for validating replacement of a layering source.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -222,6 +228,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
 
diff --git a/deckhand/tests/functional/gabbits/layering/layering-with-substitution-single-bucket.yaml b/deckhand/tests/functional/gabbits/layering/layering-with-substitution-single-bucket.yaml
index 927f9e89..d0d7d381 100644
--- a/deckhand/tests/functional/gabbits/layering/layering-with-substitution-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/layering/layering-with-substitution-single-bucket.yaml
@@ -29,8 +29,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -38,7 +38,7 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize_layering_policy_base_case
     desc: |
@@ -47,6 +47,8 @@ tests:
       is abstract has layer region.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -66,6 +68,8 @@ tests:
       substitutions from secret documents.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/layering-and-substitution-sample.yaml
 
   - name: verify_base_case
@@ -74,6 +78,8 @@ tests:
     query_parameters:
       metadata.name: armada-chart-01
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: armada-chart-01
@@ -95,6 +101,8 @@ tests:
       Re-initailize the layering policy with 3 layers so that the top is empty
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -113,6 +121,8 @@ tests:
       Same case as before, except with a top empty layer.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/layering-and-substitution-sample.yaml
 
   - name: verify_empty_top_layer
@@ -121,6 +131,8 @@ tests:
     query_parameters:
       metadata.name: armada-chart-01
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: armada-chart-01
@@ -143,6 +155,8 @@ tests:
       empty
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -162,6 +176,8 @@ tests:
       Same case as before, except with multiple empty top layers.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/layering-and-substitution-sample.yaml
 
   - name: verify_multiple_empty_top_layers
@@ -170,6 +186,8 @@ tests:
     query_parameters:
       metadata.name: armada-chart-01
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: armada-chart-01
@@ -192,6 +210,8 @@ tests:
       layers.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -212,6 +232,8 @@ tests:
       Same case as before, except with multiple empty interspersed layers.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/layering-and-substitution-sample.yaml
 
   - name: verify_multiple_empty_interspersed_layers
@@ -220,6 +242,8 @@ tests:
     query_parameters:
       metadata.name: armada-chart-01
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: armada-chart-01
@@ -241,6 +265,8 @@ tests:
       Initailize the layering policy with 2 layers.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -260,6 +286,8 @@ tests:
       the correct substitution order.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/layering-and-substitution-dag-sample.yaml
 
   - name: verify_substitution_dependency_chain
@@ -275,6 +303,8 @@ tests:
       schema: armada/Chart/v1
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[0].metadata.name: armada-chart-01
diff --git a/deckhand/tests/functional/gabbits/replacement/multi-layer-replacement.yaml b/deckhand/tests/functional/gabbits/replacement/multi-layer-replacement.yaml
index eb8991e4..76ebdb9b 100644
--- a/deckhand/tests/functional/gabbits/replacement/multi-layer-replacement.yaml
+++ b/deckhand/tests/functional/gabbits/replacement/multi-layer-replacement.yaml
@@ -9,8 +9,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -18,7 +18,7 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: |-
@@ -30,6 +30,8 @@ tests:
 
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -114,6 +116,8 @@ tests:
       schema: armada/Chart/v1
       metadata.name: nova
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[*].metadata.name: nova
diff --git a/deckhand/tests/functional/gabbits/replacement/replacement.yaml b/deckhand/tests/functional/gabbits/replacement/replacement.yaml
index 38d930c6..cf189060 100644
--- a/deckhand/tests/functional/gabbits/replacement/replacement.yaml
+++ b/deckhand/tests/functional/gabbits/replacement/replacement.yaml
@@ -9,8 +9,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -18,12 +18,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/replacement.yaml
 
   - name: verify_replacement_document_receives_substitution
@@ -35,6 +37,8 @@ tests:
     query_parameters:
       schema: armada/Chart/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[*].metadata.name: example-chart-01
diff --git a/deckhand/tests/functional/gabbits/revision-deepdiff/revision-deepdiff-success.yaml b/deckhand/tests/functional/gabbits/revision-deepdiff/revision-deepdiff-success.yaml
index 9d8497fe..6cc4b00c 100644
--- a/deckhand/tests/functional/gabbits/revision-deepdiff/revision-deepdiff-success.yaml
+++ b/deckhand/tests/functional/gabbits/revision-deepdiff/revision-deepdiff-success.yaml
@@ -28,8 +28,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -37,12 +37,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create_a
     desc: Create documents in bucket_a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -70,6 +72,8 @@ tests:
     desc: Modify data value of doc-a document in bucket_a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -88,6 +92,8 @@ tests:
     desc: Verify deepdiff of modified data value of doc-a document
     GET: /api/v1.0/revisions/1/deepdiff/2
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].'bucket_a': modified
@@ -105,6 +111,8 @@ tests:
     desc: Verify deepdiff when revision=0 comparision_revision=0
     GET: /api/v1.0/revisions/0/deepdiff/0
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]: {}
@@ -113,6 +121,8 @@ tests:
     desc: Verify deepdiff when revision=0
     GET: /api/v1.0/revisions/0/deepdiff/2
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -122,6 +132,8 @@ tests:
     desc: Verify deepdiff when comparision_revision=0
     GET: /api/v1.0/revisions/2/deepdiff/0
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -131,6 +143,8 @@ tests:
     desc: Add new document doc-b in bucket_a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -161,6 +175,8 @@ tests:
     desc: Verify deepdiff of newly added doc-b document
     GET: /api/v1.0/revisions/2/deepdiff/3
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].'bucket_a': modified
@@ -171,6 +187,8 @@ tests:
     desc: Delete document doc-b in bucket_a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -189,6 +207,8 @@ tests:
     desc: Verify deepdiff of deleted doc-b document
     GET: /api/v1.0/revisions/3/deepdiff/4
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].'bucket_a': modified
@@ -199,6 +219,8 @@ tests:
     desc: Verify deepdiff of the same revisions
     GET: /api/v1.0/revisions/3/deepdiff/3
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].'bucket_a': unmodified
@@ -207,6 +229,8 @@ tests:
     desc: Verify deepdiff of different revisions of same document
     GET: /api/v1.0/revisions/2/deepdiff/4
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].'bucket_a': unmodified
@@ -215,6 +239,8 @@ tests:
     desc: Adding a new key in doc-a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -234,6 +260,8 @@ tests:
     desc: Verify deepdiff of addition of a new key in doc-a
     GET: /api/v1.0/revisions/4/deepdiff/5
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].'bucket_a': modified
@@ -249,6 +277,8 @@ tests:
     desc: Removing a key in doc-a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -267,6 +297,8 @@ tests:
     desc: Verify deepdiff of removal of a key in doc-a
     GET: /api/v1.0/revisions/5/deepdiff/6
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].'bucket_a': modified
@@ -282,8 +314,11 @@ tests:
     desc: Verify deepdiff when invalid revision id pass in input
     GET: /api/v1.0/revisions/test/deepdiff/2
     status: 400
+    response_headers:
+      content-type: application/x-yaml
 
   - name: verify_revision_not_found
     desc: Verify deepdiff when input revision id is not found
     GET: /api/v1.0/revisions/1000/deepdiff/2
     status: 404
+    response_headers: {}
diff --git a/deckhand/tests/functional/gabbits/revision-diff/revision-diff-rollback-null-success.yaml b/deckhand/tests/functional/gabbits/revision-diff/revision-diff-rollback-null-success.yaml
index b161a089..8abddc8b 100644
--- a/deckhand/tests/functional/gabbits/revision-diff/revision-diff-rollback-null-success.yaml
+++ b/deckhand/tests/functional/gabbits/revision-diff/revision-diff-rollback-null-success.yaml
@@ -12,8 +12,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -21,12 +21,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create_a
     desc: Create documents in bucket a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -45,11 +47,15 @@ tests:
     desc: Rollback to revision 0
     POST: /api/v1.0/rollback/0
     status: 201
+    response_headers:
+      content-type: application/x-yaml
 
   - name: verify_null_with_rollback_to_null
     desc: Validates response for null diff rollback to null revision
     GET: /api/v1.0/revisions/0/diff/$HISTORY['rollback_to_null'].$RESPONSE['$.[0].id']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]: {}
@@ -58,6 +64,8 @@ tests:
     desc: Validates response for rollback to null revision with null revision
     GET: /api/v1.0/revisions/$HISTORY['rollback_to_null'].$RESPONSE['$.[0].id']/diff/0
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]: {}
@@ -66,6 +74,8 @@ tests:
     desc: Create documents in bucket b
     PUT: /api/v1.0/buckets/bucket_b/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -84,6 +94,8 @@ tests:
     desc: Validates response for diff with rollack to null and create bucket b
     GET: /api/v1.0/revisions/$HISTORY['rollback_to_null'].$RESPONSE['$.[0].id']/diff/$HISTORY['create_b'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -93,6 +105,8 @@ tests:
     desc: Validates response for diff with rollack to null and create bucket b
     GET: /api/v1.0/revisions/$HISTORY['create_b'].$RESPONSE['$.[0].status.revision']/diff/$HISTORY['rollback_to_null'].$RESPONSE['$.[0].id']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
diff --git a/deckhand/tests/functional/gabbits/revision-diff/revision-diff-success.yaml b/deckhand/tests/functional/gabbits/revision-diff/revision-diff-success.yaml
index 5393251a..a9c3cef9 100644
--- a/deckhand/tests/functional/gabbits/revision-diff/revision-diff-success.yaml
+++ b/deckhand/tests/functional/gabbits/revision-diff/revision-diff-success.yaml
@@ -18,8 +18,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -27,12 +27,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create_a
     desc: Create documents in bucket a
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -51,6 +53,8 @@ tests:
     desc: Create documents in bucket b
     PUT: /api/v1.0/buckets/bucket_b/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -69,6 +73,8 @@ tests:
     desc: Create documents in bucket c
     PUT: /api/v1.0/buckets/bucket_c/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -87,6 +93,8 @@ tests:
     desc: Create documents in bucket d
     PUT: /api/v1.0/buckets/bucket_d/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -105,6 +113,8 @@ tests:
     desc: Validates response for null diff for first revision
     GET: /api/v1.0/revisions/0/diff/$HISTORY['create_a'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -114,6 +124,8 @@ tests:
     desc: Validates response for null diff for second revision
     GET: /api/v1.0/revisions/0/diff/$HISTORY['create_b'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -124,6 +136,8 @@ tests:
     desc: Validates response for null diff for third revision
     GET: /api/v1.0/revisions/0/diff/$HISTORY['create_c'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -135,6 +149,8 @@ tests:
     desc: Validates response for null diff for fourth revision
     GET: /api/v1.0/revisions/0/diff/$HISTORY['create_d'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -147,6 +163,8 @@ tests:
     desc: Validates response for null diff for fourth revision
     GET: /api/v1.0/revisions/0/diff/0
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]: {}
@@ -155,6 +173,8 @@ tests:
     desc: Update document in bucket c
     PUT: /api/v1.0/buckets/bucket_c/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -173,6 +193,8 @@ tests:
     desc: Validates response for null diff between the first 4 buckets and single update
     GET: /api/v1.0/revisions/$HISTORY['create_d'].$RESPONSE['$.[0].status.revision']/diff/$HISTORY['update_c'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -185,12 +207,16 @@ tests:
     desc: Delete documents from bucket b
     PUT: /api/v1.0/buckets/bucket_b/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: ""
 
   - name: create_mistake
     desc: Create documents in bucket mistake
     PUT: /api/v1.0/buckets/bucket_mistake/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -208,6 +234,8 @@ tests:
     desc: Delete documents from bucket mistake
     PUT: /api/v1.0/buckets/bucket_mistake/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: ""
     # Verification for whether a bucket_name was returned even though all the
     # documents for this bucket were deleted.
@@ -219,6 +247,8 @@ tests:
     desc: Validates response for deletion between the last 2 revisions
     GET: /api/v1.0/revisions/$HISTORY['create_mistake'].$RESPONSE['$.[0].status.revision']/diff/$HISTORY['delete_mistake'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -231,6 +261,8 @@ tests:
     desc: Create documents in bucket e
     PUT: /api/v1.0/buckets/bucket_e/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: example/Kind/v1
@@ -249,6 +281,8 @@ tests:
     desc: Validates response for null diff between the first 4 buckets and now
     GET: /api/v1.0/revisions/$HISTORY['create_d'].$RESPONSE['$.[0].status.revision']/diff/$HISTORY['create_e'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
@@ -262,6 +296,8 @@ tests:
     desc: Validates response for null diff and now
     GET: /api/v1.0/revisions/0/diff/$HISTORY['create_e'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0]:
diff --git a/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters-negative.yaml b/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters-negative.yaml
index 0d87bc31..6d9ff469 100644
--- a/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters-negative.yaml
+++ b/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters-negative.yaml
@@ -6,8 +6,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -15,12 +15,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: filter_by_schema_partial_namespace
@@ -29,6 +31,8 @@ tests:
     query_parameters:
       schema: exam
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths: null
 
   - name: filter_by_schema_partial_kind
@@ -37,6 +41,8 @@ tests:
     query_parameters:
       schema: example/Ki
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths: null
 
   - name: filter_by_schema_incorrect_version
@@ -45,6 +51,8 @@ tests:
     query_parameters:
       schema: example/Kind/v2
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths: null
 
   - name: filter_by_limit_illegal_value
@@ -53,3 +61,5 @@ tests:
     query_parameters:
       limit: 'illegal'
     status: 400
+    response_headers:
+      content-type: application/x-yaml
diff --git a/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters.yaml b/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters.yaml
index 097dbc66..8ba5bd22 100644
--- a/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters.yaml
+++ b/deckhand/tests/functional/gabbits/revision-documents/revision-documents-filters.yaml
@@ -10,8 +10,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -19,12 +19,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: filter_by_schema
@@ -33,6 +35,8 @@ tests:
     query_parameters:
       schema: deckhand/LayeringPolicy/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: layering-policy
@@ -44,6 +48,8 @@ tests:
     query_parameters:
       schema: example
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[0].metadata.name: global-1234
@@ -59,6 +65,8 @@ tests:
     query_parameters:
       schema: example/Kind
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[0].metadata.name: global-1234
@@ -74,6 +82,8 @@ tests:
     query_parameters:
       metadata.name: layering-policy
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: layering-policy
@@ -84,6 +94,8 @@ tests:
     query_parameters:
       metadata.label: key1=value1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 2
       $.[*].metadata.name:
@@ -99,6 +111,8 @@ tests:
     query_parameters:
       metadata.layeringDefinition.abstract: true
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 2
       $.[*].metadata.name:
@@ -114,6 +128,8 @@ tests:
     query_parameters:
       metadata.layeringDefinition.layer: site
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: site-1234
@@ -126,6 +142,8 @@ tests:
       status.bucket: mop
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -145,6 +163,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -159,6 +179,8 @@ tests:
     query_parameters:
       sort: schema
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].schema:
@@ -175,6 +197,8 @@ tests:
         - schema
         - metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].schema:
@@ -196,6 +220,8 @@ tests:
         - metadata.name
         - schema
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -218,6 +244,8 @@ tests:
         - schema
       limit: 2
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 2
       $.[*].metadata.name:
diff --git a/deckhand/tests/functional/gabbits/revision-documents/revision-documents-multiple-filters.yaml b/deckhand/tests/functional/gabbits/revision-documents/revision-documents-multiple-filters.yaml
index ef749c46..684a7275 100644
--- a/deckhand/tests/functional/gabbits/revision-documents/revision-documents-multiple-filters.yaml
+++ b/deckhand/tests/functional/gabbits/revision-documents/revision-documents-multiple-filters.yaml
@@ -9,8 +9,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -18,12 +18,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: filter_by_multiple_different_filters_expect_site
@@ -33,6 +35,8 @@ tests:
       metadata.layeringDefinition.layer: site
       metadata.layeringDefinition.abstract: false
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: site-1234
@@ -46,6 +50,8 @@ tests:
       metadata.layeringDefinition.layer: region
       metadata.layeringDefinition.abstract: true
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: region-1234
@@ -60,6 +66,8 @@ tests:
         - site
         - region
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 2
       $.[*].metadata.name:
@@ -77,6 +85,8 @@ tests:
         - foo=bar
         - baz=qux
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: site-1234
diff --git a/deckhand/tests/functional/gabbits/revision-rollback/rollback-success-single-bucket.yaml b/deckhand/tests/functional/gabbits/revision-rollback/rollback-success-single-bucket.yaml
index 2ed25511..4339e143 100644
--- a/deckhand/tests/functional/gabbits/revision-rollback/rollback-success-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/revision-rollback/rollback-success-single-bucket.yaml
@@ -15,8 +15,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -24,30 +24,38 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: update_single_document
     desc: Update a single document, ignore other documents in the bucket
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-with-update.yaml
 
   - name: delete_document
     desc: Delete a single document
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-with-delete.yaml
 
   - name: rollback
     desc: Rollback to revision 1
     POST: /api/v1.0/rollback/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
     status: 201
+    response_headers:
+      content-type: application/x-yaml
 
   # Verify document history
   - name: verify_revision_1
@@ -56,6 +64,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -85,6 +95,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
@@ -114,6 +126,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 3
       $.[*].metadata.name:
@@ -139,6 +153,8 @@ tests:
     query_parameters:
       sort: metadata.name
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 4
       $.[*].metadata.name:
diff --git a/deckhand/tests/functional/gabbits/revision-tag/revision-tag-success.yaml b/deckhand/tests/functional/gabbits/revision-tag/revision-tag-success.yaml
index 881e6086..eaa17c94 100644
--- a/deckhand/tests/functional/gabbits/revision-tag/revision-tag-success.yaml
+++ b/deckhand/tests/functional/gabbits/revision-tag/revision-tag-success.yaml
@@ -26,8 +26,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -35,18 +35,22 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: create_tag
     desc: Create a tag for the revision
     POST: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/tags/foo
     status: 201
+    response_headers:
+      content-type: application/x-yaml
 
     response_multidoc_jsonpaths:
       $.[0].`len`: 1
@@ -56,6 +60,8 @@ tests:
     desc: Verify showing created tag works
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags/foo
     status: 200
+    response_headers:
+      content-type: application/x-yaml
 
     response_multidoc_jsonpaths:
       $.`len`: 1
@@ -65,6 +71,8 @@ tests:
     desc: Verify showing created tag on revision detail
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].tags.`len`: 1
@@ -84,6 +92,8 @@ tests:
     desc: Create a tag with data for the revision
     POST: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags/bar
     status: 201
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/sample-tag-data.yaml
 
     response_multidoc_jsonpaths:
@@ -97,6 +107,8 @@ tests:
     desc: Verify listing tags contains created tag
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags
     status: 200
+    response_headers:
+      content-type: application/x-yaml
 
     response_multidoc_jsonpaths:
       $.`len`: 1
@@ -111,6 +123,8 @@ tests:
     desc: Verify showing created tag on revision detail
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].tags.`len`: 2
@@ -132,12 +146,14 @@ tests:
     desc: Verify deleting tag works
     DELETE: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags/foo
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: verify_tag_delete
     desc: Verify listing tags contains non-deleted tag
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags
     status: 200
+    response_headers:
+      content-type: application/x-yaml
 
     response_multidoc_jsonpaths:
       $.`len`: 1
@@ -150,6 +166,8 @@ tests:
     desc: Verify not showing deleted tag on revision detail
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].tags.`len`: 1
@@ -161,6 +179,8 @@ tests:
     desc: Verify not showing deleted tag on revision list
     GET: /api/v1.0/revisions
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.[0].results.`len`: 1
       $.[0].results[0].tags.`len`: 1
@@ -170,12 +190,14 @@ tests:
     desc: Verify deleting tag works
     DELETE: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: verify_revision_detail_deleted_all
     desc: Verify empty tags on revision detail
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].tags: {}
@@ -184,6 +206,8 @@ tests:
     desc: Verify empty tags on revision list
     GET: /api/v1.0/revisions
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.[0].results.`len`: 1
       $.[0].results[0].tags: []
@@ -192,6 +216,8 @@ tests:
     desc: Verify all tags have been deleted
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags
     status: 200
+    response_headers:
+      content-type: application/x-yaml
 
     response_multidoc_jsonpaths:
       $.`len`: 1
diff --git a/deckhand/tests/functional/gabbits/revision/revision-crud-success-single-bucket.yaml b/deckhand/tests/functional/gabbits/revision/revision-crud-success-single-bucket.yaml
index 6016d835..37c44210 100644
--- a/deckhand/tests/functional/gabbits/revision/revision-crud-success-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/revision/revision-crud-success-single-bucket.yaml
@@ -9,8 +9,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -18,7 +18,7 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
     # Validates whether creating a revision works.
     # Required parameters:
@@ -28,6 +28,8 @@ tests:
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
     # Validates whether revision was created.
@@ -38,6 +40,8 @@ tests:
     desc: Verify that revision was created for document above
     GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].id: $HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
@@ -50,6 +54,8 @@ tests:
     desc: Verify that revision was created for document above
     GET: /api/v1.0/revisions
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].count: 1
@@ -64,7 +70,7 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
     # Validates whether revision was deleted.
     # Required parameters:
@@ -74,3 +80,4 @@ tests:
     desc: Verify that the revision was deleted
     GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
     status: 404
+    response_headers: {}
\ No newline at end of file
diff --git a/deckhand/tests/functional/gabbits/revision/revision-filters.yaml b/deckhand/tests/functional/gabbits/revision/revision-filters.yaml
index c1cb4649..16a998cc 100644
--- a/deckhand/tests/functional/gabbits/revision/revision-filters.yaml
+++ b/deckhand/tests/functional/gabbits/revision/revision-filters.yaml
@@ -7,8 +7,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -16,35 +16,45 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create first revision for testing
     PUT: /api/v1.0/buckets/bucket_a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-layering-sample-3-layers.yaml
 
   - name: initialize_again
     desc:  Create second revision for testing
     PUT: /api/v1.0/buckets/bucket_b/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/sample-doc.yaml
 
   - name: initialize_once_again
     desc:  Create third revision for testing
     PUT: /api/v1.0/buckets/bucket_c/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/sample-schema.yaml
 
   - name: create_tag
     desc: Create a tag for testing filtering a revision by tag
     POST: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags/foo
     status: 201
+    response_headers:
+      content-type: application/x-yaml
 
   - name: create_another_tag
     desc: Create another tag for testing filtering a revision by many tags
     POST: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/tags/bar
     status: 201
+    response_headers:
+      content-type: application/x-yaml
 
   - name: verify_revision_list_for_one_valid_filter
     desc: Verify that revision is returned for filter tag="foo"
@@ -52,6 +62,8 @@ tests:
     query_parameters:
       tag: foo
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].count: 1
@@ -70,6 +82,8 @@ tests:
         - foo
         - bar
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].count: 1
@@ -85,6 +99,8 @@ tests:
     query_parameters:
       tag: baz
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].count: 0
@@ -96,6 +112,8 @@ tests:
     query_parameters:
       sort: id
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.[0].results.`len`: 3
       $.[0].results[*].id:
@@ -110,6 +128,8 @@ tests:
       sort: id
       order: desc
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.[0].results.`len`: 3
       $.[0].results[*].id:
diff --git a/deckhand/tests/functional/gabbits/substitution/substitution-chained-single-bucket.yaml b/deckhand/tests/functional/gabbits/substitution/substitution-chained-single-bucket.yaml
index 6cba27c1..08e599b3 100644
--- a/deckhand/tests/functional/gabbits/substitution/substitution-chained-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/substitution/substitution-chained-single-bucket.yaml
@@ -8,8 +8,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -17,12 +17,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create
     desc: Create documents.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/chained-substitution.yaml
 
   - name: verify_intermediate_substitution
@@ -31,6 +33,8 @@ tests:
     query_parameters:
       sort: schema
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     query_parameters:
       schema: example/Middle/v1
     response_multidoc_jsonpaths:
@@ -44,6 +48,8 @@ tests:
     query_parameters:
       sort: schema
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     query_parameters:
       schema: example/Dest/v1
     response_multidoc_jsonpaths:
diff --git a/deckhand/tests/functional/gabbits/substitution/substitution-multiple-bucket.yaml b/deckhand/tests/functional/gabbits/substitution/substitution-multiple-bucket.yaml
index 815eb5db..81102448 100644
--- a/deckhand/tests/functional/gabbits/substitution/substitution-multiple-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/substitution/substitution-multiple-bucket.yaml
@@ -8,8 +8,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -17,18 +17,22 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: add_bucket_a
     desc: Create documents for bucket a
     PUT: /api/v1.0/buckets/a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-substitution-sample-split-bucket-a.yaml
 
   - name: add_bucket_b
     desc: Create documents for bucket b
     PUT: /api/v1.0/buckets/b/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-substitution-sample-split-bucket-b.yaml
 
   - name: verify_substitutions
@@ -37,6 +41,8 @@ tests:
     query_parameters:
       schema: armada/Chart/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[*].metadata.name: example-chart-01
diff --git a/deckhand/tests/functional/gabbits/substitution/substitution-results-in-none-bug.yaml b/deckhand/tests/functional/gabbits/substitution/substitution-results-in-none-bug.yaml
index 37ec4fb4..dc648373 100644
--- a/deckhand/tests/functional/gabbits/substitution/substitution-results-in-none-bug.yaml
+++ b/deckhand/tests/functional/gabbits/substitution/substitution-results-in-none-bug.yaml
@@ -7,8 +7,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -16,7 +16,7 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize_documents_with_missing_src_substitution_path
     desc: |
@@ -24,6 +24,8 @@ tests:
       a path via `src.path` that doesn't exist in the source document.
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/substitution-results-in-none-bug.yaml
 
   - name: verify_bad_request_raised
@@ -34,3 +36,5 @@ tests:
     query_parameters:
       schema: deckhand/Dest/v1
     status: 400
+    response_headers:
+      content-type: application/x-yaml
diff --git a/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket-generic.yaml b/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket-generic.yaml
index 5003e46a..ffe4f902 100644
--- a/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket-generic.yaml
+++ b/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket-generic.yaml
@@ -9,8 +9,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -18,12 +18,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-substitution-generic-sample.yaml
 
   - name: verify_substitutions
@@ -32,6 +34,8 @@ tests:
     query_parameters:
       schema: armada/Chart/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[0].metadata.name: example-chart-01
diff --git a/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket.yaml b/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket.yaml
index b281b5fc..eafa9f72 100644
--- a/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket.yaml
+++ b/deckhand/tests/functional/gabbits/substitution/substitution-single-bucket.yaml
@@ -7,8 +7,8 @@
 defaults:
   request_headers:
     content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -16,12 +16,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: initialize
     desc: Create initial documents
     PUT: /api/v1.0/buckets/mop/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: <@resources/design-doc-substitution-sample.yaml
 
   - name: verify_substitutions
@@ -30,6 +32,8 @@ tests:
     query_parameters:
       schema: armada/Chart/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[*].metadata.name: example-chart-01
diff --git a/deckhand/tests/functional/gabbits/substitution/substitution-source-feeds-multi-dest.yaml b/deckhand/tests/functional/gabbits/substitution/substitution-source-feeds-multi-dest.yaml
index 613ef89d..ffbf468b 100644
--- a/deckhand/tests/functional/gabbits/substitution/substitution-source-feeds-multi-dest.yaml
+++ b/deckhand/tests/functional/gabbits/substitution/substitution-source-feeds-multi-dest.yaml
@@ -7,18 +7,18 @@
 #    expected destination paths.
 
 defaults:
-  request_headers:
-    content-type: application/x-yaml
-  response_headers:
-    content-type: application/x-yaml
-  verbose: true
+    request_headers:
+      content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
+    verbose: true
 
 tests:
   - name: purge
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: add_substitution_source_with_single_source_multi_dest
     desc: |-
@@ -26,6 +26,8 @@ tests:
       multiple destination paths.
     PUT: /api/v1.0/buckets/a/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -70,6 +72,8 @@ tests:
     query_parameters:
       schema: armada/Chart/v1
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     response_multidoc_jsonpaths:
       $.`len`: 1
       $.[*].metadata.name: example-chart-01
diff --git a/deckhand/tests/integration/gabbits/document-crud-secret.yaml b/deckhand/tests/integration/gabbits/document-crud-secret.yaml
index b32a782d..dd6bdc78 100644
--- a/deckhand/tests/integration/gabbits/document-crud-secret.yaml
+++ b/deckhand/tests/integration/gabbits/document-crud-secret.yaml
@@ -16,7 +16,7 @@ tests:
     status: 204
     request_headers:
       content-type: application/x-yaml
-    response_headers: null
+    response_headers: {}
 
   - name: create_encrypted_passphrase
     desc: Create passphrase with storagePolicy=encrypted
diff --git a/deckhand/tests/integration/gabbits/document-render-secret-edge-cases.yaml b/deckhand/tests/integration/gabbits/document-render-secret-edge-cases.yaml
index c07fd95e..1eb26ce8 100644
--- a/deckhand/tests/integration/gabbits/document-render-secret-edge-cases.yaml
+++ b/deckhand/tests/integration/gabbits/document-render-secret-edge-cases.yaml
@@ -22,7 +22,7 @@ tests:
     status: 204
     request_headers:
       content-type: application/x-yaml
-    response_headers: null
+    response_headers: {}
 
   - name: create_encrypted_passphrase_empty_payload_skips
     desc: |
diff --git a/deckhand/tests/integration/gabbits/document-render-secret.yaml b/deckhand/tests/integration/gabbits/document-render-secret.yaml
index abccfd43..06c2911c 100644
--- a/deckhand/tests/integration/gabbits/document-render-secret.yaml
+++ b/deckhand/tests/integration/gabbits/document-render-secret.yaml
@@ -7,8 +7,8 @@ defaults:
   request_headers:
     content-type: application/x-yaml
     X-Auth-Token: $ENVIRON['TEST_AUTH_TOKEN']
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -16,12 +16,14 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: create_encrypted_passphrase
     desc: Create passphrase with storagePolicy=encrypted
     PUT: /api/v1.0/buckets/secret/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -51,6 +53,8 @@ tests:
     desc: Verify that the rendering the document returns the secret payload.
     GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/rendered-documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     query_parameters:
       cleartext-secrets: true
       metadata.name: my-passphrase
diff --git a/deckhand/tests/integration/gabbits/document-substitution-secret-generic.yaml b/deckhand/tests/integration/gabbits/document-substitution-secret-generic.yaml
index 7562ec5c..f4e76dba 100644
--- a/deckhand/tests/integration/gabbits/document-substitution-secret-generic.yaml
+++ b/deckhand/tests/integration/gabbits/document-substitution-secret-generic.yaml
@@ -11,8 +11,8 @@ defaults:
   request_headers:
     content-type: application/x-yaml
     X-Auth-Token: $ENVIRON['TEST_AUTH_TOKEN']
-  response_headers:
-    content-type: application/x-yaml
+  # response_headers:
+  #   content-type: application/x-yaml
   verbose: true
 
 tests:
@@ -20,7 +20,7 @@ tests:
     desc: Begin testing from known state.
     DELETE: /api/v1.0/revisions
     status: 204
-    response_headers: null
+    response_headers: {}
 
   - name: encrypt_generic_document_for_secret_substitution
     desc: |
@@ -28,6 +28,8 @@ tests:
       substitution source with storagePolicy=encrypted.
     PUT: /api/v1.0/buckets/secret/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     data: |-
       ---
       schema: deckhand/LayeringPolicy/v1
@@ -72,6 +74,8 @@ tests:
     desc: Verify that secret ref was created for example-armada-cert among multiple created documents.
     GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     query_parameters:
       metadata.name: example-armada-cert
       cleartext-secrets: 'true'
@@ -99,6 +103,8 @@ tests:
     desc: Verify secret payload is injected in destination document as well as example-armada-cert.
     GET: /api/v1.0/revisions/$HISTORY['encrypt_generic_document_for_secret_substitution'].$RESPONSE['$.[0].status.revision']/rendered-documents
     status: 200
+    response_headers:
+      content-type: application/x-yaml
     query_parameters:
       cleartext-secrets: true
       metadata.name:
diff --git a/deckhand/tests/integration/gabbits/document-substitution-secret.yaml b/deckhand/tests/integration/gabbits/document-substitution-secret.yaml
index 8e129039..eec345f4 100644
--- a/deckhand/tests/integration/gabbits/document-substitution-secret.yaml
+++ b/deckhand/tests/integration/gabbits/document-substitution-secret.yaml
@@ -19,7 +19,7 @@ tests:
     status: 204
     request_headers:
       content-type: application/x-yaml
-    response_headers: null
+    response_headers: {}
 
   - name: create_documents_for_secret_substitution
     desc: Create documents with substitution source with storagePolicy=encrypted
diff --git a/deckhand/tests/integration/gabbits/revision-delete-all-secrets.yaml b/deckhand/tests/integration/gabbits/revision-delete-all-secrets.yaml
index e14fab4e..ee3f183b 100644
--- a/deckhand/tests/integration/gabbits/revision-delete-all-secrets.yaml
+++ b/deckhand/tests/integration/gabbits/revision-delete-all-secrets.yaml
@@ -14,7 +14,7 @@ tests:
     request_headers:
       content-type: application/x-yaml
       X-Auth-Token: $ENVIRON['TEST_AUTH_TOKEN']
-    response_headers: null
+    response_headers: {}
 
   - name: create_encrypted_passphrase
     desc: Create passphrase with storagePolicy=encrypted
@@ -72,7 +72,7 @@ tests:
     request_headers:
       content-type: application/x-yaml
       X-Auth-Token: $ENVIRON['TEST_AUTH_TOKEN']
-    response_headers: null
+    response_headers: {}
 
   - name: validate_all_secrets_deleted_from_barbican
     desc: |-
diff --git a/entrypoint.sh b/entrypoint.sh
index 0751be80..91a086c6 100755
--- a/entrypoint.sh
+++ b/entrypoint.sh
@@ -56,6 +56,8 @@ if [ "$1" = 'server' ]; then
         --module deckhand.cmd
 elif [ "$1" = 'alembic' ]; then
     exec alembic ${@:2}
+elif [ "$1" = 'shell' ]; then
+    exec bash
 else
     echo "Valid commands are 'alembic <command>' and 'server'"
 fi
diff --git a/images/deckhand/Dockerfile.ubuntu_jammy b/images/deckhand/Dockerfile.ubuntu_jammy
new file mode 100644
index 00000000..13d4102e
--- /dev/null
+++ b/images/deckhand/Dockerfile.ubuntu_jammy
@@ -0,0 +1,108 @@
+# Copyright 2018 AT&T Intellectual Property.  All other rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ARG FROM=ubuntu:jammy
+FROM ${FROM}
+
+LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode'
+LABEL org.opencontainers.image.url='https://airshipit.org'
+LABEL org.opencontainers.image.documentation='https://airship-deckhand.readthedocs.org'
+LABEL org.opencontainers.image.source='https://opendev.org/airship/deckhand'
+LABEL org.opencontainers.image.vendor='The Airship Authors'
+LABEL org.opencontainers.image.licenses='Apache-2.0'
+
+ENV DEBIAN_FRONTEND noninteractive
+ENV container docker
+ENV PORT 9000
+
+# Expose port 9000 for application
+EXPOSE $PORT
+
+RUN set -x && \
+    apt-get update && apt-get upgrade -y && \
+    apt-get -y install \
+    automake \
+    ca-certificates \
+    curl \
+    g++ \
+    gcc \
+    git \
+    libffi-dev \
+    libpq-dev \
+    libssl-dev \
+    libtool \
+    make \
+    netbase \
+    netcat \
+    python3 \
+    python3-dateutil \
+    python3-dev \
+    python3-pip \
+    python3-setuptools \
+    --no-install-recommends \
+    && python3 -m pip install -U pip \
+    && apt-get clean \
+    && rm -rf \
+        /var/lib/apt/lists/* \
+        /tmp/* \
+        /var/tmp/* \
+        /usr/share/man \
+        /usr/share/doc \
+        /usr/share/doc-base
+
+# Install LibYAML
+ENV LD_LIBRARY_PATH=/usr/local/lib
+
+ARG LIBYAML_VERSION=0.2.5
+RUN set -ex \
+    && git clone https://github.com/yaml/libyaml.git \
+    && cd libyaml \
+    && git checkout $LIBYAML_VERSION \
+    && ./bootstrap \
+    && ./configure \
+    && make \
+    && make install \
+    && cd .. \
+    && rm -fr libyaml
+
+# Create deckhand user
+RUN useradd -ms /bin/bash deckhand
+
+# Clone the deckhand repository
+COPY . /home/deckhand/
+
+# Change permissions
+RUN chown -R deckhand: /home/deckhand \
+    && chmod +x /home/deckhand/entrypoint.sh
+
+# Set work directory and install dependencies
+WORKDIR /home/deckhand
+RUN pip3 install --no-cache-dir -r requirements-frozen.txt
+
+# Setting deckhand version for BPR
+ENV PBR_VERSION 1.1
+
+
+# RUN python3 setup.py install --verbose
+RUN pip3 install -e . --verbose --use-pep517 \
+    && echo "/home/deckhand" \
+        > /usr/local/lib/python3.10/dist-packages/deckhand.pth
+
+# Set user to deckhand
+USER deckhand
+
+# Execute entrypoint
+ENTRYPOINT ["/home/deckhand/entrypoint.sh"]
+
+CMD ["server"]
diff --git a/requirements-frozen.txt b/requirements-frozen.txt
index a3cfdfef..da87b596 100644
--- a/requirements-frozen.txt
+++ b/requirements-frozen.txt
@@ -1,54 +1,51 @@
-alembic==1.13.1
+alembic==1.13.2
 amqp==5.2.0
-attrs==23.2.0
+attrs==24.2.0
 autopage==0.5.2
-backports.zoneinfo==0.2.1
 barbican==16.0.0
-bcrypt==4.1.2
-Beaker==1.12.1
-cachetools==5.3.2
-castellan==4.4.0
-certifi==2024.2.2
-cffi==1.16.0
+bcrypt==4.2.0
+Beaker==1.13.0
+cachetools==5.5.0
+castellan==5.1.1
+certifi==2024.8.30
+cffi==1.17.1
 charset-normalizer==3.3.2
-cliff==4.6.0
+cliff==4.7.0
 cmd2==2.4.3
-cryptography==41.0.7
+cryptography==42.0.8
 debtcollector==3.0.0
 decorator==5.1.1
-deepdiff==6.7.1
+deepdiff==8.0.1
 dnspython==2.6.1
-dogpile.cache==1.3.2
-eventlet==0.35.2
+dogpile.cache==1.3.3
+eventlet==0.37.0
 falcon==3.1.3
 fasteners==0.19
 fixtures==4.1.0
 futurist==3.0.0
-greenlet==3.0.3
+greenlet==3.1.0
 html5lib==0.9999999
 httpexceptor==1.4.0
-idna==3.6
-importlib-metadata==6.11.0
-importlib-resources==5.13.0
+idna==3.10
 iso8601==2.1.0
-Jinja2==3.1.3
+Jinja2==3.1.4
 jsonpath-ng==1.6.1
-jsonpickle==3.0.3
-jsonschema==4.21.1
+jsonpickle==3.3.0
+jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 keystoneauth1==5.1.2
 keystonemiddleware==10.2.0
-kombu==5.3.5
+kombu==5.4.1
 ldap3==2.9.1
 logutils==0.3.5
-Mako==1.3.2
+Mako==1.3.5
 MarkupSafe==2.1.5
-microversion-parse==1.0.1
-msgpack==1.0.7
-netaddr==1.2.1
+microversion-parse==2.0.0
+msgpack==1.1.0
+netaddr==1.3.0
 netifaces==0.11.0
-networkx==3.1
-ordered-set==4.1.0
+networkx==3.3
+orderly-set==5.2.2
 os-service-types==1.7.0
 oslo.cache==3.3.1
 oslo.concurrency==5.1.1
@@ -66,63 +63,60 @@ oslo.service==3.1.1
 oslo.upgradecheck==2.1.1
 oslo.utils==6.1.0
 oslo.versionedobjects==3.1.0
-packaging==23.2
-Paste==3.7.1
+packaging==24.1
+Paste==3.10.1
 PasteDeploy==3.1.0
-PasteScript==3.4.0
-pbr==6.0.0
+PasteScript==3.6.0
+pbr==6.1.0
 pecan==1.5.1
-pip==23.2.1
-pkgutil_resolve_name==1.3.10
+pip==24.1
 ply==3.11
-prettytable==3.10.0
+prettytable==3.11.0
 prometheus_client==0.20.0
 psycopg2-binary==2.9.9
-pyasn1==0.5.1
+pyasn1==0.6.1
 pycadf==3.1.1
-pycparser==2.21
+pycparser==2.22
 pylibyaml==0.1.0
-pyOpenSSL==24.0.0
-pyparsing==3.1.1
-pyperclip==1.8.2
+pyOpenSSL==24.2.1
+pyparsing==3.1.4
+pyperclip==1.9.0
 python-barbicanclient==5.5.0
-python-dateutil==2.8.2
+python-dateutil==2.9.0.post0
 python-keystoneclient==5.1.0
 python-memcached==1.62
-python-mimeparse==1.6.0
-pytz==2024.1
-PyYAML==6.0.1
-referencing==0.33.0
+python-mimeparse==2.0.0
+pytz==2024.2
+PyYAML==6.0.2
+referencing==0.35.1
 repoze.lru==0.7
-requests==2.31.0
+requests==2.32.3
 resolver==0.2.1
-rfc3986==1.5.0
+rfc3986==2.0.0
 Routes==2.5.1
-rpds-py==0.18.0
+rpds-py==0.20.0
 selector==0.10.1
-setuptools==68.2.2
-simplejson==3.19.2
+setuptools==70.1.0
+simplejson==3.19.3
 six==1.16.0
-SQLAlchemy==1.4.51
+SQLAlchemy==1.4.54
 sqlalchemy-migrate==0.13.0
-sqlparse==0.4.4
+sqlparse==0.5.1
 statsd==4.0.1
-stevedore==5.2.0
+stevedore==5.3.0
 Tempita==0.5.2
 testresources==2.0.1
 testscenarios==0.5.0
-testtools==2.7.1
+testtools==2.7.2
 tiddlyweb==2.4.3
-typing_extensions==4.9.0
-tzdata==2024.1
-urllib3==1.26.18
-uWSGI==2.0.24
+typing_extensions==4.12.2
+urllib3==2.2.2
+uWSGI==2.0.27
 vine==5.1.0
 wcwidth==0.2.13
-WebOb==1.8.7
+WebOb==1.8.8
 Werkzeug==2.2.3
-wheel==0.41.2
+wheel==0.43.0
 wrapt==1.16.0
 xattr==0.10.1
 yappi==1.6.0
-zipp==3.17.0
diff --git a/test-requirements.txt b/test-requirements.txt
index a664112d..b05ad9c6 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -5,7 +5,7 @@ bandit==1.6.0
 # chardet==3.0.4
 # fixtures==3.0.0
 flake8==3.8.4
-gabbi==1.35.1
+gabbi==2.8.0
 # jsonpickle==1.4.1
 # openstacksdk==0.36.5
 openstacksdk==0.36.5
@@ -21,9 +21,9 @@ pytest-cov
 python-subunit==1.4.0
 # requests==2.23.0
 # six==1.16.0
-stestr==3.2.0
+stestr==4.1.0
 testrepository==0.0.20
 # testtools==2.5.0
-tox>=3.28.0, <4.0.0
+tox>=3.28.0
 # urllib3==1.25.11
 # yq==3.2.1
\ No newline at end of file
diff --git a/tools/gate/playbooks/checkout-treasuremap-ref.yaml b/tools/gate/playbooks/checkout-treasuremap-ref.yaml
new file mode 100644
index 00000000..46a24051
--- /dev/null
+++ b/tools/gate/playbooks/checkout-treasuremap-ref.yaml
@@ -0,0 +1,31 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+- hosts: all
+
+  tasks:
+    - name: Checkout treasuremap ref
+      shell: |
+        set -xe;
+
+        : "${TREASUREMAP_REF:=v1.9}"
+
+        cd ../treasuremap
+        git fetch https://review.opendev.org/airship/treasuremap ${TREASUREMAP_REF} && git checkout FETCH_HEAD
+
+      args:
+        chdir: "{{ zuul.project.src_dir }}"
+      environment:
+        TREASUREMAP_REF: "{{ treasuremap_ref }}"
+
+...
\ No newline at end of file
diff --git a/tools/gate/playbooks/prepare-hosts.yaml b/tools/gate/playbooks/prepare-hosts.yaml
index e7e3d9c9..76087fde 100644
--- a/tools/gate/playbooks/prepare-hosts.yaml
+++ b/tools/gate/playbooks/prepare-hosts.yaml
@@ -15,4 +15,7 @@
   roles:
     - bindep
     - start-zuul-console
+    - role: add-authorized-keys
+      public_keys:
+        - public_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDA7eM8WFJrqQmki8rR0O3QBHyl8xq42jb1RduwuRwjWoGYJI5cX7Fx+7VR4A9ITCoiqxKS8DMfgKbt5jKC6SmvMALULZsnYlthB34KywurgxsW6fgp68DHWQ7J4CCBhoIpl0W3JW7s6b0vHLhab59r0E+AYemBVuWUqbFEy8nDAHcQv1S/2o1udhmljIN7c2ogO4KAJ7Lge0BoIP9ps4u6AVwyQZixp4anU9DHGNA/UQj4M5UyuALj5buEAuATBe9Vqj4sOvZjObPJAGPUrNRrGEWAFk+lSZHRzKXo0eeWtPqoh5UN9UDb5Pocg1krncMIZwjHKovlD1z/O1y91aY5LM1wxm/7aaIiX8eCihyVZaOuDCLF7WDT2SMs7ABcotX2MDtVQTrNNV3MmMAScFNDflzPKszd7cdjLl6PBq8bvPxmCkLmnitPTGOoh9d8i+JlbINvgx1pguYrpeciIyreCO1rjTW3MgB0tyoMEa31V+7HrauBMeNnE68YTqLTIB0= smarkin@mirantis.com
 ...
diff --git a/tools/gate/playbooks/run-functional-tests-docker.yaml b/tools/gate/playbooks/run-functional-tests-docker.yaml
index 7578425f..2f32b682 100644
--- a/tools/gate/playbooks/run-functional-tests-docker.yaml
+++ b/tools/gate/playbooks/run-functional-tests-docker.yaml
@@ -17,9 +17,9 @@
   become: yes
   roles:
     - install-test-requirements
+    - ensure-tox
     - build-images
     - deploy-postgresql
     - generate-test-config
     - deploy-deckhand
     - run-functional-tests
-    - run-functional-tests
diff --git a/tools/gate/playbooks/run-functional-tests-uwsgi.yaml b/tools/gate/playbooks/run-functional-tests-uwsgi.yaml
index 0cb682e0..97baea6e 100644
--- a/tools/gate/playbooks/run-functional-tests-uwsgi.yaml
+++ b/tools/gate/playbooks/run-functional-tests-uwsgi.yaml
@@ -16,4 +16,5 @@
   gather_facts: False
   roles:
     - install-test-requirements
+    - ensure-tox
     - run-functional-tests
diff --git a/tools/gate/roles/airship-run-script-set/defaults/main.yaml b/tools/gate/roles/airship-run-script-set/defaults/main.yaml
index 7e82fd6b..7dc55afd 100644
--- a/tools/gate/roles/airship-run-script-set/defaults/main.yaml
+++ b/tools/gate/roles/airship-run-script-set/defaults/main.yaml
@@ -19,7 +19,7 @@ osh_params:
   container_distro_version: focal
   # feature_gates:
 site: airskiff
-HELM_ARTIFACT_URL: https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz
+HELM_ARTIFACT_URL: https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz
 HTK_COMMIT: cfff60ec10a6c386f38db79bb9f59a552c2b032f
 OSH_INFRA_COMMIT: cfff60ec10a6c386f38db79bb9f59a552c2b032f
 OSH_COMMIT: 2d9457e34ca4200ed631466bd87569b0214c92e7
diff --git a/tools/gate/roles/airship-run-script-set/tasks/main.yaml b/tools/gate/roles/airship-run-script-set/tasks/main.yaml
index e180c1dc..0fe778cd 100644
--- a/tools/gate/roles/airship-run-script-set/tasks/main.yaml
+++ b/tools/gate/roles/airship-run-script-set/tasks/main.yaml
@@ -35,7 +35,7 @@
         FEATURE_GATES: "{{ osh_params.feature_gates | default('') }}"
         RUN_HELM_TESTS: "{{ run_helm_tests | default('yes') }}"
         PL_SITE: "{{ site | default('airskiff') }}"
-        HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz') }}"
+        HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz') }}"
         HTK_COMMIT: "{{ HTK_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}"
         OSH_INFRA_COMMIT: "{{ OSH_INFRA_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}"
         OSH_COMMIT: "{{ OSH_COMMIT | default('2d9457e34ca4200ed631466bd87569b0214c92e7') }}"
diff --git a/tools/gate/roles/airship-run-script/defaults/main.yaml b/tools/gate/roles/airship-run-script/defaults/main.yaml
index 7e82fd6b..382be6e3 100644
--- a/tools/gate/roles/airship-run-script/defaults/main.yaml
+++ b/tools/gate/roles/airship-run-script/defaults/main.yaml
@@ -19,12 +19,12 @@ osh_params:
   container_distro_version: focal
   # feature_gates:
 site: airskiff
-HELM_ARTIFACT_URL: https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz
+HELM_ARTIFACT_URL: https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz
 HTK_COMMIT: cfff60ec10a6c386f38db79bb9f59a552c2b032f
 OSH_INFRA_COMMIT: cfff60ec10a6c386f38db79bb9f59a552c2b032f
 OSH_COMMIT: 2d9457e34ca4200ed631466bd87569b0214c92e7
 COREDNS_VERSION: v1.11.1
-DISTRO: ubuntu_focal
+DISTRO: ubuntu_jammy
 DOCKER_REGISTRY: quay.io
 MAKE_ARMADA_IMAGES: false
 MAKE_DECKHAND_IMAGES: false
diff --git a/tools/gate/roles/airship-run-script/tasks/main.yaml b/tools/gate/roles/airship-run-script/tasks/main.yaml
index befed4e4..0220ef49 100644
--- a/tools/gate/roles/airship-run-script/tasks/main.yaml
+++ b/tools/gate/roles/airship-run-script/tasks/main.yaml
@@ -32,7 +32,7 @@
     FEATURE_GATES: "{{ osh_params.feature_gates | default('') }}"
     RUN_HELM_TESTS: "{{ run_helm_tests | default('yes') }}"
     PL_SITE: "{{ site | default('airskiff') }}"
-    HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz') }}"
+    HELM_ARTIFACT_URL: "{{ HELM_ARTIFACT_URL | default('https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz') }}"
     HTK_COMMIT: "{{ HTK_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}"
     OSH_INFRA_COMMIT: "{{ OSH_INFRA_COMMIT | default('cfff60ec10a6c386f38db79bb9f59a552c2b032f') }}"
     OSH_COMMIT: "{{ OSH_COMMIT | default('2d9457e34ca4200ed631466bd87569b0214c92e7') }}"
diff --git a/tools/gate/roles/run-integration-tests/tasks/integration-tests.yaml b/tools/gate/roles/run-integration-tests/tasks/integration-tests.yaml
index ed04b52c..6ad60b31 100644
--- a/tools/gate/roles/run-integration-tests/tasks/integration-tests.yaml
+++ b/tools/gate/roles/run-integration-tests/tasks/integration-tests.yaml
@@ -57,7 +57,7 @@
     # services in the integration script called below.
     sudo -E -H pip3 install -e . --verbose --use-pep517
     sudo -E -H pip3 install -r requirements-frozen.txt
-    echo "$(pwd)" | sudo tee /usr/local/lib/python3.8/dist-packages/deckhand.pth
+    echo "$(pwd)" | sudo tee /usr/local/lib/python3.10/dist-packages/deckhand.pth
 
     pifpaf run postgresql -- ./tools/integration-tests.sh
   args:
diff --git a/tools/helm_install.sh b/tools/helm_install.sh
index 774b8e00..1cebfa21 100755
--- a/tools/helm_install.sh
+++ b/tools/helm_install.sh
@@ -17,7 +17,7 @@
 set -x
 
 HELM=$1
-HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz"}
+HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz"}
 
 
 function install_helm_binary {
diff --git a/tox.ini b/tox.ini
index 4a818c69..e597feba 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,9 +1,9 @@
 [tox]
-minversion = 3.28
+minversion = 3.10
 # Flag indicating to perform the packaging operation or not.
 # Set it to true when using tox for an application, instead of a library.
 skipsdist = True
-envlist = py38,py38-{postgresql},functional-dev,cover,pep8,bandit,docs
+envlist = py310,py310-{postgresql},functional-dev,cover,pep8,bandit,docs
 
 [testenv]
 # Install the current package in development mode with develop mode
@@ -34,7 +34,7 @@ passenv =
 deps =
   -r{toxinidir}/requirements-frozen.txt
   -r{toxinidir}/test-requirements.txt
-  -c https://raw.githubusercontent.com/apache/airflow/constraints-2.8.2/constraints-3.8.txt
+  -c https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.10.txt
 commands =
   find . -type f -name "*.pyc" -delete
   rm -Rf .testrepository/times.dbm
@@ -54,13 +54,13 @@ allowlist_externals=
   sh
 deps=
   -r{toxinidir}/requirements-direct.txt
-  -c https://raw.githubusercontent.com/apache/airflow/constraints-2.8.2/constraints-3.8.txt
+  -c https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.10.txt
 commands=
   rm -f requirements-frozen.txt
   sh -c "pip freeze --all | grep -vE 'deckhand|pyinotify|pkg-resources==0.0.0' > requirements-frozen.txt"
 
 
-[testenv:py38]
+[testenv:py310]
 allowlist_externals =
   stestr
   find
@@ -70,7 +70,7 @@ commands =
   stestr run {posargs}
   stestr slowest
 
-[testenv:py38-postgresql]
+[testenv:py310-postgresql]
 commands =
     {[testenv]commands}
     bash {toxinidir}/tools/run_pifpaf.sh '{posargs}'
@@ -79,8 +79,8 @@ allowlist_externals =
   find
   rm
 
-[testenv:py38-functional]
-basepython=python3.8
+[testenv:py310-functional]
+basepython=python3.10
 allowlist_externals =
   find
   stestr
@@ -92,8 +92,8 @@ commands =
   stestr --test-path deckhand/tests/common/ run --serial --slowest --force-subunit-trace --color {posargs}
 
 
-[testenv:py38-functional-dev]
-basepython=python3.8
+[testenv:py310-functional-dev]
+basepython=python3.10
 # Minimalistic functional test job for running Deckhand functional tests
 # via uwsgi. Uses pifpaf for DB instantiation. Useful for developers.
 # Requires PostgreSQL be installed on host.