Require a base job

This makes base jobs required and allows for a per-tenant default.

Story: 2001110
Task: 4793
Change-Id: I26ffddad8358c156cfac749ce98af70f3447f671
diff --git a/tests/fixtures/layouts/autohold.yaml b/tests/fixtures/layouts/autohold.yaml
index 015e562..515f79d 100644
--- a/tests/fixtures/layouts/autohold.yaml
+++ b/tests/fixtures/layouts/autohold.yaml
@@ -12,6 +12,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test2
     nodes:
       - name: controller
diff --git a/tests/fixtures/layouts/basic-github.yaml b/tests/fixtures/layouts/basic-github.yaml
index 709fd02..d7b323a 100644
--- a/tests/fixtures/layouts/basic-github.yaml
+++ b/tests/fixtures/layouts/basic-github.yaml
@@ -18,7 +18,12 @@
       github: {}
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
+
 - job:
     name: project-test2
 
diff --git a/tests/fixtures/layouts/crd-github.yaml b/tests/fixtures/layouts/crd-github.yaml
index 11bdf76..9696226 100644
--- a/tests/fixtures/layouts/crd-github.yaml
+++ b/tests/fixtures/layouts/crd-github.yaml
@@ -28,15 +28,24 @@
       github: {}
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project1-test
+
 - job:
     name: project2-test
+
 - job:
     name: project3-test
+
 - job:
     name: project4-test
+
 - job:
     name: project5-test
+
 - job:
     name: project6-test
 
diff --git a/tests/fixtures/layouts/dependent-github.yaml b/tests/fixtures/layouts/dependent-github.yaml
index 46cc7b3..eb74163 100644
--- a/tests/fixtures/layouts/dependent-github.yaml
+++ b/tests/fixtures/layouts/dependent-github.yaml
@@ -16,9 +16,15 @@
         unlabel: 'merge'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
+
 - job:
     name: project-test2
+
 - job:
     name: project-merge
     failure-message: Unable to merge change
diff --git a/tests/fixtures/layouts/dequeue-github.yaml b/tests/fixtures/layouts/dequeue-github.yaml
index 25e92c9..ae61cd5 100644
--- a/tests/fixtures/layouts/dequeue-github.yaml
+++ b/tests/fixtures/layouts/dequeue-github.yaml
@@ -9,6 +9,10 @@
             - changed
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: one-job-project-merge
 
 - project:
diff --git a/tests/fixtures/layouts/disable_at.yaml b/tests/fixtures/layouts/disable_at.yaml
index 09082a4..7b1b8c8 100644
--- a/tests/fixtures/layouts/disable_at.yaml
+++ b/tests/fixtures/layouts/disable_at.yaml
@@ -16,6 +16,10 @@
     disable-after-consecutive-failures: 3
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
     nodes:
       - name: controller
diff --git a/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml b/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml
index 6a05fe6..6a92deb 100644
--- a/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml
+++ b/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml
@@ -8,6 +8,10 @@
           ignore-deletes: false
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-post
     nodes:
       - name: static
diff --git a/tests/fixtures/layouts/files-github.yaml b/tests/fixtures/layouts/files-github.yaml
index 734b945..ec35259 100644
--- a/tests/fixtures/layouts/files-github.yaml
+++ b/tests/fixtures/layouts/files-github.yaml
@@ -7,6 +7,10 @@
           action: opened
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
     files:
       - '.*-requires'
diff --git a/tests/fixtures/layouts/footer-message.yaml b/tests/fixtures/layouts/footer-message.yaml
index e500371..4ee25f6 100644
--- a/tests/fixtures/layouts/footer-message.yaml
+++ b/tests/fixtures/layouts/footer-message.yaml
@@ -26,6 +26,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
 #    success-url: http://logs.exxxample.com/{change.number}/{change.patchset}/{pipeline.name}/{job.name}
 
diff --git a/tests/fixtures/layouts/idle.yaml b/tests/fixtures/layouts/idle.yaml
index 49c45ac..ec31408 100644
--- a/tests/fixtures/layouts/idle.yaml
+++ b/tests/fixtures/layouts/idle.yaml
@@ -6,6 +6,10 @@
         - time: '* * * * * */1'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-bitrot
     nodes:
       - name: static
diff --git a/tests/fixtures/layouts/ignore-dependencies.yaml b/tests/fixtures/layouts/ignore-dependencies.yaml
index 9eab9f4..89a82b3 100644
--- a/tests/fixtures/layouts/ignore-dependencies.yaml
+++ b/tests/fixtures/layouts/ignore-dependencies.yaml
@@ -13,6 +13,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project1-merge
 
 - job:
diff --git a/tests/fixtures/layouts/inheritance.yaml b/tests/fixtures/layouts/inheritance.yaml
index 146ca4d..3fe7fd4 100644
--- a/tests/fixtures/layouts/inheritance.yaml
+++ b/tests/fixtures/layouts/inheritance.yaml
@@ -12,6 +12,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test-irrelevant-starts-empty
 
 - job:
diff --git a/tests/fixtures/layouts/irrelevant-files.yaml b/tests/fixtures/layouts/irrelevant-files.yaml
index fbcca8f..97f58e7 100644
--- a/tests/fixtures/layouts/irrelevant-files.yaml
+++ b/tests/fixtures/layouts/irrelevant-files.yaml
@@ -12,6 +12,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test-irrelevant-files
 
 - project:
diff --git a/tests/fixtures/layouts/labeling-github.yaml b/tests/fixtures/layouts/labeling-github.yaml
index 33ce993..2441a9c 100644
--- a/tests/fixtures/layouts/labeling-github.yaml
+++ b/tests/fixtures/layouts/labeling-github.yaml
@@ -20,6 +20,10 @@
           - 'test'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-labels
 
 - project:
diff --git a/tests/fixtures/layouts/live-reconfiguration-add-job.yaml b/tests/fixtures/layouts/live-reconfiguration-add-job.yaml
index 1616dcb..57d2a5f 100644
--- a/tests/fixtures/layouts/live-reconfiguration-add-job.yaml
+++ b/tests/fixtures/layouts/live-reconfiguration-add-job.yaml
@@ -20,6 +20,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/live-reconfiguration-del-project.yaml b/tests/fixtures/layouts/live-reconfiguration-del-project.yaml
index 1eada5c..b149af0 100644
--- a/tests/fixtures/layouts/live-reconfiguration-del-project.yaml
+++ b/tests/fixtures/layouts/live-reconfiguration-del-project.yaml
@@ -12,6 +12,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml b/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml
index 2b97419..c4719f4 100644
--- a/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml
+++ b/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml
@@ -12,6 +12,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml b/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml
index 3cbed68..e363b4c 100644
--- a/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml
+++ b/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml
@@ -33,6 +33,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/merge-failure.yaml b/tests/fixtures/layouts/merge-failure.yaml
index cc683a9..7c5121c 100644
--- a/tests/fixtures/layouts/merge-failure.yaml
+++ b/tests/fixtures/layouts/merge-failure.yaml
@@ -47,6 +47,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/merging-github.yaml b/tests/fixtures/layouts/merging-github.yaml
index 9f43f75..c9673b9 100644
--- a/tests/fixtures/layouts/merging-github.yaml
+++ b/tests/fixtures/layouts/merging-github.yaml
@@ -13,6 +13,10 @@
         merge: true
         comment: false
 
+- job:
+    name: base
+    parent: null
+
 - project:
     name: org/project
     merge:
diff --git a/tests/fixtures/layouts/no-jobs-project.yaml b/tests/fixtures/layouts/no-jobs-project.yaml
index 593a8d7..8f965e2 100644
--- a/tests/fixtures/layouts/no-jobs-project.yaml
+++ b/tests/fixtures/layouts/no-jobs-project.yaml
@@ -12,6 +12,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-testfile
     files:
       - .*-requires
diff --git a/tests/fixtures/layouts/no-jobs.yaml b/tests/fixtures/layouts/no-jobs.yaml
index facae0a..301b27a 100644
--- a/tests/fixtures/layouts/no-jobs.yaml
+++ b/tests/fixtures/layouts/no-jobs.yaml
@@ -33,6 +33,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: gate-noop
 
 - project:
diff --git a/tests/fixtures/layouts/no-timer.yaml b/tests/fixtures/layouts/no-timer.yaml
index fda7b8b..3790ea7 100644
--- a/tests/fixtures/layouts/no-timer.yaml
+++ b/tests/fixtures/layouts/no-timer.yaml
@@ -21,6 +21,10 @@
         - event: ref-updated
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
 
 - job:
diff --git a/tests/fixtures/layouts/nonvoting-job.yaml b/tests/fixtures/layouts/nonvoting-job.yaml
index c536e11..6a912bf 100644
--- a/tests/fixtures/layouts/nonvoting-job.yaml
+++ b/tests/fixtures/layouts/nonvoting-job.yaml
@@ -20,6 +20,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: nonvoting-project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/nonvoting-pipeline.yaml b/tests/fixtures/layouts/nonvoting-pipeline.yaml
index be5d5af..d8468dd 100644
--- a/tests/fixtures/layouts/nonvoting-pipeline.yaml
+++ b/tests/fixtures/layouts/nonvoting-pipeline.yaml
@@ -10,6 +10,10 @@
       gerrit: {}
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/one-job-project.yaml b/tests/fixtures/layouts/one-job-project.yaml
index db117b1..4b682d3 100644
--- a/tests/fixtures/layouts/one-job-project.yaml
+++ b/tests/fixtures/layouts/one-job-project.yaml
@@ -41,6 +41,10 @@
           ref: ^(?!refs/).*$
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: one-job-project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/push-tag-github.yaml b/tests/fixtures/layouts/push-tag-github.yaml
index 54683e9..5805127 100644
--- a/tests/fixtures/layouts/push-tag-github.yaml
+++ b/tests/fixtures/layouts/push-tag-github.yaml
@@ -15,7 +15,12 @@
           ref: ^refs/tags/.*$
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-post
+
 - job:
     name: project-tag
 
diff --git a/tests/fixtures/layouts/rate-limit.yaml b/tests/fixtures/layouts/rate-limit.yaml
index 9392f5e..1f32dbf 100644
--- a/tests/fixtures/layouts/rate-limit.yaml
+++ b/tests/fixtures/layouts/rate-limit.yaml
@@ -25,6 +25,10 @@
     window-decrease-factor: 2
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
 
 - job:
diff --git a/tests/fixtures/layouts/repo-checkout-four-project.yaml b/tests/fixtures/layouts/repo-checkout-four-project.yaml
index 36937e9..17303f5 100644
--- a/tests/fixtures/layouts/repo-checkout-four-project.yaml
+++ b/tests/fixtures/layouts/repo-checkout-four-project.yaml
@@ -33,6 +33,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     required-projects:
       - org/project1
diff --git a/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml b/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml
index de3bfe0..4680869 100644
--- a/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml
+++ b/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml
@@ -8,6 +8,10 @@
         - event: ref-updated
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     branches: master
     override-branch: stable/havana
diff --git a/tests/fixtures/layouts/repo-checkout-no-timer.yaml b/tests/fixtures/layouts/repo-checkout-no-timer.yaml
index 2b65850..ed20bb1 100644
--- a/tests/fixtures/layouts/repo-checkout-no-timer.yaml
+++ b/tests/fixtures/layouts/repo-checkout-no-timer.yaml
@@ -8,6 +8,10 @@
         - event: ref-updated
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     override-branch: stable/havana
     required-projects:
diff --git a/tests/fixtures/layouts/repo-checkout-post.yaml b/tests/fixtures/layouts/repo-checkout-post.yaml
index 9698289..191569c 100644
--- a/tests/fixtures/layouts/repo-checkout-post.yaml
+++ b/tests/fixtures/layouts/repo-checkout-post.yaml
@@ -7,6 +7,10 @@
           ref: ^(?!refs/).*$
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     required-projects:
       - org/project1
diff --git a/tests/fixtures/layouts/repo-checkout-six-project.yaml b/tests/fixtures/layouts/repo-checkout-six-project.yaml
index c0de47d..9a81eae 100644
--- a/tests/fixtures/layouts/repo-checkout-six-project.yaml
+++ b/tests/fixtures/layouts/repo-checkout-six-project.yaml
@@ -33,6 +33,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     required-projects:
       - org/project1
diff --git a/tests/fixtures/layouts/repo-checkout-timer-override.yaml b/tests/fixtures/layouts/repo-checkout-timer-override.yaml
index 594d74c..99fc4f5 100644
--- a/tests/fixtures/layouts/repo-checkout-timer-override.yaml
+++ b/tests/fixtures/layouts/repo-checkout-timer-override.yaml
@@ -6,6 +6,10 @@
         - time: '* * * * * */1'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     branches: master
     override-branch: stable/havana
diff --git a/tests/fixtures/layouts/repo-checkout-timer.yaml b/tests/fixtures/layouts/repo-checkout-timer.yaml
index 3c4d030..e707732 100644
--- a/tests/fixtures/layouts/repo-checkout-timer.yaml
+++ b/tests/fixtures/layouts/repo-checkout-timer.yaml
@@ -6,6 +6,10 @@
         - time: '* * * * * */1'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     required-projects:
       - org/project1
diff --git a/tests/fixtures/layouts/repo-checkout-two-project.yaml b/tests/fixtures/layouts/repo-checkout-two-project.yaml
index e25554b..7910ae7 100644
--- a/tests/fixtures/layouts/repo-checkout-two-project.yaml
+++ b/tests/fixtures/layouts/repo-checkout-two-project.yaml
@@ -33,6 +33,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: integration
     required-projects:
       - org/project1
diff --git a/tests/fixtures/layouts/repo-deleted.yaml b/tests/fixtures/layouts/repo-deleted.yaml
index cea3dda..6e6c301 100644
--- a/tests/fixtures/layouts/repo-deleted.yaml
+++ b/tests/fixtures/layouts/repo-deleted.yaml
@@ -33,6 +33,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/reporting-github.yaml b/tests/fixtures/layouts/reporting-github.yaml
index ddb0588..159f205 100644
--- a/tests/fixtures/layouts/reporting-github.yaml
+++ b/tests/fixtures/layouts/reporting-github.yaml
@@ -79,6 +79,10 @@
         status: 'failure'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
 
 - project:
diff --git a/tests/fixtures/layouts/reporting-multiple-github.yaml b/tests/fixtures/layouts/reporting-multiple-github.yaml
index 22fa1e7..0126ec5 100644
--- a/tests/fixtures/layouts/reporting-multiple-github.yaml
+++ b/tests/fixtures/layouts/reporting-multiple-github.yaml
@@ -23,7 +23,12 @@
         status: 'success'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project1-test1
+
 - job:
     name: project2-test2
 
diff --git a/tests/fixtures/layouts/requirements-github.yaml b/tests/fixtures/layouts/requirements-github.yaml
index 891a366..f2ecd16 100644
--- a/tests/fixtures/layouts/requirements-github.yaml
+++ b/tests/fixtures/layouts/requirements-github.yaml
@@ -184,23 +184,36 @@
         comment: true
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project1-pipeline
+
 - job:
     name: project2-trigger
+
 - job:
     name: project3-reviewusername
+
 - job:
     name: project4-reviewreq
+
 - job:
     name: project5-reviewuserstate
+
 - job:
     name: project6-newerthan
+
 - job:
     name: project7-olderthan
+
 - job:
     name: project8-requireopen
+
 - job:
     name: project9-requirecurrent
+
 - job:
     name: project10-label
 
diff --git a/tests/fixtures/layouts/reviews-github.yaml b/tests/fixtures/layouts/reviews-github.yaml
index 1cc887a..f186fbe 100644
--- a/tests/fixtures/layouts/reviews-github.yaml
+++ b/tests/fixtures/layouts/reviews-github.yaml
@@ -12,6 +12,10 @@
           - 'tests passed'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-reviews
 
 - project:
diff --git a/tests/fixtures/layouts/smtp.yaml b/tests/fixtures/layouts/smtp.yaml
index bf1d273..5ea75ce 100644
--- a/tests/fixtures/layouts/smtp.yaml
+++ b/tests/fixtures/layouts/smtp.yaml
@@ -39,6 +39,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/tags.yaml b/tests/fixtures/layouts/tags.yaml
index 646160e..f86f5ab 100644
--- a/tests/fixtures/layouts/tags.yaml
+++ b/tests/fixtures/layouts/tags.yaml
@@ -12,6 +12,10 @@
         Verified: -1
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: merge
     tags:
       - merge
diff --git a/tests/fixtures/layouts/three-projects.yaml b/tests/fixtures/layouts/three-projects.yaml
index 6481fb9..51cd406 100644
--- a/tests/fixtures/layouts/three-projects.yaml
+++ b/tests/fixtures/layouts/three-projects.yaml
@@ -33,6 +33,10 @@
     precedence: high
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-merge
     hold-following-changes: true
 
diff --git a/tests/fixtures/layouts/timer-smtp.yaml b/tests/fixtures/layouts/timer-smtp.yaml
index 66e9aaf..a27b183 100644
--- a/tests/fixtures/layouts/timer-smtp.yaml
+++ b/tests/fixtures/layouts/timer-smtp.yaml
@@ -11,6 +11,10 @@
         subject: Periodic check for {change.project} succeeded
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-bitrot-stable-old
     success-url: http://logs.example.com/{job.name}/{build.number}
 
diff --git a/tests/fixtures/layouts/timer.yaml b/tests/fixtures/layouts/timer.yaml
index 45f137c..e1c4e77 100644
--- a/tests/fixtures/layouts/timer.yaml
+++ b/tests/fixtures/layouts/timer.yaml
@@ -19,6 +19,10 @@
         - time: '* * * * * */1'
 
 - job:
+    name: base
+    parent: null
+
+- job:
     name: project-test1
 
 - job: