mandrel 2.66.0 → 2.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/agents/acceptance-critic.md +2 -2
- package/.agents/agents/story-worker.md +15 -11
- package/.agents/docs/agentrc-reference.json +5 -2
- package/.agents/docs/configuration.md +38 -2
- package/.agents/docs/workflows.md +4 -2
- package/.agents/instructions.md +2 -1
- package/.agents/rules/git-conventions-reference.md +5 -5
- package/.agents/rules/git-conventions.md +1 -1
- package/.agents/schemas/agentrc.schema.json +20 -2
- package/.agents/schemas/story-deliver-terminal.schema.json +23 -1
- package/.agents/schemas/validation-evidence.schema.json +3 -1
- package/.agents/scripts/boot-sweep.js +97 -9
- package/.agents/scripts/{git-cleanup.js → clean-git.js} +2 -2
- package/.agents/scripts/clean-temp.js +54 -0
- package/.agents/scripts/clean-worktrees.js +593 -0
- package/.agents/scripts/coverage-capture.js +65 -9
- package/.agents/scripts/drain-pending-cleanup.js +5 -4
- package/.agents/scripts/evidence-gate.js +106 -8
- package/.agents/scripts/lib/baselines/coverage-refresh-scope.js +60 -0
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +101 -4
- package/.agents/scripts/lib/baselines/refresh-service.js +1 -1
- package/.agents/scripts/lib/baselines/seat-missing.js +228 -0
- package/.agents/scripts/lib/child-exec.js +39 -1
- package/.agents/scripts/lib/clean-temp.js +440 -0
- package/.agents/scripts/lib/close-validation/gates.js +59 -19
- package/.agents/scripts/lib/close-validation/process.js +23 -24
- package/.agents/scripts/lib/close-validation/runner.js +71 -40
- package/.agents/scripts/lib/config/gates/coverage.schema.js +21 -0
- package/.agents/scripts/lib/config/quality.js +7 -1
- package/.agents/scripts/lib/config/temp-paths.js +15 -0
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -3
- package/.agents/scripts/lib/coverage-baseline.js +78 -5
- package/.agents/scripts/lib/coverage-capture-affected.js +345 -0
- package/.agents/scripts/lib/coverage-capture-delta.js +180 -0
- package/.agents/scripts/lib/coverage-capture-fullscope.js +53 -32
- package/.agents/scripts/lib/coverage-capture-incremental.js +49 -26
- package/.agents/scripts/lib/coverage-capture-usage.js +1 -1
- package/.agents/scripts/lib/coverage-capture.js +121 -81
- package/.agents/scripts/lib/full-suite-lock.js +49 -46
- package/.agents/scripts/lib/full-suite-queue.js +83 -8
- package/.agents/scripts/lib/generated/agentrc-validator.js +1 -1
- package/.agents/scripts/lib/observability/source-classifier.js +4 -1
- package/.agents/scripts/lib/orchestration/code-review.js +15 -3
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
- package/.agents/scripts/lib/orchestration/merge-poll.js +5 -0
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +149 -97
- package/.agents/scripts/lib/orchestration/review-deposit.js +219 -0
- package/.agents/scripts/lib/orchestration/review-providers/code-review.js +11 -7
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +29 -10
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +124 -73
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +38 -20
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +8 -2
- package/.agents/scripts/lib/orchestration/single-story-close/review-overlap.js +161 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +47 -7
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +8 -16
- package/.agents/scripts/lib/process-group.js +1 -1
- package/.agents/scripts/lib/single-story-sweep.js +2 -2
- package/.agents/scripts/lib/supervised-suite.js +247 -0
- package/.agents/scripts/lib/temp-removal.js +110 -0
- package/.agents/scripts/lib/temp-retention.js +122 -73
- package/.agents/scripts/lib/wave-runner/cross-run-overlap.js +120 -0
- package/.agents/scripts/lib/wave-runner/live-probe.js +5 -1
- package/.agents/scripts/lib/worktree/canonical-path.js +34 -0
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +15 -4
- package/.agents/scripts/quality-preview.js +112 -14
- package/.agents/scripts/single-story-init.js +120 -17
- package/.agents/scripts/stories-wave-tick.js +47 -0
- package/.agents/scripts/story-review-compute.js +207 -0
- package/.agents/scripts/update-coverage-baseline.js +15 -10
- package/.agents/scripts/update-crap-baseline.js +12 -2
- package/.agents/scripts/update-maintainability-baseline.js +12 -2
- package/.agents/workflows/{git-cleanup.md → clean-git.md} +10 -10
- package/.agents/workflows/clean-temp.md +67 -0
- package/.agents/workflows/clean-worktrees.md +63 -0
- package/.agents/workflows/git-deliver.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +3 -2
- package/.agents/workflows/helpers/code-review.md +7 -5
- package/.agents/workflows/helpers/deliver-digest.md +39 -36
- package/.agents/workflows/helpers/deliver-reference.md +115 -5
- package/.agents/workflows/helpers/deliver-story-reference.md +2 -2
- package/.agents/workflows/helpers/deliver-story.md +2 -1
- package/docs/CHANGELOG.md +39 -0
- package/lib/cli/registry.js +125 -18
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +0 -5
- package/package.json +1 -1
|
@@ -13,4 +13,4 @@ import { createRequire } from 'node:module';
|
|
|
13
13
|
|
|
14
14
|
const require = createRequire(import.meta.url);
|
|
15
15
|
|
|
16
|
-
"use strict";export const validate = validate10;export default validate10;const schema11 = {"type":"object","required":["project"],"properties":{"$schema":{"type":"string","description":"Editor pointer at the shipped JSON-Schema mirror. Not read by the runtime."},"project":{"type":"object","description":"Project identity, filesystem roots, planner docs context, and the commands the close-validation chain spawns.","required":["paths"],"properties":{"baseBranch":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"description":"Branch every `story-<id>` branch is seeded from and every Story PR targets.","default":"main"},"paths":{"type":"object","description":"The three required filesystem roots. Every `${dir}Root` the framework needs is derived at runtime as `${agentRoot}/<dir>`, and the audit output dir as `${tempRoot}/audits`.","required":["agentRoot","docsRoot","tempRoot"],"properties":{"agentRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the materialized framework tree (`mandrel sync` writes here).","default":".agents"},"docsRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the project documentation the planner reads for context.","default":"docs"},"tempRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative gitignored scratch root. Every temporary artifact — gate transcripts, audit reports, plan authoring dirs — lands under it.","default":"temp"}},"additionalProperties":false},"docsContextFiles":{"type":"array","items":{"type":"string"},"description":"Files under `paths.docsRoot` the planner treats as standing context. Read digest-first — the docs digest names the file and the line range, and only the named section is pulled.","default":["architecture.md","data-dictionary.md","decisions.md","patterns.md"]},"commands":{"type":"object","description":"Shell commands the close-validation chain spawns. Each is run from the repo root.","properties":{"test":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Full test-suite command run by the close-validation chain.","default":"npm test"},"typecheck":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Static type-check command. `null` disables the gate for projects with no type layer; the empty string is rejected so a typo cannot silently disable it.","default":null},"lint":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Lint command run as a close-validation gate. `null` (the default) uses `npm run lint`; the gate is mandatory, so unlike `typecheck` this key cannot disable it. Point it at the scoped command your hooks already run to stop paying for a third whole-repo lint at close — the gate still lints the diff, and CI still owns whole-repo drift. Like every command here it must be a single argv (no `;`, `&&`, pipes or substitution), so wrap a multi-linter pair in one npm script and name that.","default":null},"formatCheck":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Non-mutating format verification run as a close-validation gate.","default":"npx biome format ."},"formatWrite":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Mutating format command the close-time format-autofix step spawns.","default":"npx biome format --write ."}},"additionalProperties":false}},"additionalProperties":false},"github":{"type":"object","description":"GitHub provider identity plus the remote stance the bootstrap enforces. `owner`, `repo`, and `operatorHandle` are operator identity — the shipped values are placeholders, not usable defaults.","required":["owner","repo","operatorHandle"],"properties":{"owner":{"type":"string","minLength":1,"description":"GitHub owner (user or org) that hosts the repository.","default":"[OWNER]"},"repo":{"type":"string","minLength":1,"description":"Repository name under `owner`.","default":"[REPO]"},"projectNumber":{"type":["integer","null"],"minimum":1,"description":"Projects V2 board number the orchestrator syncs Story status onto. `null` disables board sync.","default":null},"projectOwner":{"type":["string","null"],"minLength":1,"description":"Owner of the Projects V2 board when it lives outside `owner` (an org board fed by a user repo). `null` means the board shares `owner`.","default":null},"operatorHandle":{"type":"string","pattern":"^@.+","description":"The human the framework escalates to, `@`-prefixed. Used for HITL @-mentions on `agent::blocked`.","default":"@[USERNAME]"},"followUpRepos":{"type":"object","description":"Repository slugs for the non-consumer follow-up ownership buckets, used when a CI gap, retro proposal, or audit finding belongs to someone other than the repo that surfaced it.","properties":{"framework":{"type":"string","pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` that owns framework-level defects. Defaults to the Mandrel mirror — the one bucket with a knowable default.","default":"dsj1984/mandrel"},"platform":{"type":["string","null"],"pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` for a shared platform or infrastructure tracker (a shared base config, a runner fleet, a cross-repo toolchain). No default — nothing can guess a shared repo. Left unset, platform-owned findings file locally and say so.","default":null}},"additionalProperties":false},"branchProtection":{"type":"object","description":"Branch-protection stance applied to `project.baseBranch` by the GitHub bootstrap, and reproduced locally before every push.","properties":{"enforce":{"type":"boolean","description":"When true, the GitHub bootstrap writes the required-check ruleset. False leaves the remote stance alone.","default":true},"requiredChecks":{"type":"array","items":{"type":"object","description":"One required status check: the context name GitHub gates the merge on, plus the argv the framework runs locally to reproduce it.","required":["name","cmd"],"properties":{"name":{"type":"string","minLength":1,"description":"Required status-check context name as GitHub reports it."},"cmd":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"argv array (never a shell string) the local pre-push validation runs to reproduce the check."}},"additionalProperties":false},"description":"Checks that must pass before a Story PR merges. Each entry carries both the remote context name and the local argv.","default":[{"name":"lint","cmd":["npm","run","lint"]},{"name":"test","cmd":["npm","test"]},{"name":"baselines","cmd":["node",".agents/scripts/check-baselines.js"]}]}},"additionalProperties":false},"mergeMethods":{"type":"object","description":"Repository merge-method stance the GitHub bootstrap enforces. The framework ships squash-only with auto-merge on, which is what the one-PR-per-Story model needs for release-please to parse each landed subject.","properties":{"allow_squash_merge":{"type":"boolean","default":true},"allow_rebase_merge":{"type":"boolean","default":false},"allow_merge_commit":{"type":"boolean","default":false},"allow_auto_merge":{"type":"boolean","default":true},"delete_branch_on_merge":{"type":"boolean","default":true}},"additionalProperties":false},"notifications":{"type":"object","description":"Allowlist-gated notification channels. An event fires on a channel only when it is named in that channel's array.","properties":{"mentionOperator":{"type":"boolean","description":"When true, `github.operatorHandle` is @-mentioned in the comments the notifier posts.","default":false},"commentEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message"]},"uniqueItems":true,"description":"Events mirrored onto the Story issue as a comment. Deliberately narrower than `webhookEvents`: only Story-scoped events whose message reads as narrative an operator wants durably on the ticket belong here.","default":["state-transition","story-merged","operator-message"]},"webhookEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]},"uniqueItems":true,"description":"Events dispatched to the configured webhook. The vocabulary is the allowlist the webhook channel gates on; `merge.unlanded` and `merge.flip-failed` are allowlistable but reach the run ledger rather than `notify()` today.","default":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]}},"additionalProperties":false}},"additionalProperties":false},"planning":{"type":"object","description":"Inputs to `/mandrel-plan`: the opt-in navigability reachability gate.","properties":{"navigation":{"type":"object","description":"Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"delivery":{"type":"object","description":"Everything `/mandrel-deliver` and `single-story-close` consume: worktree isolation, runner concurrency, docs freshness, quality gates, merge/CI watch, review ceremony, and the feedback loop.","properties":{"execution":{"type":"object","description":"Serialization of the full-suite spawns delivery drives.","properties":{"fullSuiteLock":{"type":"boolean","description":"Serialize full-suite spawns (`npm test` / `npm run test:coverage`) behind a host-level advisory lock, so two concurrent deliveries on one checkout do not run two suites against the same cores. Best-effort: a wait that expires spawns anyway, so the lock can never fail a delivery. Set false — or export `MANDREL_FULL_SUITE_LOCK=0` for one invocation — to disable.","default":true}},"additionalProperties":false},"docsFreshness":{"type":"object","description":"Documentation-freshness scope: the files a change of consequence is expected to touch. Read by the audit-documentation lens to seed its target set; no delivery gate enforces it.","properties":{"paths":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Repo-relative documentation paths the audit-documentation lens adds to its target set.","default":["README.md"]}},"additionalProperties":false},"tempRetention":{"type":"object","description":"Story #4794. Auto-purge of spent temp artifacts once their Story lands. Classification is an allowlist: only the declared classes below are ever deleted, so operator scratch files under tempRoot are reported with their size and left alone. signals.ndjson is never purged by any path.","properties":{"enabled":{"type":"boolean","description":"Master switch. Default true — reclaiming a landed Story's gate transcripts and validation evidence is the behaviour, and this knob turns it off. When false every purge path is a reported no-op.","default":true},"classes":{"type":"object","description":"Per-class opt-out. Each defaults to true; set one false to keep that family while the rest are purged.","properties":{"orchestrationLogs":{"type":"boolean","description":"<tempRoot>/orchestration/*.log — close gate transcripts and terse-result detail dumps.","default":true},"validationEvidence":{"type":"boolean","description":"Per-Story validation-evidence.json, lifecycle.ndjson, and manifest.md under the standalone and per-run story trees.","default":true},"auditResults":{"type":"boolean","description":"<tempRoot>/audits/ — audit lens reports.","default":true},"planDirs":{"type":"boolean","description":"<tempRoot>/plan-<slug>/ — abandoned plan authoring dirs. Age-floored only; the current run is always excluded.","default":true}},"additionalProperties":false}},"additionalProperties":false},"deliverRunner":{"type":"object","description":"Bounded-concurrency knob for the /mandrel-deliver fan-out.","properties":{"concurrencyCap":{"type":"integer","minimum":1,"description":"Maximum ready Stories dispatched by /mandrel-deliver at once. Default 3. Moderate by design — keeps host-quota consumption predictable while allowing a small ready-set fan-out. Set 1 for strictly sequential delivery; raise further on hosts with adequate parallel-agent quota. See deliver.md for the sequencing model and throughput tradeoff.","default":3},"footprintGuard":{"type":"string","enum":["enforce","advisory"],"description":"How a file-footprint collision affects dispatch. 'enforce' (default, and the behaviour to keep unless you have a reason) withholds a Story whose footprint races a peer admitted this beat or one still in flight — the guard encodes delivery-time-only knowledge (open implementation windows, foreign leases, ground that moved since planning) that no depends_on edge can carry. 'advisory' still DETECTS every collision and reports each would-be withhold in the tick envelope, but lets dispatch follow the declared depends_on edges alone — a deliberate throughput trade for a run whose ordering is fully declared. See stories-wave-tick.js and helpers/deliver-reference.md.","default":"enforce"}},"additionalProperties":false},"worktreeIsolation":{"type":"object","description":"Per-Story git worktree provisioning. Each Story is implemented in its own checkout so concurrent siblings never share a working tree.","properties":{"enabled":{"type":"boolean","description":"When true, `single-story-init.js` materializes a worktree per Story. False implements every Story in the main checkout, which is only safe for strictly serial delivery.","default":true},"root":{"type":"string","minLength":1,"description":"Repo-relative directory the per-Story worktrees are created under. Required whenever `enabled` is explicitly true.","default":".worktrees"},"nodeModulesStrategy":{"type":"string","enum":["per-worktree","clone","symlink","pnpm-store"],"description":"How each worktree gets its dependencies. `clone` copy-on-writes the main checkout tree (fast, cross-platform); `per-worktree` runs a full install; `symlink` links the shared tree (POSIX only unless `allowSymlinkOnWindows`); `pnpm-store` re-links from the pnpm content store.","default":"clone"},"primeFromPath":{"type":["string","null"],"minLength":1,"description":"Absolute path to an existing `node_modules` tree to prime new worktrees from, instead of the main checkout. `null` uses the main checkout.","default":null},"allowSymlinkOnWindows":{"type":"boolean","description":"Permit the `symlink` strategy on win32, where it needs Developer Mode or elevation. Off by default so a Windows consumer fails over to a strategy that works.","default":false},"reapOnSuccess":{"type":"boolean","description":"Remove the Story's worktree once its PR merges. False keeps it for post-mortem inspection.","default":true},"bootstrapFiles":{"type":"array","items":{"type":"string","minLength":1},"description":"Gitignored files copied from the main checkout into every new worktree. A worktree checks out tracked files only, so local secrets and overrides would otherwise be missing.","default":[".env",".mcp.json",".agentrc.local.json",".agents/instructions.local.md"]}},"additionalProperties":false,"allOf":[{"if":{"properties":{"enabled":{"const":true}},"required":["enabled"]},"then":{"required":["root"]}}]},"quality":{"type":"object","description":"Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"gates":{"type":"object","description":"The six quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"coverage":{"type":"object","description":"Line/branch/function coverage ratchet, read from the Istanbul JSON summary the project test run emits.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/coverage.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"lines":90,"branches":85,"functions":90}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"coveragePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative path to the Istanbul `coverage-final.json` the capture step writes and the gate reads.","default":"coverage/coverage-final.json"}},"additionalProperties":false},"crap":{"type":"object","description":"CRAP (Change Risk Anti-Pattern) ratchet — per-method cyclomatic complexity joined against per-method coverage.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/crap.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.05}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"max":30,"p95":20,"methodsAbove20":50}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the CRAP gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":["src"]},"newMethodCeiling":{"type":"integer","minimum":1,"description":"Hard CRAP ceiling applied to a method the diff introduces. A new method above it fails the gate regardless of the baseline.","default":30},"requireCoverage":{"type":"boolean","description":"When true, the gate refuses to score without a coverage artifact rather than silently reporting complexity-only rows.","default":true},"minMethodResolutionRate":{"type":"number","minimum":0,"maximum":1,"description":"Fail-closed floor on the per-method coverage JOIN (Story #4775): the fraction of methods that must resolve a coverage entry, counted only over files that HAVE one, before `update-crap-baseline.js` will persist. A broken join is silent by construction — unresolved methods are simply absent — so the updater refuses rather than writing a thin baseline and logging it as success. Not enforced below 25 joinable methods, where a diff-scoped run’s rate is noise. Default 0.75; a healthy repo resolves ~98%."},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from CRAP discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]},"incrementalCoverage":{"type":"object","description":"The two independent full-suite economies (Story #4981, split by Story #5173). `skipWhenUnchanged` (default true) decides WHETHER to capture — no changed file under `crap.targetDirs` versus `baseRef` means no capture at all — and is a pure saving. `baselineJoin` (default false) loosens gate semantics: the CRAP join resolves a method in an untouched file from its committed baseline row instead of requiring fresh coverage for it. Neither narrows the capture run itself: a capture that does happen is the ordinary full `npm run test:coverage` (Story #5065).","properties":{"skipWhenUnchanged":{"type":"boolean","description":"Skip the capture entirely when no changed file under `crap.targetDirs` versus `baseRef` was touched. The only measured saving, and gate-semantics-neutral. Defaults to true.","default":true},"baselineJoin":{"type":"boolean","description":"Let the CRAP join resolve a method in a file the diff did not touch from its committed baseline row instead of requiring fresh coverage for it. A gate loosening, not a saving — defaults to false.","default":false},"baseRef":{"type":"string","minLength":1,"description":"Default git ref the changed-file set is computed against, for a caller that passes no `--ref`. A `--ref` the caller named wins over this value, so a caller that anchors another gate on the same ref — `.husky/pre-push`, which passes `--ref origin/main` and then previews `--changed-since origin/main` — resolves ONE scope for both steps (Story #5365). Omitted and unpassed, the gate’s own default `main` applies."}},"additionalProperties":false}},"additionalProperties":false},"maintainability":{"type":"object","description":"Maintainability-index ratchet. Scores per file as the average over its methods, so deleting a small high-MI method can legitimately lower a file’s score.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/maintainability.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.5}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"min":70}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the maintainability gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/` plus `tests/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":[]},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from MI discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]}},"additionalProperties":false},"mutation":{"type":"object","description":"Stryker mutation-score ratchet. Off in practice for most consumers — the baseline kind is registered but no framework path runs Stryker.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/mutation.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"score":60}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}}},"additionalProperties":false},"bundle-size":{"type":"object","description":"Built-artifact size ratchet for web targets. Off by default — it needs declared bundles.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/bundle-size.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"bundles":{"type":"array","items":{"type":"object","description":"One built artifact the bundle-size gate weighs.","required":["name","path","limit"],"properties":{"name":{"type":"string","minLength":1,"description":"Label the rollup row is keyed by."},"path":{"type":"string","minLength":1,"description":"Glob or path of the built artifact to measure."},"limit":{"type":"string","minLength":1,"description":"Human size ceiling (e.g. `\"180 kB\"`)."}},"additionalProperties":false},"description":"The artifacts to weigh. Empty means the gate has nothing to do.","default":[]}},"additionalProperties":false},"duplication":{"type":"object","description":"Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks and `ignoreGlobs` to exclude files from the scan.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/duplication.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":1}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"percentage":25}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the duplication (DRY) gate scans for copy-paste clones. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal (Story #3664).","default":["src"]},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from duplication discovery before scanning. Orthogonal to `components` (grouping). Absent or empty preserves the existing behaviour (Story #3664).","default":[]}},"additionalProperties":false}},"additionalProperties":false},"autoRefresh":{"type":"object","description":"Baseline-attribution auto-refresh: when a gate can prove a regression is a legitimate consequence of the diff, it rewrites the baseline instead of blocking. The single-row CRAP jump cap (5) and the rescore scope (`diff`) are fixed.","properties":{"enabled":{"type":"boolean","description":"Master switch for the auto-refresh path. When false, every baseline refresh is a deliberate operator action.","default":true}},"additionalProperties":false},"requireBaselines":{"type":"boolean","description":"Story #4495. Fail-closed baseline-enforcement policy for the unified check-baselines close-validation gate. When false (default), a consumer that enables baseline gates (crap/maintainability/…) but has not committed the corresponding baseline artifacts under baselines/ gets a clean skip-with-reason instead of a deterministic first-try close failure. Set true to keep the gate registered so an absent baseline artifact fails close-validation with a preflight hint naming the fix (the fail-closed posture).","default":false},"navigability":{"type":"object","description":"Navigability lens + journey-suite config (Epic #4131, F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and /mandrel-deliver's per-Story ceremony (journey suite). Opt-in: absent or empty routeGlobs degrades to a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (pages/**, app/**/route.ts) marking paths that add a user-facing route — the route-tree SSOT the navigability lens enumerates and the route-added routing predicate matches against.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT the navigability lens checks every route resolves a nav door against.","default":[]},"journeySuite":{"type":"string","description":"Path or command for the per-persona journey suite /mandrel-deliver's per-Story ceremony runs."}},"additionalProperties":false}},"additionalProperties":false},"mergeWatch":{"type":"object","description":"Knobs consumed by the close-and-land merge wait (Story #4543). `mode` (Story #4698) selects the close-time merge posture. `maxWaitSeconds` bounds ONE invocation of the merge wait and its expiry returns a resumable `pending` terminal with no label mutation; `maxBudgetSeconds` bounds the CUMULATIVE wait across resumes (anchored at the PR's createdAt, so a resume does not restart the clock) and exhausting it is the genuine give-up that classifies and blocks. The poll cadence is internal (at most 30s while checks run, at most 10s once they are green and the PR is unmerged); it and the cap of 3 behind-the-base updates are not configurable.","properties":{"mode":{"type":"string","enum":["sync","async"],"description":"Close-time merge-wait posture (Story #4698). `sync` (default) keeps the in-close foreground merge wait unchanged. `async` caps the per-invocation wait to a short ~60s probe window — long enough to catch an instant merge and, via the head-anchored required-check predicate, an instantly-red required check — then returns the resumable `pending` terminal (exit 3) with a `nextCommand`. Opt in when slow CI makes the foreground wait routinely expire: the worker launches `nextCommand` in the background instead of burning the host tool slot polling. `maxBudgetSeconds` (the cumulative give-up) is unchanged."},"maxWaitSeconds":{"type":"integer","minimum":1,"description":"Per-invocation merge-wait bound (seconds). Default 300 (5 minutes) — chosen to fit inside a single host tool invocation (~10 min ceiling) alongside the close gates that precede the wait. Expiry yields `pending` (exit 3), never a block. Headless callers with no host ceiling raise this to land in one block."},"maxBudgetSeconds":{"type":"integer","minimum":1,"description":"Cumulative wall-clock budget (seconds) across merge-wait resumes, anchored at the PR's createdAt. Default 3600 (60 minutes). Exhausting this classifies the block and transitions the Story to agent::blocked.","default":3600}},"additionalProperties":false},"codeReview":{"type":"object","description":"Review-provider chain and on-branch remediation threshold for the /mandrel-deliver code-review ceremony.","properties":{"providers":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","enum":["native","code-review","codex","security-review","ultrareview"],"description":"Registered provider key. Inline: native, code-review, codex, security-review. Manual-prompt: ultrareview."},"scopes":{"type":"array","items":{"type":"string","enum":["story","epic"]},"description":"Invocation scopes this entry fires on. Default (omitted) is both."},"optional":{"type":"boolean","default":false,"description":"When true, construction failure (host missing CLI/plugin) is logged and the entry is skipped instead of hard-failing the chain. Use for cross-runtime portability."},"manualPrompt":{"type":"boolean","default":false,"description":"When true, the entry is loaded from the manual-prompt registry: contributes a one-line operator suggestion via `renderPrompt()` instead of running a review via `runReview()`. Does not affect severity counts or `halted`."},"when":{"type":"object","description":"Optional label-gated invocation predicate. Evaluated against the ticket's current labels at invocation time; when false, the entry is silently skipped for this run.","properties":{"label":{"type":"string","minLength":1,"description":"Single label that MUST be present on the ticket."},"labelAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Run when ANY of the listed labels is present."}},"additionalProperties":false}},"additionalProperties":false},"description":"Review-provider chain (Story #2871). When unset or empty, falls back to this default: `native` (scoped lint + MI) then an optional story-scoped `code-review` — a low-effort `claude --print` bug review whose every finding is critical and halts close before auto-merge; hosts without the `claude` CLI skip it. `security-review` and `ultrareview` are opt-in. The orchestrator iterates inline entries in declaration order and merges their Finding[] before posting one structured comment; manual-prompt entries (e.g. ultrareview) contribute a trailing 'Manual review suggestions' section. Selecting an adapter whose probe fails hard-fails at factory construction unless declared `optional: true` in the chain.","default":[{"name":"native"},{"name":"code-review","scopes":["story"],"optional":true}]},"autoFixSeverity":{"type":"string","enum":["high","medium"],"description":"Severity threshold for on-branch remediation in /mandrel-deliver Phase 5 (code-review). `medium` (default) routes 🔴/🟠/🟡 findings into the host-LLM focused-fix routing (Mediums batched per lens: one commit per lens, a single validation + rescan at the end) while 🟢 suggestions still graduate to follow-up issues; `high` reproduces the pre-4399 Critical/High-only routing. Hard cutover — no back-compat flag.","default":"medium"}},"additionalProperties":false},"refactorStage":{"type":"object","description":"Opt-in, config-gated post-green refactor checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly additive and default-OFF: when disabled, story-deliver behaves exactly as before. Advisory only — never changes existing close-validation gate semantics.","properties":{"enabled":{"type":"boolean","description":"When true, story-deliver runs an advisory post-green refactor stage (core/code-review-and-quality skill, Post-Green Refactor Pass) after the suite is green. Default false — when unset the stage is skipped and close-validation gate semantics are unchanged.","default":false}},"additionalProperties":false},"acceptanceEval":{"type":"object","description":"Story #3819. Bounded per-Story acceptance self-eval loop. After the implementation commits land and before the Story-implementation phase flips to `closing`, an independent (fresh-context) critic pass scores the caller-injected change set against each inline `acceptance[]` item, redrafts the unmet items, and re-evaluates — capped at `maxRounds` redraft rounds (0 = scored once, no redraft), then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the scoring pass is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":0,"description":"Maximum number of redraft rounds before escalation. Default 2; 0 means the verdict is scored once with no redraft round (Story #5313 dropped the hard ceiling and the floor-of-one clamp).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-in toggle for the close-time retro auto-file graduator. Auto-filing defaults to OFF (Story #5341).","properties":{"retroProposals":{"type":"boolean","description":"When true, the retro auto-files its actionable routed proposals as meta::<framework-gap|consumer-improvement> + friction::<category> issues via the graduator pre-parsed-findings seam, and the rendered retro sections list the filed issue numbers instead of paste-ready gh command stanzas. Defaults to false (Story #5341), which renders the command stanzas instead.","default":false}},"additionalProperties":false},"ci":{"type":"object","description":"CI-aware delivery namespace (Story #4356, Epic #4355): the merge posture and the advisory-check policy.","properties":{"autoMerge":{"type":"string","enum":["trust-ci","strict"],"description":"Story #4356 (Epic #4355). Merge posture. 'trust-ci' (default) merges once required checks pass; 'strict' additionally requires a clean review gate.","default":"trust-ci"},"blockOnAdvisoryFailure":{"type":"boolean","description":"Story #5096. When true (default), delivery refuses to arm — and disarms — GitHub native auto-merge while a non-required (advisory) check is genuinely red on the PR head and GitHub reports the PR mergeable anyway (mergeStateStatus=UNSTABLE). `--auto` waits on REQUIRED contexts only, so without this a red advisory quality gate merges unattended. Set false to restore the pre-#5096 behaviour verbatim.","default":true},"advisoryAllowlist":{"type":"array","items":{"type":"string"},"description":"Story #5096. Check-run names exempt from blockOnAdvisoryFailure — a red run whose name matches exactly never blocks arming. Matching is exact; an unnamed run can never match and always blocks.","default":[]},"rerunAdvisory":{"type":"integer","minimum":0,"description":"Story #5266. How many times close may re-run a failed advisory workflow run before blocking on it, per close invocation. Default 0: close spends no CI minutes and issues no GitHub mutation on an advisory red unless asked. At n > 0 the failed run(s) are re-run within that allowance and the merge wait re-polls inside its existing budget, landing or blocking on the re-run verdict. Overridden per invocation by --rerun-advisory <n>.","default":0}},"additionalProperties":false},"routing":{"type":"object","description":"v2 delivery-spawn routing: role-scoped boot contexts and the ceremony profile. The v1 singleDelivery epic-route kill-switch was removed in Stage 6; the freshCriticSampleRate sampling floor was retired in Story #5313 and the derived-level ceremony routing in Story #5343.","properties":{"roleScopedAgents":{"type":"boolean","description":"Epic #4478 (M7-B). Kill-switch for the role-scoped boot contexts. When true (default), a converted delivery spawn (`story-worker`, `acceptance-critic`) boots on its own `.claude/agents/<role>.md` system prompt instead of re-paying the full entry-doc (AGENTS.md or CLAUDE.md) @-import closure. When false, every converted spawn falls back to `subagent_type: general-purpose` — the instant, code-rollback-free per-consumer revert, and the universal escape for hosts that ignore `.claude/agents/`. The fallback is the full-closure agent that ran before M7-B, so flipping it off never drops a gate.","default":true},"ceremonyProfile":{"type":"string","enum":["minimal","standard","strict"],"description":"Acceptance-ceremony depth — who authors the Story acceptance verdict. minimal and standard (default) = the inline self-eval, whatever the diff touches; strict = a fresh-context maker-blind critic. Review depth is a separate decision and still derives `deep` for any sensitive path (review-depth.js).","default":"standard"},"closeAndLand":{"type":"boolean","description":"When true (default), single-story-close lands through merge in one close. Opt out per-run with --no-wait-merge.","default":true}},"additionalProperties":false}},"additionalProperties":false},"qa":{"type":"object","description":"Agent-driven QA harness contract (Epic #3214; environment-keyed by Epic #4326). Optional top-level block. All filesystem-pointer fields (featureRoot, fixturesManifest, designTokens) carry safeString guards rejecting shell-injection metacharacters. environments is a map of named deployment targets (each with a baseUrl, a per-environment url-template/skill sign-in seam, and an optional allowWrites gate); personas resolve to a stored credential reference or a sign-in skill, never an inline secret.","properties":{"featureRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Directory holding the Gherkin feature files the QA sweep drives.","default":"tests/features"},"fixturesManifest":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the persona/fixture manifest the harness seeds from.","default":"tests/fixtures/personas.json"},"environments":{"type":"object","description":"Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.","default":{"local":{"baseUrl":"http://localhost:3000","signInSeam":{"urlTemplate":"/dev/sign-in-as/{persona}"}},"staging":{"baseUrl":"https://staging.example.test","allowWrites":false}},"minProperties":1,"additionalProperties":{"type":"object","properties":{"baseUrl":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"signInSeam":{"oneOf":[{"type":"object","properties":{"urlTemplate":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["urlTemplate"],"additionalProperties":false},{"type":"object","properties":{"skill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"pattern":"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$","description":"Tier-relative skill id, e.g. `stack/qa/acme-sso`: lowercase segments of letters, digits, `.`, `_` or `-`, at least two of them, separated by `/`. A traversal (`../..`), an absolute path, a backslash or an uppercase segment is rejected here rather than normalized."}},"required":["skill"],"additionalProperties":false}]},"allowWrites":{"type":"boolean"}},"required":["baseUrl"],"additionalProperties":false}},"personas":{"description":"Personas the QA-harness sign-in seam accepts. Two accepted shapes: (1) a plain array of persona names — the honest shape for a `urlTemplate` dev-impersonation seam, where the persona name is the sole input the workflow consumes; (2) the object-map form keyed by persona name, where each entry carries per-persona auth material (`credentialRef` or `signInSkill`) consulted only under a skill-based or credential-based seam.","default":{"admin":{"credentialRef":"QA_ADMIN_CREDENTIAL"},"member":{"credentialRef":"QA_MEMBER_CREDENTIAL"}},"oneOf":[{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},{"type":"object","minProperties":1,"additionalProperties":{"oneOf":[{"type":"object","properties":{"credentialRef":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["credentialRef"],"additionalProperties":false},{"type":"object","properties":{"signInSkill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["signInSkill"],"additionalProperties":false}]}}]},"gherkinLint":{"type":"object","description":"Static Gherkin corpus gate (Story #5013). Optional; the gate runs only when this block is present, so an upgrade never reddens the lint of a consumer that never asked the framework to police its `.feature` files. Inside the opt-in it fails closed: an unresolvable `@cucumber/gherkin` parser, or a scope resolving zero step definitions, exits 1 rather than reporting a clean run.","default":{"scopes":{"web":{"featureRoots":["apps/web/tests/features"],"stepRoots":["apps/web/tests/steps"]}},"exemptionTags":["@skip"],"stepWaivers":[]},"properties":{"scopes":{"type":"object","description":"Binding scopes, keyed by name. Each scope resolves its own features against its own step definitions only — pooling every step root into one matcher list is what makes a cross-app false bind possible, where a step defined solely in app B silently vouches for app A. The scope name appears verbatim in every unbound finding.","minProperties":1,"additionalProperties":{"type":"object","properties":{"featureRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the `.feature` files of this scope, walked recursively."},"stepRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the step definitions of this scope, walked recursively. Resolving zero definitions here is a fail-closed error, not a clean run."}},"required":["featureRoots","stepRoots"],"additionalProperties":false}},"exemptionTags":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Tags marking a scenario as intentionally non-binding, so must-bind skips it. Never an escape from must-compile: a parse error in the file still fails the run. Default: [\"@skip\"].","default":["@skip"]},"stepWaivers":{"type":"array","items":{"type":"string","minLength":1},"description":"Exact step texts must-bind never reports as unbound. The step index is a source scan and therefore heuristic while the parser is exact, so a false unbound must always have an escape that does not require switching the gate off. Default: [].","default":[]}},"required":["scopes"],"additionalProperties":false},"consoleAllowlist":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Console-message substrings the QA run tolerates instead of reporting as a finding (framework dev-mode chatter).","default":["Download the React DevTools","[HMR]"]},"designTokens":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the design-token SSOT the UX/UI lens checks rendered styles against.","default":"src/styles/tokens.css"}},"additionalProperties":false}},"additionalProperties":false};const pattern0 = new RegExp("([;&|`]|\\$\\()", "u");const pattern9 = new RegExp("^@.+", "u");const pattern10 = new RegExp("^[^/\\s]+/[^/\\s]+$", "u");const pattern25 = new RegExp("^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$", "u");const func2 = require("ajv/dist/runtime/ucs2length").default;const func10 = Object.prototype.hasOwnProperty;function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == "object" && !Array.isArray(data)){if(data.project === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "project"},message:"must have required property '"+"project"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!((((((key0 === "$schema") || (key0 === "project")) || (key0 === "github")) || (key0 === "planning")) || (key0 === "delivery")) || (key0 === "qa"))){const err1 = {instancePath,schemaPath:"#/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.$schema !== undefined){if(typeof data.$schema !== "string"){const err2 = {instancePath:instancePath+"/$schema",schemaPath:"#/properties/%24schema/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.project !== undefined){let data1 = data.project;if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.paths === undefined){const err3 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/required",keyword:"required",params:{missingProperty: "paths"},message:"must have required property '"+"paths"+"'"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key1 in data1){if(!((((key1 === "baseBranch") || (key1 === "paths")) || (key1 === "docsContextFiles")) || (key1 === "commands"))){const err4 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key1},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data1.baseBranch !== undefined){let data2 = data1.baseBranch;if(typeof data2 !== "string"){const err5 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const _errs9 = errors;const _errs10 = errors;if(typeof data2 === "string"){if(!pattern0.test(data2)){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}var valid2 = _errs10 === errors;if(valid2){const err7 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}else {errors = _errs9;if(vErrors !== null){if(_errs9){vErrors.length = _errs9;}else {vErrors = null;}}}}if(data1.paths !== undefined){let data3 = data1.paths;if(data3 && typeof data3 == "object" && !Array.isArray(data3)){if(data3.agentRoot === undefined){const err8 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "agentRoot"},message:"must have required property '"+"agentRoot"+"'"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data3.docsRoot === undefined){const err9 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "docsRoot"},message:"must have required property '"+"docsRoot"+"'"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data3.tempRoot === undefined){const err10 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "tempRoot"},message:"must have required property '"+"tempRoot"+"'"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key2 in data3){if(!(((key2 === "agentRoot") || (key2 === "docsRoot")) || (key2 === "tempRoot"))){const err11 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key2},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data3.agentRoot !== undefined){let data4 = data3.agentRoot;const _errs16 = errors;const _errs17 = errors;if(typeof data4 === "string"){if(!pattern0.test(data4)){const err12 = {};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}var valid4 = _errs17 === errors;if(valid4){const err13 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}else {errors = _errs16;if(vErrors !== null){if(_errs16){vErrors.length = _errs16;}else {vErrors = null;}}}if(typeof data4 === "string"){if(func2(data4) < 1){const err14 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data3.docsRoot !== undefined){let data5 = data3.docsRoot;const _errs20 = errors;const _errs21 = errors;if(typeof data5 === "string"){if(!pattern0.test(data5)){const err16 = {};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}var valid5 = _errs21 === errors;if(valid5){const err17 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}else {errors = _errs20;if(vErrors !== null){if(_errs20){vErrors.length = _errs20;}else {vErrors = null;}}}if(typeof data5 === "string"){if(func2(data5) < 1){const err18 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}else {const err19 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data3.tempRoot !== undefined){let data6 = data3.tempRoot;const _errs24 = errors;const _errs25 = errors;if(typeof data6 === "string"){if(!pattern0.test(data6)){const err20 = {};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}var valid6 = _errs25 === errors;if(valid6){const err21 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}else {errors = _errs24;if(vErrors !== null){if(_errs24){vErrors.length = _errs24;}else {vErrors = null;}}}if(typeof data6 === "string"){if(func2(data6) < 1){const err22 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data1.docsContextFiles !== undefined){let data7 = data1.docsContextFiles;if(Array.isArray(data7)){const len0 = data7.length;for(let i0=0; i0<len0; i0++){if(typeof data7[i0] !== "string"){const err25 = {instancePath:instancePath+"/project/docsContextFiles/" + i0,schemaPath:"#/properties/project/properties/docsContextFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}else {const err26 = {instancePath:instancePath+"/project/docsContextFiles",schemaPath:"#/properties/project/properties/docsContextFiles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data1.commands !== undefined){let data9 = data1.commands;if(data9 && typeof data9 == "object" && !Array.isArray(data9)){for(const key3 in data9){if(!(((((key3 === "test") || (key3 === "typecheck")) || (key3 === "lint")) || (key3 === "formatCheck")) || (key3 === "formatWrite"))){const err27 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key3},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data9.test !== undefined){let data10 = data9.test;const _errs35 = errors;const _errs36 = errors;if(typeof data10 === "string"){if(!pattern0.test(data10)){const err28 = {};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}var valid10 = _errs36 === errors;if(valid10){const err29 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}else {errors = _errs35;if(vErrors !== null){if(_errs35){vErrors.length = _errs35;}else {vErrors = null;}}}if(typeof data10 === "string"){if(func2(data10) < 1){const err30 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data9.typecheck !== undefined){let data11 = data9.typecheck;if((typeof data11 !== "string") && (data11 !== null)){const err32 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.typecheck.type},message:"must be string,null"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}const _errs39 = errors;const _errs40 = errors;if(errors === _errs40){if(typeof data11 === "string"){if(!pattern0.test(data11)){const err33 = {};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}else {const err34 = {};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}var valid11 = _errs40 === errors;if(valid11){const err35 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(typeof data11 === "string"){if(func2(data11) < 1){const err36 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}}if(data9.lint !== undefined){let data12 = data9.lint;if((typeof data12 !== "string") && (data12 !== null)){const err37 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.lint.type},message:"must be string,null"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}const _errs44 = errors;const _errs45 = errors;if(errors === _errs45){if(typeof data12 === "string"){if(!pattern0.test(data12)){const err38 = {};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}else {const err39 = {};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}var valid12 = _errs45 === errors;if(valid12){const err40 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}else {errors = _errs44;if(vErrors !== null){if(_errs44){vErrors.length = _errs44;}else {vErrors = null;}}}if(typeof data12 === "string"){if(func2(data12) < 1){const err41 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}}if(data9.formatCheck !== undefined){let data13 = data9.formatCheck;const _errs49 = errors;const _errs50 = errors;if(typeof data13 === "string"){if(!pattern0.test(data13)){const err42 = {};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}var valid13 = _errs50 === errors;if(valid13){const err43 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}else {errors = _errs49;if(vErrors !== null){if(_errs49){vErrors.length = _errs49;}else {vErrors = null;}}}if(typeof data13 === "string"){if(func2(data13) < 1){const err44 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data9.formatWrite !== undefined){let data14 = data9.formatWrite;const _errs53 = errors;const _errs54 = errors;if(typeof data14 === "string"){if(!pattern0.test(data14)){const err46 = {};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}var valid14 = _errs54 === errors;if(valid14){const err47 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}else {errors = _errs53;if(vErrors !== null){if(_errs53){vErrors.length = _errs53;}else {vErrors = null;}}}if(typeof data14 === "string"){if(func2(data14) < 1){const err48 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}}else {const err50 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}}else {const err51 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}}if(data.github !== undefined){let data15 = data.github;if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.owner === undefined){const err52 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "owner"},message:"must have required property '"+"owner"+"'"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}if(data15.repo === undefined){const err53 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "repo"},message:"must have required property '"+"repo"+"'"};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}if(data15.operatorHandle === undefined){const err54 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "operatorHandle"},message:"must have required property '"+"operatorHandle"+"'"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}for(const key4 in data15){if(!(func10.call(schema11.properties.github.properties, key4))){const err55 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key4},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}if(data15.owner !== undefined){let data16 = data15.owner;if(typeof data16 === "string"){if(func2(data16) < 1){const err56 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}}else {const err57 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}}if(data15.repo !== undefined){let data17 = data15.repo;if(typeof data17 === "string"){if(func2(data17) < 1){const err58 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}}else {const err59 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}if(data15.projectNumber !== undefined){let data18 = data15.projectNumber;if((!(((typeof data18 == "number") && (!(data18 % 1) && !isNaN(data18))) && (isFinite(data18)))) && (data18 !== null)){const err60 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/type",keyword:"type",params:{type: schema11.properties.github.properties.projectNumber.type},message:"must be integer,null"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}if((typeof data18 == "number") && (isFinite(data18))){if(data18 < 1 || isNaN(data18)){const err61 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}}}if(data15.projectOwner !== undefined){let data19 = data15.projectOwner;if((typeof data19 !== "string") && (data19 !== null)){const err62 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/type",keyword:"type",params:{type: schema11.properties.github.properties.projectOwner.type},message:"must be string,null"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}if(typeof data19 === "string"){if(func2(data19) < 1){const err63 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}}if(data15.operatorHandle !== undefined){let data20 = data15.operatorHandle;if(typeof data20 === "string"){if(!pattern9.test(data20)){const err64 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/pattern",keyword:"pattern",params:{pattern: "^@.+"},message:"must match pattern \""+"^@.+"+"\""};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}}else {const err65 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}}if(data15.followUpRepos !== undefined){let data21 = data15.followUpRepos;if(data21 && typeof data21 == "object" && !Array.isArray(data21)){for(const key5 in data21){if(!((key5 === "framework") || (key5 === "platform"))){const err66 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}}if(data21.framework !== undefined){let data22 = data21.framework;if(typeof data22 === "string"){if(!pattern10.test(data22)){const err67 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}else {const err68 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}if(data21.platform !== undefined){let data23 = data21.platform;if((typeof data23 !== "string") && (data23 !== null)){const err69 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/type",keyword:"type",params:{type: schema11.properties.github.properties.followUpRepos.properties.platform.type},message:"must be string,null"};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}if(typeof data23 === "string"){if(!pattern10.test(data23)){const err70 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err70];}else {vErrors.push(err70);}errors++;}}}}else {const err71 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err71];}else {vErrors.push(err71);}errors++;}}if(data15.branchProtection !== undefined){let data24 = data15.branchProtection;if(data24 && typeof data24 == "object" && !Array.isArray(data24)){for(const key6 in data24){if(!((key6 === "enforce") || (key6 === "requiredChecks"))){const err72 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}}if(data24.enforce !== undefined){if(typeof data24.enforce !== "boolean"){const err73 = {instancePath:instancePath+"/github/branchProtection/enforce",schemaPath:"#/properties/github/properties/branchProtection/properties/enforce/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err73];}else {vErrors.push(err73);}errors++;}}if(data24.requiredChecks !== undefined){let data26 = data24.requiredChecks;if(Array.isArray(data26)){const len1 = data26.length;for(let i1=0; i1<len1; i1++){let data27 = data26[i1];if(data27 && typeof data27 == "object" && !Array.isArray(data27)){if(data27.name === undefined){const err74 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err74];}else {vErrors.push(err74);}errors++;}if(data27.cmd === undefined){const err75 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/required",keyword:"required",params:{missingProperty: "cmd"},message:"must have required property '"+"cmd"+"'"};if(vErrors === null){vErrors = [err75];}else {vErrors.push(err75);}errors++;}for(const key7 in data27){if(!((key7 === "name") || (key7 === "cmd"))){const err76 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err76];}else {vErrors.push(err76);}errors++;}}if(data27.name !== undefined){let data28 = data27.name;if(typeof data28 === "string"){if(func2(data28) < 1){const err77 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/name",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/name/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err77];}else {vErrors.push(err77);}errors++;}}else {const err78 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/name",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err78];}else {vErrors.push(err78);}errors++;}}if(data27.cmd !== undefined){let data29 = data27.cmd;if(Array.isArray(data29)){if(data29.length < 1){const err79 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err79];}else {vErrors.push(err79);}errors++;}const len2 = data29.length;for(let i2=0; i2<len2; i2++){let data30 = data29[i2];if(typeof data30 === "string"){if(func2(data30) < 1){const err80 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd/" + i2,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err80];}else {vErrors.push(err80);}errors++;}}else {const err81 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd/" + i2,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err81];}else {vErrors.push(err81);}errors++;}}}else {const err82 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err82];}else {vErrors.push(err82);}errors++;}}}else {const err83 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err83];}else {vErrors.push(err83);}errors++;}}}else {const err84 = {instancePath:instancePath+"/github/branchProtection/requiredChecks",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err84];}else {vErrors.push(err84);}errors++;}}}else {const err85 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err85];}else {vErrors.push(err85);}errors++;}}if(data15.mergeMethods !== undefined){let data31 = data15.mergeMethods;if(data31 && typeof data31 == "object" && !Array.isArray(data31)){for(const key8 in data31){if(!(((((key8 === "allow_squash_merge") || (key8 === "allow_rebase_merge")) || (key8 === "allow_merge_commit")) || (key8 === "allow_auto_merge")) || (key8 === "delete_branch_on_merge"))){const err86 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err86];}else {vErrors.push(err86);}errors++;}}if(data31.allow_squash_merge !== undefined){if(typeof data31.allow_squash_merge !== "boolean"){const err87 = {instancePath:instancePath+"/github/mergeMethods/allow_squash_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_squash_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err87];}else {vErrors.push(err87);}errors++;}}if(data31.allow_rebase_merge !== undefined){if(typeof data31.allow_rebase_merge !== "boolean"){const err88 = {instancePath:instancePath+"/github/mergeMethods/allow_rebase_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_rebase_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}}if(data31.allow_merge_commit !== undefined){if(typeof data31.allow_merge_commit !== "boolean"){const err89 = {instancePath:instancePath+"/github/mergeMethods/allow_merge_commit",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_merge_commit/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err89];}else {vErrors.push(err89);}errors++;}}if(data31.allow_auto_merge !== undefined){if(typeof data31.allow_auto_merge !== "boolean"){const err90 = {instancePath:instancePath+"/github/mergeMethods/allow_auto_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_auto_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err90];}else {vErrors.push(err90);}errors++;}}if(data31.delete_branch_on_merge !== undefined){if(typeof data31.delete_branch_on_merge !== "boolean"){const err91 = {instancePath:instancePath+"/github/mergeMethods/delete_branch_on_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/delete_branch_on_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err91];}else {vErrors.push(err91);}errors++;}}}else {const err92 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err92];}else {vErrors.push(err92);}errors++;}}if(data15.notifications !== undefined){let data37 = data15.notifications;if(data37 && typeof data37 == "object" && !Array.isArray(data37)){for(const key9 in data37){if(!(((key9 === "mentionOperator") || (key9 === "commentEvents")) || (key9 === "webhookEvents"))){const err93 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err93];}else {vErrors.push(err93);}errors++;}}if(data37.mentionOperator !== undefined){if(typeof data37.mentionOperator !== "boolean"){const err94 = {instancePath:instancePath+"/github/notifications/mentionOperator",schemaPath:"#/properties/github/properties/notifications/properties/mentionOperator/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}}if(data37.commentEvents !== undefined){let data39 = data37.commentEvents;if(Array.isArray(data39)){const len3 = data39.length;for(let i3=0; i3<len3; i3++){let data40 = data39[i3];if(typeof data40 !== "string"){const err95 = {instancePath:instancePath+"/github/notifications/commentEvents/" + i3,schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}if(!((((data40 === "state-transition") || (data40 === "story-merged")) || (data40 === "story-closing")) || (data40 === "operator-message"))){const err96 = {instancePath:instancePath+"/github/notifications/commentEvents/" + i3,schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.github.properties.notifications.properties.commentEvents.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err96];}else {vErrors.push(err96);}errors++;}}let i4 = data39.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data39[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err97 = {instancePath:instancePath+"/github/notifications/commentEvents",schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/uniqueItems",keyword:"uniqueItems",params:{i: i4, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i4+" are identical)"};if(vErrors === null){vErrors = [err97];}else {vErrors.push(err97);}errors++;break;}indices0[item0] = i4;}}}else {const err98 = {instancePath:instancePath+"/github/notifications/commentEvents",schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err98];}else {vErrors.push(err98);}errors++;}}if(data37.webhookEvents !== undefined){let data41 = data37.webhookEvents;if(Array.isArray(data41)){const len4 = data41.length;for(let i5=0; i5<len4; i5++){let data42 = data41[i5];if(typeof data42 !== "string"){const err99 = {instancePath:instancePath+"/github/notifications/webhookEvents/" + i5,schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}if(!((((((data42 === "state-transition") || (data42 === "story-merged")) || (data42 === "story-closing")) || (data42 === "operator-message")) || (data42 === "merge.unlanded")) || (data42 === "merge.flip-failed"))){const err100 = {instancePath:instancePath+"/github/notifications/webhookEvents/" + i5,schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.github.properties.notifications.properties.webhookEvents.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}}let i6 = data41.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data41[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err101 = {instancePath:instancePath+"/github/notifications/webhookEvents",schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/uniqueItems",keyword:"uniqueItems",params:{i: i6, j: j1},message:"must NOT have duplicate items (items ## "+j1+" and "+i6+" are identical)"};if(vErrors === null){vErrors = [err101];}else {vErrors.push(err101);}errors++;break;}indices1[item1] = i6;}}}else {const err102 = {instancePath:instancePath+"/github/notifications/webhookEvents",schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err102];}else {vErrors.push(err102);}errors++;}}}else {const err103 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err103];}else {vErrors.push(err103);}errors++;}}}else {const err104 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err104];}else {vErrors.push(err104);}errors++;}}if(data.planning !== undefined){let data43 = data.planning;if(data43 && typeof data43 == "object" && !Array.isArray(data43)){for(const key10 in data43){if(!(key10 === "navigation")){const err105 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}}if(data43.navigation !== undefined){let data44 = data43.navigation;if(data44 && typeof data44 == "object" && !Array.isArray(data44)){for(const key11 in data44){if(!((key11 === "routeGlobs") || (key11 === "navRegistry"))){const err106 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data44.routeGlobs !== undefined){let data45 = data44.routeGlobs;if(Array.isArray(data45)){const len5 = data45.length;for(let i7=0; i7<len5; i7++){if(typeof data45[i7] !== "string"){const err107 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i7,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}}else {const err108 = {instancePath:instancePath+"/planning/navigation/routeGlobs",schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}}if(data44.navRegistry !== undefined){let data47 = data44.navRegistry;if(Array.isArray(data47)){const len6 = data47.length;for(let i8=0; i8<len6; i8++){if(typeof data47[i8] !== "string"){const err109 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i8,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}}}else {const err110 = {instancePath:instancePath+"/planning/navigation/navRegistry",schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}}}else {const err111 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}}else {const err112 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data.delivery !== undefined){let data49 = data.delivery;if(data49 && typeof data49 == "object" && !Array.isArray(data49)){for(const key12 in data49){if(!(func10.call(schema11.properties.delivery.properties, key12))){const err113 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}}if(data49.execution !== undefined){let data50 = data49.execution;if(data50 && typeof data50 == "object" && !Array.isArray(data50)){for(const key13 in data50){if(!(key13 === "fullSuiteLock")){const err114 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err114];}else {vErrors.push(err114);}errors++;}}if(data50.fullSuiteLock !== undefined){if(typeof data50.fullSuiteLock !== "boolean"){const err115 = {instancePath:instancePath+"/delivery/execution/fullSuiteLock",schemaPath:"#/properties/delivery/properties/execution/properties/fullSuiteLock/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}}else {const err116 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err116];}else {vErrors.push(err116);}errors++;}}if(data49.docsFreshness !== undefined){let data52 = data49.docsFreshness;if(data52 && typeof data52 == "object" && !Array.isArray(data52)){for(const key14 in data52){if(!(key14 === "paths")){const err117 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}}if(data52.paths !== undefined){let data53 = data52.paths;if(Array.isArray(data53)){const len7 = data53.length;for(let i9=0; i9<len7; i9++){let data54 = data53[i9];const _errs146 = errors;const _errs147 = errors;if(typeof data54 === "string"){if(!pattern0.test(data54)){const err118 = {};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}var valid42 = _errs147 === errors;if(valid42){const err119 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}else {errors = _errs146;if(vErrors !== null){if(_errs146){vErrors.length = _errs146;}else {vErrors = null;}}}if(typeof data54 === "string"){if(func2(data54) < 1){const err120 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}}else {const err121 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err121];}else {vErrors.push(err121);}errors++;}}}else {const err122 = {instancePath:instancePath+"/delivery/docsFreshness/paths",schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err122];}else {vErrors.push(err122);}errors++;}}}else {const err123 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err123];}else {vErrors.push(err123);}errors++;}}if(data49.tempRetention !== undefined){let data55 = data49.tempRetention;if(data55 && typeof data55 == "object" && !Array.isArray(data55)){for(const key15 in data55){if(!((key15 === "enabled") || (key15 === "classes"))){const err124 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}}if(data55.enabled !== undefined){if(typeof data55.enabled !== "boolean"){const err125 = {instancePath:instancePath+"/delivery/tempRetention/enabled",schemaPath:"#/properties/delivery/properties/tempRetention/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}}if(data55.classes !== undefined){let data57 = data55.classes;if(data57 && typeof data57 == "object" && !Array.isArray(data57)){for(const key16 in data57){if(!((((key16 === "orchestrationLogs") || (key16 === "validationEvidence")) || (key16 === "auditResults")) || (key16 === "planDirs"))){const err126 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}if(data57.orchestrationLogs !== undefined){if(typeof data57.orchestrationLogs !== "boolean"){const err127 = {instancePath:instancePath+"/delivery/tempRetention/classes/orchestrationLogs",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/orchestrationLogs/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}}if(data57.validationEvidence !== undefined){if(typeof data57.validationEvidence !== "boolean"){const err128 = {instancePath:instancePath+"/delivery/tempRetention/classes/validationEvidence",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/validationEvidence/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err128];}else {vErrors.push(err128);}errors++;}}if(data57.auditResults !== undefined){if(typeof data57.auditResults !== "boolean"){const err129 = {instancePath:instancePath+"/delivery/tempRetention/classes/auditResults",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/auditResults/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}if(data57.planDirs !== undefined){if(typeof data57.planDirs !== "boolean"){const err130 = {instancePath:instancePath+"/delivery/tempRetention/classes/planDirs",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/planDirs/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err130];}else {vErrors.push(err130);}errors++;}}}else {const err131 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err131];}else {vErrors.push(err131);}errors++;}}}else {const err132 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}}if(data49.deliverRunner !== undefined){let data62 = data49.deliverRunner;if(data62 && typeof data62 == "object" && !Array.isArray(data62)){for(const key17 in data62){if(!((key17 === "concurrencyCap") || (key17 === "footprintGuard"))){const err133 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}}if(data62.concurrencyCap !== undefined){let data63 = data62.concurrencyCap;if(!(((typeof data63 == "number") && (!(data63 % 1) && !isNaN(data63))) && (isFinite(data63)))){const err134 = {instancePath:instancePath+"/delivery/deliverRunner/concurrencyCap",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/concurrencyCap/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err134];}else {vErrors.push(err134);}errors++;}if((typeof data63 == "number") && (isFinite(data63))){if(data63 < 1 || isNaN(data63)){const err135 = {instancePath:instancePath+"/delivery/deliverRunner/concurrencyCap",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/concurrencyCap/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err135];}else {vErrors.push(err135);}errors++;}}}if(data62.footprintGuard !== undefined){let data64 = data62.footprintGuard;if(typeof data64 !== "string"){const err136 = {instancePath:instancePath+"/delivery/deliverRunner/footprintGuard",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/footprintGuard/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err136];}else {vErrors.push(err136);}errors++;}if(!((data64 === "enforce") || (data64 === "advisory"))){const err137 = {instancePath:instancePath+"/delivery/deliverRunner/footprintGuard",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/footprintGuard/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.deliverRunner.properties.footprintGuard.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err137];}else {vErrors.push(err137);}errors++;}}}else {const err138 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err138];}else {vErrors.push(err138);}errors++;}}if(data49.worktreeIsolation !== undefined){let data65 = data49.worktreeIsolation;const _errs174 = errors;let valid47 = true;const _errs175 = errors;if(data65 && typeof data65 == "object" && !Array.isArray(data65)){let missing0;if((data65.enabled === undefined) && (missing0 = "enabled")){const err139 = {};if(vErrors === null){vErrors = [err139];}else {vErrors.push(err139);}errors++;}else {if(data65.enabled !== undefined){if(true !== data65.enabled){const err140 = {};if(vErrors === null){vErrors = [err140];}else {vErrors.push(err140);}errors++;}}}}var _valid0 = _errs175 === errors;errors = _errs174;if(vErrors !== null){if(_errs174){vErrors.length = _errs174;}else {vErrors = null;}}if(_valid0){const _errs177 = errors;if(data65 && typeof data65 == "object" && !Array.isArray(data65)){if(data65.root === undefined){const err141 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/allOf/0/then/required",keyword:"required",params:{missingProperty: "root"},message:"must have required property '"+"root"+"'"};if(vErrors === null){vErrors = [err141];}else {vErrors.push(err141);}errors++;}}var _valid0 = _errs177 === errors;valid47 = _valid0;}if(!valid47){const err142 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/allOf/0/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema"};if(vErrors === null){vErrors = [err142];}else {vErrors.push(err142);}errors++;}if(data65 && typeof data65 == "object" && !Array.isArray(data65)){for(const key18 in data65){if(!(((((((key18 === "enabled") || (key18 === "root")) || (key18 === "nodeModulesStrategy")) || (key18 === "primeFromPath")) || (key18 === "allowSymlinkOnWindows")) || (key18 === "reapOnSuccess")) || (key18 === "bootstrapFiles"))){const err143 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err143];}else {vErrors.push(err143);}errors++;}}if(data65.enabled !== undefined){if(typeof data65.enabled !== "boolean"){const err144 = {instancePath:instancePath+"/delivery/worktreeIsolation/enabled",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err144];}else {vErrors.push(err144);}errors++;}}if(data65.root !== undefined){let data68 = data65.root;if(typeof data68 === "string"){if(func2(data68) < 1){const err145 = {instancePath:instancePath+"/delivery/worktreeIsolation/root",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/root/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err145];}else {vErrors.push(err145);}errors++;}}else {const err146 = {instancePath:instancePath+"/delivery/worktreeIsolation/root",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/root/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err146];}else {vErrors.push(err146);}errors++;}}if(data65.nodeModulesStrategy !== undefined){let data69 = data65.nodeModulesStrategy;if(typeof data69 !== "string"){const err147 = {instancePath:instancePath+"/delivery/worktreeIsolation/nodeModulesStrategy",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/nodeModulesStrategy/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err147];}else {vErrors.push(err147);}errors++;}if(!((((data69 === "per-worktree") || (data69 === "clone")) || (data69 === "symlink")) || (data69 === "pnpm-store"))){const err148 = {instancePath:instancePath+"/delivery/worktreeIsolation/nodeModulesStrategy",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/nodeModulesStrategy/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.worktreeIsolation.properties.nodeModulesStrategy.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err148];}else {vErrors.push(err148);}errors++;}}if(data65.primeFromPath !== undefined){let data70 = data65.primeFromPath;if((typeof data70 !== "string") && (data70 !== null)){const err149 = {instancePath:instancePath+"/delivery/worktreeIsolation/primeFromPath",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/primeFromPath/type",keyword:"type",params:{type: schema11.properties.delivery.properties.worktreeIsolation.properties.primeFromPath.type},message:"must be string,null"};if(vErrors === null){vErrors = [err149];}else {vErrors.push(err149);}errors++;}if(typeof data70 === "string"){if(func2(data70) < 1){const err150 = {instancePath:instancePath+"/delivery/worktreeIsolation/primeFromPath",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/primeFromPath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err150];}else {vErrors.push(err150);}errors++;}}}if(data65.allowSymlinkOnWindows !== undefined){if(typeof data65.allowSymlinkOnWindows !== "boolean"){const err151 = {instancePath:instancePath+"/delivery/worktreeIsolation/allowSymlinkOnWindows",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/allowSymlinkOnWindows/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err151];}else {vErrors.push(err151);}errors++;}}if(data65.reapOnSuccess !== undefined){if(typeof data65.reapOnSuccess !== "boolean"){const err152 = {instancePath:instancePath+"/delivery/worktreeIsolation/reapOnSuccess",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/reapOnSuccess/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err152];}else {vErrors.push(err152);}errors++;}}if(data65.bootstrapFiles !== undefined){let data73 = data65.bootstrapFiles;if(Array.isArray(data73)){const len8 = data73.length;for(let i10=0; i10<len8; i10++){let data74 = data73[i10];if(typeof data74 === "string"){if(func2(data74) < 1){const err153 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err153];}else {vErrors.push(err153);}errors++;}}else {const err154 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err154];}else {vErrors.push(err154);}errors++;}}}else {const err155 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err155];}else {vErrors.push(err155);}errors++;}}}else {const err156 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err156];}else {vErrors.push(err156);}errors++;}}if(data49.quality !== undefined){let data75 = data49.quality;if(data75 && typeof data75 == "object" && !Array.isArray(data75)){for(const key19 in data75){if(!((((key19 === "gates") || (key19 === "autoRefresh")) || (key19 === "requireBaselines")) || (key19 === "navigability"))){const err157 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err157];}else {vErrors.push(err157);}errors++;}}if(data75.gates !== undefined){let data76 = data75.gates;if(data76 && typeof data76 == "object" && !Array.isArray(data76)){for(const key20 in data76){if(!((((((key20 === "coverage") || (key20 === "crap")) || (key20 === "maintainability")) || (key20 === "mutation")) || (key20 === "bundle-size")) || (key20 === "duplication"))){const err158 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err158];}else {vErrors.push(err158);}errors++;}}if(data76.coverage !== undefined){let data77 = data76.coverage;if(data77 && typeof data77 == "object" && !Array.isArray(data77)){for(const key21 in data77){if(!((((((key21 === "enabled") || (key21 === "baselinePath")) || (key21 === "tolerance")) || (key21 === "floors")) || (key21 === "components")) || (key21 === "coveragePath"))){const err159 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err159];}else {vErrors.push(err159);}errors++;}}if(data77.enabled !== undefined){if(typeof data77.enabled !== "boolean"){const err160 = {instancePath:instancePath+"/delivery/quality/gates/coverage/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err160];}else {vErrors.push(err160);}errors++;}}if(data77.baselinePath !== undefined){let data79 = data77.baselinePath;const _errs208 = errors;const _errs209 = errors;if(typeof data79 === "string"){if(!pattern0.test(data79)){const err161 = {};if(vErrors === null){vErrors = [err161];}else {vErrors.push(err161);}errors++;}}var valid55 = _errs209 === errors;if(valid55){const err162 = {instancePath:instancePath+"/delivery/quality/gates/coverage/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err162];}else {vErrors.push(err162);}errors++;}else {errors = _errs208;if(vErrors !== null){if(_errs208){vErrors.length = _errs208;}else {vErrors = null;}}}if(typeof data79 === "string"){if(func2(data79) < 1){const err163 = {instancePath:instancePath+"/delivery/quality/gates/coverage/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err163];}else {vErrors.push(err163);}errors++;}}else {const err164 = {instancePath:instancePath+"/delivery/quality/gates/coverage/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err164];}else {vErrors.push(err164);}errors++;}}if(data77.tolerance !== undefined){let data80 = data77.tolerance;if(data80 && typeof data80 == "object" && !Array.isArray(data80)){if(data80.kind === undefined){const err165 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err165];}else {vErrors.push(err165);}errors++;}if(data80.value === undefined){const err166 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err166];}else {vErrors.push(err166);}errors++;}for(const key22 in data80){if(!((key22 === "kind") || (key22 === "value"))){const err167 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err167];}else {vErrors.push(err167);}errors++;}}if(data80.kind !== undefined){let data81 = data80.kind;if(typeof data81 !== "string"){const err168 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err168];}else {vErrors.push(err168);}errors++;}if(!((data81 === "absolute") || (data81 === "percent"))){const err169 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.coverage.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err169];}else {vErrors.push(err169);}errors++;}}if(data80.value !== undefined){let data82 = data80.value;if((typeof data82 == "number") && (isFinite(data82))){if(data82 < 0 || isNaN(data82)){const err170 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err170];}else {vErrors.push(err170);}errors++;}}else {const err171 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err171];}else {vErrors.push(err171);}errors++;}}}else {const err172 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err172];}else {vErrors.push(err172);}errors++;}}if(data77.floors !== undefined){let data83 = data77.floors;if(data83 && typeof data83 == "object" && !Array.isArray(data83)){for(const key23 in data83){let data84 = data83[key23];if(data84 && typeof data84 == "object" && !Array.isArray(data84)){for(const key24 in data84){let data85 = data84[key24];if(!((typeof data85 == "number") && (isFinite(data85)))){const err173 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key23.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key24.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err173];}else {vErrors.push(err173);}errors++;}}}else {const err174 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key23.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err174];}else {vErrors.push(err174);}errors++;}}}else {const err175 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err175];}else {vErrors.push(err175);}errors++;}}if(data77.components !== undefined){let data86 = data77.components;if(data86 && typeof data86 == "object" && !Array.isArray(data86)){for(const key25 in data86){let data87 = data86[key25];if(Array.isArray(data87)){const len9 = data87.length;for(let i11=0; i11<len9; i11++){let data88 = data87[i11];if(typeof data88 === "string"){if(func2(data88) < 1){const err176 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key25.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err176];}else {vErrors.push(err176);}errors++;}}else {const err177 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key25.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err177];}else {vErrors.push(err177);}errors++;}}}else {const err178 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key25.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err178];}else {vErrors.push(err178);}errors++;}}}else {const err179 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err179];}else {vErrors.push(err179);}errors++;}}if(data77.coveragePath !== undefined){let data89 = data77.coveragePath;const _errs234 = errors;const _errs235 = errors;if(typeof data89 === "string"){if(!pattern0.test(data89)){const err180 = {};if(vErrors === null){vErrors = [err180];}else {vErrors.push(err180);}errors++;}}var valid62 = _errs235 === errors;if(valid62){const err181 = {instancePath:instancePath+"/delivery/quality/gates/coverage/coveragePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/coveragePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err181];}else {vErrors.push(err181);}errors++;}else {errors = _errs234;if(vErrors !== null){if(_errs234){vErrors.length = _errs234;}else {vErrors = null;}}}if(typeof data89 === "string"){if(func2(data89) < 1){const err182 = {instancePath:instancePath+"/delivery/quality/gates/coverage/coveragePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/coveragePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err182];}else {vErrors.push(err182);}errors++;}}else {const err183 = {instancePath:instancePath+"/delivery/quality/gates/coverage/coveragePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/coveragePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err183];}else {vErrors.push(err183);}errors++;}}}else {const err184 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err184];}else {vErrors.push(err184);}errors++;}}if(data76.crap !== undefined){let data90 = data76.crap;if(data90 && typeof data90 == "object" && !Array.isArray(data90)){for(const key26 in data90){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key26))){const err185 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key26},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err185];}else {vErrors.push(err185);}errors++;}}if(data90.enabled !== undefined){if(typeof data90.enabled !== "boolean"){const err186 = {instancePath:instancePath+"/delivery/quality/gates/crap/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err186];}else {vErrors.push(err186);}errors++;}}if(data90.baselinePath !== undefined){let data92 = data90.baselinePath;const _errs243 = errors;const _errs244 = errors;if(typeof data92 === "string"){if(!pattern0.test(data92)){const err187 = {};if(vErrors === null){vErrors = [err187];}else {vErrors.push(err187);}errors++;}}var valid64 = _errs244 === errors;if(valid64){const err188 = {instancePath:instancePath+"/delivery/quality/gates/crap/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err188];}else {vErrors.push(err188);}errors++;}else {errors = _errs243;if(vErrors !== null){if(_errs243){vErrors.length = _errs243;}else {vErrors = null;}}}if(typeof data92 === "string"){if(func2(data92) < 1){const err189 = {instancePath:instancePath+"/delivery/quality/gates/crap/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err189];}else {vErrors.push(err189);}errors++;}}else {const err190 = {instancePath:instancePath+"/delivery/quality/gates/crap/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err190];}else {vErrors.push(err190);}errors++;}}if(data90.tolerance !== undefined){let data93 = data90.tolerance;if(data93 && typeof data93 == "object" && !Array.isArray(data93)){if(data93.kind === undefined){const err191 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err191];}else {vErrors.push(err191);}errors++;}if(data93.value === undefined){const err192 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err192];}else {vErrors.push(err192);}errors++;}for(const key27 in data93){if(!((key27 === "kind") || (key27 === "value"))){const err193 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key27},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err193];}else {vErrors.push(err193);}errors++;}}if(data93.kind !== undefined){let data94 = data93.kind;if(typeof data94 !== "string"){const err194 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err194];}else {vErrors.push(err194);}errors++;}if(!((data94 === "absolute") || (data94 === "percent"))){const err195 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err195];}else {vErrors.push(err195);}errors++;}}if(data93.value !== undefined){let data95 = data93.value;if((typeof data95 == "number") && (isFinite(data95))){if(data95 < 0 || isNaN(data95)){const err196 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err196];}else {vErrors.push(err196);}errors++;}}else {const err197 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err197];}else {vErrors.push(err197);}errors++;}}}else {const err198 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}}if(data90.floors !== undefined){let data96 = data90.floors;if(data96 && typeof data96 == "object" && !Array.isArray(data96)){for(const key28 in data96){let data97 = data96[key28];if(data97 && typeof data97 == "object" && !Array.isArray(data97)){for(const key29 in data97){let data98 = data97[key29];if(!((typeof data98 == "number") && (isFinite(data98)))){const err199 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key28.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key29.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err199];}else {vErrors.push(err199);}errors++;}}}else {const err200 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key28.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}}}else {const err201 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err201];}else {vErrors.push(err201);}errors++;}}if(data90.components !== undefined){let data99 = data90.components;if(data99 && typeof data99 == "object" && !Array.isArray(data99)){for(const key30 in data99){let data100 = data99[key30];if(Array.isArray(data100)){const len10 = data100.length;for(let i12=0; i12<len10; i12++){let data101 = data100[i12];if(typeof data101 === "string"){if(func2(data101) < 1){const err202 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err202];}else {vErrors.push(err202);}errors++;}}else {const err203 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err203];}else {vErrors.push(err203);}errors++;}}}else {const err204 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key30.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err204];}else {vErrors.push(err204);}errors++;}}}else {const err205 = {instancePath:instancePath+"/delivery/quality/gates/crap/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err205];}else {vErrors.push(err205);}errors++;}}if(data90.targetDirs !== undefined){let data102 = data90.targetDirs;const _errs268 = errors;let valid71 = false;let passing0 = null;const _errs269 = errors;if(Array.isArray(data102)){const len11 = data102.length;for(let i13=0; i13<len11; i13++){if(typeof data102[i13] !== "string"){const err206 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i13,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err206];}else {vErrors.push(err206);}errors++;}}}else {const err207 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err207];}else {vErrors.push(err207);}errors++;}var _valid1 = _errs269 === errors;if(_valid1){valid71 = true;passing0 = 0;}const _errs273 = errors;if(data102 && typeof data102 == "object" && !Array.isArray(data102)){for(const key31 in data102){if(!((key31 === "append") || (key31 === "prepend"))){const err208 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key31},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err208];}else {vErrors.push(err208);}errors++;}}if(data102.append !== undefined){let data104 = data102.append;if(Array.isArray(data104)){const len12 = data104.length;for(let i14=0; i14<len12; i14++){if(typeof data104[i14] !== "string"){const err209 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i14,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err209];}else {vErrors.push(err209);}errors++;}}}else {const err210 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err210];}else {vErrors.push(err210);}errors++;}}if(data102.prepend !== undefined){let data106 = data102.prepend;if(Array.isArray(data106)){const len13 = data106.length;for(let i15=0; i15<len13; i15++){if(typeof data106[i15] !== "string"){const err211 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i15,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err211];}else {vErrors.push(err211);}errors++;}}}else {const err212 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err212];}else {vErrors.push(err212);}errors++;}}}else {const err213 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err213];}else {vErrors.push(err213);}errors++;}var _valid1 = _errs273 === errors;if(_valid1 && valid71){valid71 = false;passing0 = [passing0, 1];}else {if(_valid1){valid71 = true;passing0 = 1;}}if(!valid71){const err214 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err214];}else {vErrors.push(err214);}errors++;}else {errors = _errs268;if(vErrors !== null){if(_errs268){vErrors.length = _errs268;}else {vErrors = null;}}}}if(data90.newMethodCeiling !== undefined){let data108 = data90.newMethodCeiling;if(!(((typeof data108 == "number") && (!(data108 % 1) && !isNaN(data108))) && (isFinite(data108)))){const err215 = {instancePath:instancePath+"/delivery/quality/gates/crap/newMethodCeiling",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/newMethodCeiling/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err215];}else {vErrors.push(err215);}errors++;}if((typeof data108 == "number") && (isFinite(data108))){if(data108 < 1 || isNaN(data108)){const err216 = {instancePath:instancePath+"/delivery/quality/gates/crap/newMethodCeiling",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/newMethodCeiling/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err216];}else {vErrors.push(err216);}errors++;}}}if(data90.requireCoverage !== undefined){if(typeof data90.requireCoverage !== "boolean"){const err217 = {instancePath:instancePath+"/delivery/quality/gates/crap/requireCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/requireCoverage/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err217];}else {vErrors.push(err217);}errors++;}}if(data90.minMethodResolutionRate !== undefined){let data110 = data90.minMethodResolutionRate;if((typeof data110 == "number") && (isFinite(data110))){if(data110 > 1 || isNaN(data110)){const err218 = {instancePath:instancePath+"/delivery/quality/gates/crap/minMethodResolutionRate",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/minMethodResolutionRate/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1"};if(vErrors === null){vErrors = [err218];}else {vErrors.push(err218);}errors++;}if(data110 < 0 || isNaN(data110)){const err219 = {instancePath:instancePath+"/delivery/quality/gates/crap/minMethodResolutionRate",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/minMethodResolutionRate/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err219];}else {vErrors.push(err219);}errors++;}}else {const err220 = {instancePath:instancePath+"/delivery/quality/gates/crap/minMethodResolutionRate",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/minMethodResolutionRate/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err220];}else {vErrors.push(err220);}errors++;}}if(data90.ignoreGlobs !== undefined){let data111 = data90.ignoreGlobs;if(Array.isArray(data111)){const len14 = data111.length;for(let i16=0; i16<len14; i16++){let data112 = data111[i16];if(typeof data112 === "string"){if(func2(data112) < 1){const err221 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i16,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err221];}else {vErrors.push(err221);}errors++;}}else {const err222 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i16,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err222];}else {vErrors.push(err222);}errors++;}}}else {const err223 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err223];}else {vErrors.push(err223);}errors++;}}if(data90.incrementalCoverage !== undefined){let data113 = data90.incrementalCoverage;if(data113 && typeof data113 == "object" && !Array.isArray(data113)){for(const key32 in data113){if(!(((key32 === "skipWhenUnchanged") || (key32 === "baselineJoin")) || (key32 === "baseRef"))){const err224 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key32},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err224];}else {vErrors.push(err224);}errors++;}}if(data113.skipWhenUnchanged !== undefined){if(typeof data113.skipWhenUnchanged !== "boolean"){const err225 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/skipWhenUnchanged",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/skipWhenUnchanged/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err225];}else {vErrors.push(err225);}errors++;}}if(data113.baselineJoin !== undefined){if(typeof data113.baselineJoin !== "boolean"){const err226 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/baselineJoin",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/baselineJoin/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err226];}else {vErrors.push(err226);}errors++;}}if(data113.baseRef !== undefined){let data116 = data113.baseRef;if(typeof data116 === "string"){if(func2(data116) < 1){const err227 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/baseRef",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/baseRef/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err227];}else {vErrors.push(err227);}errors++;}}else {const err228 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/baseRef",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/baseRef/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err228];}else {vErrors.push(err228);}errors++;}}}else {const err229 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err229];}else {vErrors.push(err229);}errors++;}}}else {const err230 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err230];}else {vErrors.push(err230);}errors++;}}if(data76.maintainability !== undefined){let data117 = data76.maintainability;if(data117 && typeof data117 == "object" && !Array.isArray(data117)){for(const key33 in data117){if(!(((((((key33 === "enabled") || (key33 === "baselinePath")) || (key33 === "tolerance")) || (key33 === "floors")) || (key33 === "components")) || (key33 === "targetDirs")) || (key33 === "ignoreGlobs"))){const err231 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err231];}else {vErrors.push(err231);}errors++;}}if(data117.enabled !== undefined){if(typeof data117.enabled !== "boolean"){const err232 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err232];}else {vErrors.push(err232);}errors++;}}if(data117.baselinePath !== undefined){let data119 = data117.baselinePath;const _errs310 = errors;const _errs311 = errors;if(typeof data119 === "string"){if(!pattern0.test(data119)){const err233 = {};if(vErrors === null){vErrors = [err233];}else {vErrors.push(err233);}errors++;}}var valid83 = _errs311 === errors;if(valid83){const err234 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err234];}else {vErrors.push(err234);}errors++;}else {errors = _errs310;if(vErrors !== null){if(_errs310){vErrors.length = _errs310;}else {vErrors = null;}}}if(typeof data119 === "string"){if(func2(data119) < 1){const err235 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err235];}else {vErrors.push(err235);}errors++;}}else {const err236 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err236];}else {vErrors.push(err236);}errors++;}}if(data117.tolerance !== undefined){let data120 = data117.tolerance;if(data120 && typeof data120 == "object" && !Array.isArray(data120)){if(data120.kind === undefined){const err237 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err237];}else {vErrors.push(err237);}errors++;}if(data120.value === undefined){const err238 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err238];}else {vErrors.push(err238);}errors++;}for(const key34 in data120){if(!((key34 === "kind") || (key34 === "value"))){const err239 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key34},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err239];}else {vErrors.push(err239);}errors++;}}if(data120.kind !== undefined){let data121 = data120.kind;if(typeof data121 !== "string"){const err240 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err240];}else {vErrors.push(err240);}errors++;}if(!((data121 === "absolute") || (data121 === "percent"))){const err241 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err241];}else {vErrors.push(err241);}errors++;}}if(data120.value !== undefined){let data122 = data120.value;if((typeof data122 == "number") && (isFinite(data122))){if(data122 < 0 || isNaN(data122)){const err242 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err242];}else {vErrors.push(err242);}errors++;}}else {const err243 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err243];}else {vErrors.push(err243);}errors++;}}}else {const err244 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err244];}else {vErrors.push(err244);}errors++;}}if(data117.floors !== undefined){let data123 = data117.floors;if(data123 && typeof data123 == "object" && !Array.isArray(data123)){for(const key35 in data123){let data124 = data123[key35];if(data124 && typeof data124 == "object" && !Array.isArray(data124)){for(const key36 in data124){let data125 = data124[key36];if(!((typeof data125 == "number") && (isFinite(data125)))){const err245 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key36.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err245];}else {vErrors.push(err245);}errors++;}}}else {const err246 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err246];}else {vErrors.push(err246);}errors++;}}}else {const err247 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err247];}else {vErrors.push(err247);}errors++;}}if(data117.components !== undefined){let data126 = data117.components;if(data126 && typeof data126 == "object" && !Array.isArray(data126)){for(const key37 in data126){let data127 = data126[key37];if(Array.isArray(data127)){const len15 = data127.length;for(let i17=0; i17<len15; i17++){let data128 = data127[i17];if(typeof data128 === "string"){if(func2(data128) < 1){const err248 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err248];}else {vErrors.push(err248);}errors++;}}else {const err249 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err249];}else {vErrors.push(err249);}errors++;}}}else {const err250 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err250];}else {vErrors.push(err250);}errors++;}}}else {const err251 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err251];}else {vErrors.push(err251);}errors++;}}if(data117.targetDirs !== undefined){let data129 = data117.targetDirs;const _errs335 = errors;let valid90 = false;let passing1 = null;const _errs336 = errors;if(Array.isArray(data129)){const len16 = data129.length;for(let i18=0; i18<len16; i18++){if(typeof data129[i18] !== "string"){const err252 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i18,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err252];}else {vErrors.push(err252);}errors++;}}}else {const err253 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err253];}else {vErrors.push(err253);}errors++;}var _valid2 = _errs336 === errors;if(_valid2){valid90 = true;passing1 = 0;}const _errs340 = errors;if(data129 && typeof data129 == "object" && !Array.isArray(data129)){for(const key38 in data129){if(!((key38 === "append") || (key38 === "prepend"))){const err254 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err254];}else {vErrors.push(err254);}errors++;}}if(data129.append !== undefined){let data131 = data129.append;if(Array.isArray(data131)){const len17 = data131.length;for(let i19=0; i19<len17; i19++){if(typeof data131[i19] !== "string"){const err255 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i19,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err255];}else {vErrors.push(err255);}errors++;}}}else {const err256 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err256];}else {vErrors.push(err256);}errors++;}}if(data129.prepend !== undefined){let data133 = data129.prepend;if(Array.isArray(data133)){const len18 = data133.length;for(let i20=0; i20<len18; i20++){if(typeof data133[i20] !== "string"){const err257 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i20,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err257];}else {vErrors.push(err257);}errors++;}}}else {const err258 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err258];}else {vErrors.push(err258);}errors++;}}}else {const err259 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err259];}else {vErrors.push(err259);}errors++;}var _valid2 = _errs340 === errors;if(_valid2 && valid90){valid90 = false;passing1 = [passing1, 1];}else {if(_valid2){valid90 = true;passing1 = 1;}}if(!valid90){const err260 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err260];}else {vErrors.push(err260);}errors++;}else {errors = _errs335;if(vErrors !== null){if(_errs335){vErrors.length = _errs335;}else {vErrors = null;}}}}if(data117.ignoreGlobs !== undefined){let data135 = data117.ignoreGlobs;if(Array.isArray(data135)){const len19 = data135.length;for(let i21=0; i21<len19; i21++){let data136 = data135[i21];if(typeof data136 === "string"){if(func2(data136) < 1){const err261 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i21,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err261];}else {vErrors.push(err261);}errors++;}}else {const err262 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i21,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err262];}else {vErrors.push(err262);}errors++;}}}else {const err263 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err263];}else {vErrors.push(err263);}errors++;}}}else {const err264 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err264];}else {vErrors.push(err264);}errors++;}}if(data76.mutation !== undefined){let data137 = data76.mutation;if(data137 && typeof data137 == "object" && !Array.isArray(data137)){for(const key39 in data137){if(!(((((key39 === "enabled") || (key39 === "baselinePath")) || (key39 === "tolerance")) || (key39 === "floors")) || (key39 === "components"))){const err265 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key39},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err265];}else {vErrors.push(err265);}errors++;}}if(data137.enabled !== undefined){if(typeof data137.enabled !== "boolean"){const err266 = {instancePath:instancePath+"/delivery/quality/gates/mutation/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err266];}else {vErrors.push(err266);}errors++;}}if(data137.baselinePath !== undefined){let data139 = data137.baselinePath;const _errs362 = errors;const _errs363 = errors;if(typeof data139 === "string"){if(!pattern0.test(data139)){const err267 = {};if(vErrors === null){vErrors = [err267];}else {vErrors.push(err267);}errors++;}}var valid101 = _errs363 === errors;if(valid101){const err268 = {instancePath:instancePath+"/delivery/quality/gates/mutation/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err268];}else {vErrors.push(err268);}errors++;}else {errors = _errs362;if(vErrors !== null){if(_errs362){vErrors.length = _errs362;}else {vErrors = null;}}}if(typeof data139 === "string"){if(func2(data139) < 1){const err269 = {instancePath:instancePath+"/delivery/quality/gates/mutation/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err269];}else {vErrors.push(err269);}errors++;}}else {const err270 = {instancePath:instancePath+"/delivery/quality/gates/mutation/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err270];}else {vErrors.push(err270);}errors++;}}if(data137.tolerance !== undefined){let data140 = data137.tolerance;if(data140 && typeof data140 == "object" && !Array.isArray(data140)){if(data140.kind === undefined){const err271 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err271];}else {vErrors.push(err271);}errors++;}if(data140.value === undefined){const err272 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err272];}else {vErrors.push(err272);}errors++;}for(const key40 in data140){if(!((key40 === "kind") || (key40 === "value"))){const err273 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key40},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err273];}else {vErrors.push(err273);}errors++;}}if(data140.kind !== undefined){let data141 = data140.kind;if(typeof data141 !== "string"){const err274 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err274];}else {vErrors.push(err274);}errors++;}if(!((data141 === "absolute") || (data141 === "percent"))){const err275 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.mutation.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err275];}else {vErrors.push(err275);}errors++;}}if(data140.value !== undefined){let data142 = data140.value;if((typeof data142 == "number") && (isFinite(data142))){if(data142 < 0 || isNaN(data142)){const err276 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err276];}else {vErrors.push(err276);}errors++;}}else {const err277 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err277];}else {vErrors.push(err277);}errors++;}}}else {const err278 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err278];}else {vErrors.push(err278);}errors++;}}if(data137.floors !== undefined){let data143 = data137.floors;if(data143 && typeof data143 == "object" && !Array.isArray(data143)){for(const key41 in data143){let data144 = data143[key41];if(data144 && typeof data144 == "object" && !Array.isArray(data144)){for(const key42 in data144){let data145 = data144[key42];if(!((typeof data145 == "number") && (isFinite(data145)))){const err279 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key41.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key42.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err279];}else {vErrors.push(err279);}errors++;}}}else {const err280 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key41.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err280];}else {vErrors.push(err280);}errors++;}}}else {const err281 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err281];}else {vErrors.push(err281);}errors++;}}if(data137.components !== undefined){let data146 = data137.components;if(data146 && typeof data146 == "object" && !Array.isArray(data146)){for(const key43 in data146){let data147 = data146[key43];if(Array.isArray(data147)){const len20 = data147.length;for(let i22=0; i22<len20; i22++){let data148 = data147[i22];if(typeof data148 === "string"){if(func2(data148) < 1){const err282 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key43.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i22,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err282];}else {vErrors.push(err282);}errors++;}}else {const err283 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key43.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i22,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err283];}else {vErrors.push(err283);}errors++;}}}else {const err284 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key43.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err284];}else {vErrors.push(err284);}errors++;}}}else {const err285 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err285];}else {vErrors.push(err285);}errors++;}}}else {const err286 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err286];}else {vErrors.push(err286);}errors++;}}if(data76["bundle-size"] !== undefined){let data149 = data76["bundle-size"];if(data149 && typeof data149 == "object" && !Array.isArray(data149)){for(const key44 in data149){if(!((((((key44 === "enabled") || (key44 === "baselinePath")) || (key44 === "tolerance")) || (key44 === "floors")) || (key44 === "components")) || (key44 === "bundles"))){const err287 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key44},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err287];}else {vErrors.push(err287);}errors++;}}if(data149.enabled !== undefined){if(typeof data149.enabled !== "boolean"){const err288 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err288];}else {vErrors.push(err288);}errors++;}}if(data149.baselinePath !== undefined){let data151 = data149.baselinePath;const _errs393 = errors;const _errs394 = errors;if(typeof data151 === "string"){if(!pattern0.test(data151)){const err289 = {};if(vErrors === null){vErrors = [err289];}else {vErrors.push(err289);}errors++;}}var valid109 = _errs394 === errors;if(valid109){const err290 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err290];}else {vErrors.push(err290);}errors++;}else {errors = _errs393;if(vErrors !== null){if(_errs393){vErrors.length = _errs393;}else {vErrors = null;}}}if(typeof data151 === "string"){if(func2(data151) < 1){const err291 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err291];}else {vErrors.push(err291);}errors++;}}else {const err292 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err292];}else {vErrors.push(err292);}errors++;}}if(data149.tolerance !== undefined){let data152 = data149.tolerance;if(data152 && typeof data152 == "object" && !Array.isArray(data152)){if(data152.kind === undefined){const err293 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err293];}else {vErrors.push(err293);}errors++;}if(data152.value === undefined){const err294 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err294];}else {vErrors.push(err294);}errors++;}for(const key45 in data152){if(!((key45 === "kind") || (key45 === "value"))){const err295 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key45},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err295];}else {vErrors.push(err295);}errors++;}}if(data152.kind !== undefined){let data153 = data152.kind;if(typeof data153 !== "string"){const err296 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err296];}else {vErrors.push(err296);}errors++;}if(!((data153 === "absolute") || (data153 === "percent"))){const err297 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties["bundle-size"].properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err297];}else {vErrors.push(err297);}errors++;}}if(data152.value !== undefined){let data154 = data152.value;if((typeof data154 == "number") && (isFinite(data154))){if(data154 < 0 || isNaN(data154)){const err298 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err298];}else {vErrors.push(err298);}errors++;}}else {const err299 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err299];}else {vErrors.push(err299);}errors++;}}}else {const err300 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err300];}else {vErrors.push(err300);}errors++;}}if(data149.floors !== undefined){let data155 = data149.floors;if(data155 && typeof data155 == "object" && !Array.isArray(data155)){for(const key46 in data155){let data156 = data155[key46];if(data156 && typeof data156 == "object" && !Array.isArray(data156)){for(const key47 in data156){let data157 = data156[key47];if(!((typeof data157 == "number") && (isFinite(data157)))){const err301 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key46.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key47.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err301];}else {vErrors.push(err301);}errors++;}}}else {const err302 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key46.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err302];}else {vErrors.push(err302);}errors++;}}}else {const err303 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err303];}else {vErrors.push(err303);}errors++;}}if(data149.components !== undefined){let data158 = data149.components;if(data158 && typeof data158 == "object" && !Array.isArray(data158)){for(const key48 in data158){let data159 = data158[key48];if(Array.isArray(data159)){const len21 = data159.length;for(let i23=0; i23<len21; i23++){let data160 = data159[i23];if(typeof data160 === "string"){if(func2(data160) < 1){const err304 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key48.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err304];}else {vErrors.push(err304);}errors++;}}else {const err305 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key48.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err305];}else {vErrors.push(err305);}errors++;}}}else {const err306 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key48.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err306];}else {vErrors.push(err306);}errors++;}}}else {const err307 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err307];}else {vErrors.push(err307);}errors++;}}if(data149.bundles !== undefined){let data161 = data149.bundles;if(Array.isArray(data161)){const len22 = data161.length;for(let i24=0; i24<len22; i24++){let data162 = data161[i24];if(data162 && typeof data162 == "object" && !Array.isArray(data162)){if(data162.name === undefined){const err308 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err308];}else {vErrors.push(err308);}errors++;}if(data162.path === undefined){const err309 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err309];}else {vErrors.push(err309);}errors++;}if(data162.limit === undefined){const err310 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "limit"},message:"must have required property '"+"limit"+"'"};if(vErrors === null){vErrors = [err310];}else {vErrors.push(err310);}errors++;}for(const key49 in data162){if(!(((key49 === "name") || (key49 === "path")) || (key49 === "limit"))){const err311 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key49},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err311];}else {vErrors.push(err311);}errors++;}}if(data162.name !== undefined){let data163 = data162.name;if(typeof data163 === "string"){if(func2(data163) < 1){const err312 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err312];}else {vErrors.push(err312);}errors++;}}else {const err313 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err313];}else {vErrors.push(err313);}errors++;}}if(data162.path !== undefined){let data164 = data162.path;if(typeof data164 === "string"){if(func2(data164) < 1){const err314 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err314];}else {vErrors.push(err314);}errors++;}}else {const err315 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err315];}else {vErrors.push(err315);}errors++;}}if(data162.limit !== undefined){let data165 = data162.limit;if(typeof data165 === "string"){if(func2(data165) < 1){const err316 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err316];}else {vErrors.push(err316);}errors++;}}else {const err317 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err317];}else {vErrors.push(err317);}errors++;}}}else {const err318 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err318];}else {vErrors.push(err318);}errors++;}}}else {const err319 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err319];}else {vErrors.push(err319);}errors++;}}}else {const err320 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err320];}else {vErrors.push(err320);}errors++;}}if(data76.duplication !== undefined){let data166 = data76.duplication;if(data166 && typeof data166 == "object" && !Array.isArray(data166)){for(const key50 in data166){if(!(((((((key50 === "enabled") || (key50 === "baselinePath")) || (key50 === "tolerance")) || (key50 === "floors")) || (key50 === "components")) || (key50 === "targetDirs")) || (key50 === "ignoreGlobs"))){const err321 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key50},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err321];}else {vErrors.push(err321);}errors++;}}if(data166.enabled !== undefined){if(typeof data166.enabled !== "boolean"){const err322 = {instancePath:instancePath+"/delivery/quality/gates/duplication/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err322];}else {vErrors.push(err322);}errors++;}}if(data166.baselinePath !== undefined){let data168 = data166.baselinePath;const _errs435 = errors;const _errs436 = errors;if(typeof data168 === "string"){if(!pattern0.test(data168)){const err323 = {};if(vErrors === null){vErrors = [err323];}else {vErrors.push(err323);}errors++;}}var valid120 = _errs436 === errors;if(valid120){const err324 = {instancePath:instancePath+"/delivery/quality/gates/duplication/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err324];}else {vErrors.push(err324);}errors++;}else {errors = _errs435;if(vErrors !== null){if(_errs435){vErrors.length = _errs435;}else {vErrors = null;}}}if(typeof data168 === "string"){if(func2(data168) < 1){const err325 = {instancePath:instancePath+"/delivery/quality/gates/duplication/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err325];}else {vErrors.push(err325);}errors++;}}else {const err326 = {instancePath:instancePath+"/delivery/quality/gates/duplication/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err326];}else {vErrors.push(err326);}errors++;}}if(data166.tolerance !== undefined){let data169 = data166.tolerance;if(data169 && typeof data169 == "object" && !Array.isArray(data169)){if(data169.kind === undefined){const err327 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err327];}else {vErrors.push(err327);}errors++;}if(data169.value === undefined){const err328 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err328];}else {vErrors.push(err328);}errors++;}for(const key51 in data169){if(!((key51 === "kind") || (key51 === "value"))){const err329 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key51},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err329];}else {vErrors.push(err329);}errors++;}}if(data169.kind !== undefined){let data170 = data169.kind;if(typeof data170 !== "string"){const err330 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err330];}else {vErrors.push(err330);}errors++;}if(!((data170 === "absolute") || (data170 === "percent"))){const err331 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.duplication.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err331];}else {vErrors.push(err331);}errors++;}}if(data169.value !== undefined){let data171 = data169.value;if((typeof data171 == "number") && (isFinite(data171))){if(data171 < 0 || isNaN(data171)){const err332 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err332];}else {vErrors.push(err332);}errors++;}}else {const err333 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err333];}else {vErrors.push(err333);}errors++;}}}else {const err334 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err334];}else {vErrors.push(err334);}errors++;}}if(data166.floors !== undefined){let data172 = data166.floors;if(data172 && typeof data172 == "object" && !Array.isArray(data172)){for(const key52 in data172){let data173 = data172[key52];if(data173 && typeof data173 == "object" && !Array.isArray(data173)){for(const key53 in data173){let data174 = data173[key53];if(!((typeof data174 == "number") && (isFinite(data174)))){const err335 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key52.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key53.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err335];}else {vErrors.push(err335);}errors++;}}}else {const err336 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key52.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err336];}else {vErrors.push(err336);}errors++;}}}else {const err337 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err337];}else {vErrors.push(err337);}errors++;}}if(data166.components !== undefined){let data175 = data166.components;if(data175 && typeof data175 == "object" && !Array.isArray(data175)){for(const key54 in data175){let data176 = data175[key54];if(Array.isArray(data176)){const len23 = data176.length;for(let i25=0; i25<len23; i25++){let data177 = data176[i25];if(typeof data177 === "string"){if(func2(data177) < 1){const err338 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err338];}else {vErrors.push(err338);}errors++;}}else {const err339 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err339];}else {vErrors.push(err339);}errors++;}}}else {const err340 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key54.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err340];}else {vErrors.push(err340);}errors++;}}}else {const err341 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err341];}else {vErrors.push(err341);}errors++;}}if(data166.targetDirs !== undefined){let data178 = data166.targetDirs;const _errs460 = errors;let valid127 = false;let passing2 = null;const _errs461 = errors;if(Array.isArray(data178)){const len24 = data178.length;for(let i26=0; i26<len24; i26++){if(typeof data178[i26] !== "string"){const err342 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i26,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err342];}else {vErrors.push(err342);}errors++;}}}else {const err343 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err343];}else {vErrors.push(err343);}errors++;}var _valid3 = _errs461 === errors;if(_valid3){valid127 = true;passing2 = 0;}const _errs465 = errors;if(data178 && typeof data178 == "object" && !Array.isArray(data178)){for(const key55 in data178){if(!((key55 === "append") || (key55 === "prepend"))){const err344 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key55},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err344];}else {vErrors.push(err344);}errors++;}}if(data178.append !== undefined){let data180 = data178.append;if(Array.isArray(data180)){const len25 = data180.length;for(let i27=0; i27<len25; i27++){if(typeof data180[i27] !== "string"){const err345 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i27,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err345];}else {vErrors.push(err345);}errors++;}}}else {const err346 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err346];}else {vErrors.push(err346);}errors++;}}if(data178.prepend !== undefined){let data182 = data178.prepend;if(Array.isArray(data182)){const len26 = data182.length;for(let i28=0; i28<len26; i28++){if(typeof data182[i28] !== "string"){const err347 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i28,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err347];}else {vErrors.push(err347);}errors++;}}}else {const err348 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err348];}else {vErrors.push(err348);}errors++;}}}else {const err349 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err349];}else {vErrors.push(err349);}errors++;}var _valid3 = _errs465 === errors;if(_valid3 && valid127){valid127 = false;passing2 = [passing2, 1];}else {if(_valid3){valid127 = true;passing2 = 1;}}if(!valid127){const err350 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err350];}else {vErrors.push(err350);}errors++;}else {errors = _errs460;if(vErrors !== null){if(_errs460){vErrors.length = _errs460;}else {vErrors = null;}}}}if(data166.ignoreGlobs !== undefined){let data184 = data166.ignoreGlobs;if(Array.isArray(data184)){const len27 = data184.length;for(let i29=0; i29<len27; i29++){let data185 = data184[i29];if(typeof data185 === "string"){if(func2(data185) < 1){const err351 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err351];}else {vErrors.push(err351);}errors++;}}else {const err352 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err352];}else {vErrors.push(err352);}errors++;}}}else {const err353 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err353];}else {vErrors.push(err353);}errors++;}}}else {const err354 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err354];}else {vErrors.push(err354);}errors++;}}}else {const err355 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err355];}else {vErrors.push(err355);}errors++;}}if(data75.autoRefresh !== undefined){let data186 = data75.autoRefresh;if(data186 && typeof data186 == "object" && !Array.isArray(data186)){for(const key56 in data186){if(!(key56 === "enabled")){const err356 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key56},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err356];}else {vErrors.push(err356);}errors++;}}if(data186.enabled !== undefined){if(typeof data186.enabled !== "boolean"){const err357 = {instancePath:instancePath+"/delivery/quality/autoRefresh/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err357];}else {vErrors.push(err357);}errors++;}}}else {const err358 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err358];}else {vErrors.push(err358);}errors++;}}if(data75.requireBaselines !== undefined){if(typeof data75.requireBaselines !== "boolean"){const err359 = {instancePath:instancePath+"/delivery/quality/requireBaselines",schemaPath:"#/properties/delivery/properties/quality/properties/requireBaselines/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err359];}else {vErrors.push(err359);}errors++;}}if(data75.navigability !== undefined){let data189 = data75.navigability;if(data189 && typeof data189 == "object" && !Array.isArray(data189)){for(const key57 in data189){if(!(((key57 === "routeGlobs") || (key57 === "navRegistry")) || (key57 === "journeySuite"))){const err360 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err360];}else {vErrors.push(err360);}errors++;}}if(data189.routeGlobs !== undefined){let data190 = data189.routeGlobs;if(Array.isArray(data190)){const len28 = data190.length;for(let i30=0; i30<len28; i30++){if(typeof data190[i30] !== "string"){const err361 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err361];}else {vErrors.push(err361);}errors++;}}}else {const err362 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err362];}else {vErrors.push(err362);}errors++;}}if(data189.navRegistry !== undefined){let data192 = data189.navRegistry;if(Array.isArray(data192)){const len29 = data192.length;for(let i31=0; i31<len29; i31++){if(typeof data192[i31] !== "string"){const err363 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err363];}else {vErrors.push(err363);}errors++;}}}else {const err364 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err364];}else {vErrors.push(err364);}errors++;}}if(data189.journeySuite !== undefined){if(typeof data189.journeySuite !== "string"){const err365 = {instancePath:instancePath+"/delivery/quality/navigability/journeySuite",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/journeySuite/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err365];}else {vErrors.push(err365);}errors++;}}}else {const err366 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err366];}else {vErrors.push(err366);}errors++;}}}else {const err367 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err367];}else {vErrors.push(err367);}errors++;}}if(data49.mergeWatch !== undefined){let data195 = data49.mergeWatch;if(data195 && typeof data195 == "object" && !Array.isArray(data195)){for(const key58 in data195){if(!(((key58 === "mode") || (key58 === "maxWaitSeconds")) || (key58 === "maxBudgetSeconds"))){const err368 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key58},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err368];}else {vErrors.push(err368);}errors++;}}if(data195.mode !== undefined){let data196 = data195.mode;if(typeof data196 !== "string"){const err369 = {instancePath:instancePath+"/delivery/mergeWatch/mode",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/mode/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err369];}else {vErrors.push(err369);}errors++;}if(!((data196 === "sync") || (data196 === "async"))){const err370 = {instancePath:instancePath+"/delivery/mergeWatch/mode",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/mode/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.mergeWatch.properties.mode.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err370];}else {vErrors.push(err370);}errors++;}}if(data195.maxWaitSeconds !== undefined){let data197 = data195.maxWaitSeconds;if(!(((typeof data197 == "number") && (!(data197 % 1) && !isNaN(data197))) && (isFinite(data197)))){const err371 = {instancePath:instancePath+"/delivery/mergeWatch/maxWaitSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxWaitSeconds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err371];}else {vErrors.push(err371);}errors++;}if((typeof data197 == "number") && (isFinite(data197))){if(data197 < 1 || isNaN(data197)){const err372 = {instancePath:instancePath+"/delivery/mergeWatch/maxWaitSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxWaitSeconds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err372];}else {vErrors.push(err372);}errors++;}}}if(data195.maxBudgetSeconds !== undefined){let data198 = data195.maxBudgetSeconds;if(!(((typeof data198 == "number") && (!(data198 % 1) && !isNaN(data198))) && (isFinite(data198)))){const err373 = {instancePath:instancePath+"/delivery/mergeWatch/maxBudgetSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxBudgetSeconds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err373];}else {vErrors.push(err373);}errors++;}if((typeof data198 == "number") && (isFinite(data198))){if(data198 < 1 || isNaN(data198)){const err374 = {instancePath:instancePath+"/delivery/mergeWatch/maxBudgetSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxBudgetSeconds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err374];}else {vErrors.push(err374);}errors++;}}}}else {const err375 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err375];}else {vErrors.push(err375);}errors++;}}if(data49.codeReview !== undefined){let data199 = data49.codeReview;if(data199 && typeof data199 == "object" && !Array.isArray(data199)){for(const key59 in data199){if(!((key59 === "providers") || (key59 === "autoFixSeverity"))){const err376 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key59},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err376];}else {vErrors.push(err376);}errors++;}}if(data199.providers !== undefined){let data200 = data199.providers;if(Array.isArray(data200)){const len30 = data200.length;for(let i32=0; i32<len30; i32++){let data201 = data200[i32];if(data201 && typeof data201 == "object" && !Array.isArray(data201)){if(data201.name === undefined){const err377 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err377];}else {vErrors.push(err377);}errors++;}for(const key60 in data201){if(!(((((key60 === "name") || (key60 === "scopes")) || (key60 === "optional")) || (key60 === "manualPrompt")) || (key60 === "when"))){const err378 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key60},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err378];}else {vErrors.push(err378);}errors++;}}if(data201.name !== undefined){let data202 = data201.name;if(typeof data202 !== "string"){const err379 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err379];}else {vErrors.push(err379);}errors++;}if(!(((((data202 === "native") || (data202 === "code-review")) || (data202 === "codex")) || (data202 === "security-review")) || (data202 === "ultrareview"))){const err380 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.name.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err380];}else {vErrors.push(err380);}errors++;}}if(data201.scopes !== undefined){let data203 = data201.scopes;if(Array.isArray(data203)){const len31 = data203.length;for(let i33=0; i33<len31; i33++){let data204 = data203[i33];if(typeof data204 !== "string"){const err381 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/scopes/" + i33,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err381];}else {vErrors.push(err381);}errors++;}if(!((data204 === "story") || (data204 === "epic"))){const err382 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/scopes/" + i33,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.scopes.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err382];}else {vErrors.push(err382);}errors++;}}}else {const err383 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/scopes",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err383];}else {vErrors.push(err383);}errors++;}}if(data201.optional !== undefined){if(typeof data201.optional !== "boolean"){const err384 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/optional",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/optional/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err384];}else {vErrors.push(err384);}errors++;}}if(data201.manualPrompt !== undefined){if(typeof data201.manualPrompt !== "boolean"){const err385 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/manualPrompt",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/manualPrompt/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err385];}else {vErrors.push(err385);}errors++;}}if(data201.when !== undefined){let data207 = data201.when;if(data207 && typeof data207 == "object" && !Array.isArray(data207)){for(const key61 in data207){if(!((key61 === "label") || (key61 === "labelAny"))){const err386 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key61},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err386];}else {vErrors.push(err386);}errors++;}}if(data207.label !== undefined){let data208 = data207.label;if(typeof data208 === "string"){if(func2(data208) < 1){const err387 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err387];}else {vErrors.push(err387);}errors++;}}else {const err388 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err388];}else {vErrors.push(err388);}errors++;}}if(data207.labelAny !== undefined){let data209 = data207.labelAny;if(Array.isArray(data209)){if(data209.length < 1){const err389 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err389];}else {vErrors.push(err389);}errors++;}const len32 = data209.length;for(let i34=0; i34<len32; i34++){let data210 = data209[i34];if(typeof data210 === "string"){if(func2(data210) < 1){const err390 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny/" + i34,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err390];}else {vErrors.push(err390);}errors++;}}else {const err391 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny/" + i34,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err391];}else {vErrors.push(err391);}errors++;}}}else {const err392 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err392];}else {vErrors.push(err392);}errors++;}}}else {const err393 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err393];}else {vErrors.push(err393);}errors++;}}}else {const err394 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err394];}else {vErrors.push(err394);}errors++;}}}else {const err395 = {instancePath:instancePath+"/delivery/codeReview/providers",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err395];}else {vErrors.push(err395);}errors++;}}if(data199.autoFixSeverity !== undefined){let data211 = data199.autoFixSeverity;if(typeof data211 !== "string"){const err396 = {instancePath:instancePath+"/delivery/codeReview/autoFixSeverity",schemaPath:"#/properties/delivery/properties/codeReview/properties/autoFixSeverity/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err396];}else {vErrors.push(err396);}errors++;}if(!((data211 === "high") || (data211 === "medium"))){const err397 = {instancePath:instancePath+"/delivery/codeReview/autoFixSeverity",schemaPath:"#/properties/delivery/properties/codeReview/properties/autoFixSeverity/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.autoFixSeverity.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err397];}else {vErrors.push(err397);}errors++;}}}else {const err398 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err398];}else {vErrors.push(err398);}errors++;}}if(data49.refactorStage !== undefined){let data212 = data49.refactorStage;if(data212 && typeof data212 == "object" && !Array.isArray(data212)){for(const key62 in data212){if(!(key62 === "enabled")){const err399 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key62},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err399];}else {vErrors.push(err399);}errors++;}}if(data212.enabled !== undefined){if(typeof data212.enabled !== "boolean"){const err400 = {instancePath:instancePath+"/delivery/refactorStage/enabled",schemaPath:"#/properties/delivery/properties/refactorStage/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err400];}else {vErrors.push(err400);}errors++;}}}else {const err401 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err401];}else {vErrors.push(err401);}errors++;}}if(data49.acceptanceEval !== undefined){let data214 = data49.acceptanceEval;if(data214 && typeof data214 == "object" && !Array.isArray(data214)){for(const key63 in data214){if(!(key63 === "maxRounds")){const err402 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err402];}else {vErrors.push(err402);}errors++;}}if(data214.maxRounds !== undefined){let data215 = data214.maxRounds;if(!(((typeof data215 == "number") && (!(data215 % 1) && !isNaN(data215))) && (isFinite(data215)))){const err403 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err403];}else {vErrors.push(err403);}errors++;}if((typeof data215 == "number") && (isFinite(data215))){if(data215 < 0 || isNaN(data215)){const err404 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err404];}else {vErrors.push(err404);}errors++;}}}}else {const err405 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err405];}else {vErrors.push(err405);}errors++;}}if(data49.feedbackLoop !== undefined){let data216 = data49.feedbackLoop;if(data216 && typeof data216 == "object" && !Array.isArray(data216)){for(const key64 in data216){if(!(key64 === "retroProposals")){const err406 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key64},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err406];}else {vErrors.push(err406);}errors++;}}if(data216.retroProposals !== undefined){if(typeof data216.retroProposals !== "boolean"){const err407 = {instancePath:instancePath+"/delivery/feedbackLoop/retroProposals",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/retroProposals/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err407];}else {vErrors.push(err407);}errors++;}}}else {const err408 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err408];}else {vErrors.push(err408);}errors++;}}if(data49.ci !== undefined){let data218 = data49.ci;if(data218 && typeof data218 == "object" && !Array.isArray(data218)){for(const key65 in data218){if(!((((key65 === "autoMerge") || (key65 === "blockOnAdvisoryFailure")) || (key65 === "advisoryAllowlist")) || (key65 === "rerunAdvisory"))){const err409 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key65},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err409];}else {vErrors.push(err409);}errors++;}}if(data218.autoMerge !== undefined){let data219 = data218.autoMerge;if(typeof data219 !== "string"){const err410 = {instancePath:instancePath+"/delivery/ci/autoMerge",schemaPath:"#/properties/delivery/properties/ci/properties/autoMerge/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err410];}else {vErrors.push(err410);}errors++;}if(!((data219 === "trust-ci") || (data219 === "strict"))){const err411 = {instancePath:instancePath+"/delivery/ci/autoMerge",schemaPath:"#/properties/delivery/properties/ci/properties/autoMerge/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.ci.properties.autoMerge.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err411];}else {vErrors.push(err411);}errors++;}}if(data218.blockOnAdvisoryFailure !== undefined){if(typeof data218.blockOnAdvisoryFailure !== "boolean"){const err412 = {instancePath:instancePath+"/delivery/ci/blockOnAdvisoryFailure",schemaPath:"#/properties/delivery/properties/ci/properties/blockOnAdvisoryFailure/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err412];}else {vErrors.push(err412);}errors++;}}if(data218.advisoryAllowlist !== undefined){let data221 = data218.advisoryAllowlist;if(Array.isArray(data221)){const len33 = data221.length;for(let i35=0; i35<len33; i35++){if(typeof data221[i35] !== "string"){const err413 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i35,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err413];}else {vErrors.push(err413);}errors++;}}}else {const err414 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist",schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err414];}else {vErrors.push(err414);}errors++;}}if(data218.rerunAdvisory !== undefined){let data223 = data218.rerunAdvisory;if(!(((typeof data223 == "number") && (!(data223 % 1) && !isNaN(data223))) && (isFinite(data223)))){const err415 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err415];}else {vErrors.push(err415);}errors++;}if((typeof data223 == "number") && (isFinite(data223))){if(data223 < 0 || isNaN(data223)){const err416 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err416];}else {vErrors.push(err416);}errors++;}}}}else {const err417 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err417];}else {vErrors.push(err417);}errors++;}}if(data49.routing !== undefined){let data224 = data49.routing;if(data224 && typeof data224 == "object" && !Array.isArray(data224)){for(const key66 in data224){if(!(((key66 === "roleScopedAgents") || (key66 === "ceremonyProfile")) || (key66 === "closeAndLand"))){const err418 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key66},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err418];}else {vErrors.push(err418);}errors++;}}if(data224.roleScopedAgents !== undefined){if(typeof data224.roleScopedAgents !== "boolean"){const err419 = {instancePath:instancePath+"/delivery/routing/roleScopedAgents",schemaPath:"#/properties/delivery/properties/routing/properties/roleScopedAgents/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err419];}else {vErrors.push(err419);}errors++;}}if(data224.ceremonyProfile !== undefined){let data226 = data224.ceremonyProfile;if(typeof data226 !== "string"){const err420 = {instancePath:instancePath+"/delivery/routing/ceremonyProfile",schemaPath:"#/properties/delivery/properties/routing/properties/ceremonyProfile/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err420];}else {vErrors.push(err420);}errors++;}if(!(((data226 === "minimal") || (data226 === "standard")) || (data226 === "strict"))){const err421 = {instancePath:instancePath+"/delivery/routing/ceremonyProfile",schemaPath:"#/properties/delivery/properties/routing/properties/ceremonyProfile/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.routing.properties.ceremonyProfile.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err421];}else {vErrors.push(err421);}errors++;}}if(data224.closeAndLand !== undefined){if(typeof data224.closeAndLand !== "boolean"){const err422 = {instancePath:instancePath+"/delivery/routing/closeAndLand",schemaPath:"#/properties/delivery/properties/routing/properties/closeAndLand/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err422];}else {vErrors.push(err422);}errors++;}}}else {const err423 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err423];}else {vErrors.push(err423);}errors++;}}}else {const err424 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err424];}else {vErrors.push(err424);}errors++;}}if(data.qa !== undefined){let data228 = data.qa;if(data228 && typeof data228 == "object" && !Array.isArray(data228)){for(const key67 in data228){if(!(((((((key67 === "featureRoot") || (key67 === "fixturesManifest")) || (key67 === "environments")) || (key67 === "personas")) || (key67 === "gherkinLint")) || (key67 === "consoleAllowlist")) || (key67 === "designTokens"))){const err425 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key67},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err425];}else {vErrors.push(err425);}errors++;}}if(data228.featureRoot !== undefined){let data229 = data228.featureRoot;const _errs580 = errors;const _errs581 = errors;if(typeof data229 === "string"){if(!pattern0.test(data229)){const err426 = {};if(vErrors === null){vErrors = [err426];}else {vErrors.push(err426);}errors++;}}var valid161 = _errs581 === errors;if(valid161){const err427 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err427];}else {vErrors.push(err427);}errors++;}else {errors = _errs580;if(vErrors !== null){if(_errs580){vErrors.length = _errs580;}else {vErrors = null;}}}if(typeof data229 === "string"){if(func2(data229) < 1){const err428 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err428];}else {vErrors.push(err428);}errors++;}}else {const err429 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err429];}else {vErrors.push(err429);}errors++;}}if(data228.fixturesManifest !== undefined){let data230 = data228.fixturesManifest;const _errs584 = errors;const _errs585 = errors;if(typeof data230 === "string"){if(!pattern0.test(data230)){const err430 = {};if(vErrors === null){vErrors = [err430];}else {vErrors.push(err430);}errors++;}}var valid162 = _errs585 === errors;if(valid162){const err431 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err431];}else {vErrors.push(err431);}errors++;}else {errors = _errs584;if(vErrors !== null){if(_errs584){vErrors.length = _errs584;}else {vErrors = null;}}}if(typeof data230 === "string"){if(func2(data230) < 1){const err432 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err432];}else {vErrors.push(err432);}errors++;}}else {const err433 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err433];}else {vErrors.push(err433);}errors++;}}if(data228.environments !== undefined){let data231 = data228.environments;if(data231 && typeof data231 == "object" && !Array.isArray(data231)){if(Object.keys(data231).length < 1){const err434 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/minProperties",keyword:"minProperties",params:{limit: 1},message:"must NOT have fewer than 1 properties"};if(vErrors === null){vErrors = [err434];}else {vErrors.push(err434);}errors++;}for(const key68 in data231){let data232 = data231[key68];if(data232 && typeof data232 == "object" && !Array.isArray(data232)){if(data232.baseUrl === undefined){const err435 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/required",keyword:"required",params:{missingProperty: "baseUrl"},message:"must have required property '"+"baseUrl"+"'"};if(vErrors === null){vErrors = [err435];}else {vErrors.push(err435);}errors++;}for(const key69 in data232){if(!(((key69 === "baseUrl") || (key69 === "signInSeam")) || (key69 === "allowWrites"))){const err436 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err436];}else {vErrors.push(err436);}errors++;}}if(data232.baseUrl !== undefined){let data233 = data232.baseUrl;const _errs594 = errors;const _errs595 = errors;if(typeof data233 === "string"){if(!pattern0.test(data233)){const err437 = {};if(vErrors === null){vErrors = [err437];}else {vErrors.push(err437);}errors++;}}var valid165 = _errs595 === errors;if(valid165){const err438 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/baseUrl",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/baseUrl/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err438];}else {vErrors.push(err438);}errors++;}else {errors = _errs594;if(vErrors !== null){if(_errs594){vErrors.length = _errs594;}else {vErrors = null;}}}if(typeof data233 === "string"){if(func2(data233) < 1){const err439 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/baseUrl",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/baseUrl/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err439];}else {vErrors.push(err439);}errors++;}}else {const err440 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/baseUrl",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/baseUrl/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err440];}else {vErrors.push(err440);}errors++;}}if(data232.signInSeam !== undefined){let data234 = data232.signInSeam;const _errs597 = errors;let valid166 = false;let passing3 = null;const _errs598 = errors;if(data234 && typeof data234 == "object" && !Array.isArray(data234)){if(data234.urlTemplate === undefined){const err441 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/required",keyword:"required",params:{missingProperty: "urlTemplate"},message:"must have required property '"+"urlTemplate"+"'"};if(vErrors === null){vErrors = [err441];}else {vErrors.push(err441);}errors++;}for(const key70 in data234){if(!(key70 === "urlTemplate")){const err442 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key70},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err442];}else {vErrors.push(err442);}errors++;}}if(data234.urlTemplate !== undefined){let data235 = data234.urlTemplate;const _errs603 = errors;const _errs604 = errors;if(typeof data235 === "string"){if(!pattern0.test(data235)){const err443 = {};if(vErrors === null){vErrors = [err443];}else {vErrors.push(err443);}errors++;}}var valid168 = _errs604 === errors;if(valid168){const err444 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/urlTemplate",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/properties/urlTemplate/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err444];}else {vErrors.push(err444);}errors++;}else {errors = _errs603;if(vErrors !== null){if(_errs603){vErrors.length = _errs603;}else {vErrors = null;}}}if(typeof data235 === "string"){if(func2(data235) < 1){const err445 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/urlTemplate",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/properties/urlTemplate/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err445];}else {vErrors.push(err445);}errors++;}}else {const err446 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/urlTemplate",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/properties/urlTemplate/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err446];}else {vErrors.push(err446);}errors++;}}}else {const err447 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err447];}else {vErrors.push(err447);}errors++;}var _valid4 = _errs598 === errors;if(_valid4){valid166 = true;passing3 = 0;}const _errs605 = errors;if(data234 && typeof data234 == "object" && !Array.isArray(data234)){if(data234.skill === undefined){const err448 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/required",keyword:"required",params:{missingProperty: "skill"},message:"must have required property '"+"skill"+"'"};if(vErrors === null){vErrors = [err448];}else {vErrors.push(err448);}errors++;}for(const key71 in data234){if(!(key71 === "skill")){const err449 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key71},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err449];}else {vErrors.push(err449);}errors++;}}if(data234.skill !== undefined){let data236 = data234.skill;const _errs610 = errors;const _errs611 = errors;if(typeof data236 === "string"){if(!pattern0.test(data236)){const err450 = {};if(vErrors === null){vErrors = [err450];}else {vErrors.push(err450);}errors++;}}var valid170 = _errs611 === errors;if(valid170){const err451 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err451];}else {vErrors.push(err451);}errors++;}else {errors = _errs610;if(vErrors !== null){if(_errs610){vErrors.length = _errs610;}else {vErrors = null;}}}if(typeof data236 === "string"){if(func2(data236) < 1){const err452 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err452];}else {vErrors.push(err452);}errors++;}if(!pattern25.test(data236)){const err453 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/pattern",keyword:"pattern",params:{pattern: "^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"},message:"must match pattern \""+"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"+"\""};if(vErrors === null){vErrors = [err453];}else {vErrors.push(err453);}errors++;}}else {const err454 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err454];}else {vErrors.push(err454);}errors++;}}}else {const err455 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err455];}else {vErrors.push(err455);}errors++;}var _valid4 = _errs605 === errors;if(_valid4 && valid166){valid166 = false;passing3 = [passing3, 1];}else {if(_valid4){valid166 = true;passing3 = 1;}}if(!valid166){const err456 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err456];}else {vErrors.push(err456);}errors++;}else {errors = _errs597;if(vErrors !== null){if(_errs597){vErrors.length = _errs597;}else {vErrors = null;}}}}if(data232.allowWrites !== undefined){if(typeof data232.allowWrites !== "boolean"){const err457 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/allowWrites",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/allowWrites/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err457];}else {vErrors.push(err457);}errors++;}}}else {const err458 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err458];}else {vErrors.push(err458);}errors++;}}}else {const err459 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err459];}else {vErrors.push(err459);}errors++;}}if(data228.personas !== undefined){let data238 = data228.personas;const _errs615 = errors;let valid171 = false;let passing4 = null;const _errs616 = errors;if(Array.isArray(data238)){if(data238.length < 1){const err460 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/0/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err460];}else {vErrors.push(err460);}errors++;}const len34 = data238.length;for(let i36=0; i36<len34; i36++){let data239 = data238[i36];const _errs620 = errors;const _errs621 = errors;if(typeof data239 === "string"){if(!pattern0.test(data239)){const err461 = {};if(vErrors === null){vErrors = [err461];}else {vErrors.push(err461);}errors++;}}var valid174 = _errs621 === errors;if(valid174){const err462 = {instancePath:instancePath+"/qa/personas/" + i36,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err462];}else {vErrors.push(err462);}errors++;}else {errors = _errs620;if(vErrors !== null){if(_errs620){vErrors.length = _errs620;}else {vErrors = null;}}}if(typeof data239 === "string"){if(func2(data239) < 1){const err463 = {instancePath:instancePath+"/qa/personas/" + i36,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err463];}else {vErrors.push(err463);}errors++;}}else {const err464 = {instancePath:instancePath+"/qa/personas/" + i36,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err464];}else {vErrors.push(err464);}errors++;}}}else {const err465 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err465];}else {vErrors.push(err465);}errors++;}var _valid5 = _errs616 === errors;if(_valid5){valid171 = true;passing4 = 0;}const _errs622 = errors;if(data238 && typeof data238 == "object" && !Array.isArray(data238)){if(Object.keys(data238).length < 1){const err466 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/1/minProperties",keyword:"minProperties",params:{limit: 1},message:"must NOT have fewer than 1 properties"};if(vErrors === null){vErrors = [err466];}else {vErrors.push(err466);}errors++;}for(const key72 in data238){let data240 = data238[key72];const _errs626 = errors;let valid176 = false;let passing5 = null;const _errs627 = errors;if(data240 && typeof data240 == "object" && !Array.isArray(data240)){if(data240.credentialRef === undefined){const err467 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/required",keyword:"required",params:{missingProperty: "credentialRef"},message:"must have required property '"+"credentialRef"+"'"};if(vErrors === null){vErrors = [err467];}else {vErrors.push(err467);}errors++;}for(const key73 in data240){if(!(key73 === "credentialRef")){const err468 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key73},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err468];}else {vErrors.push(err468);}errors++;}}if(data240.credentialRef !== undefined){let data241 = data240.credentialRef;const _errs632 = errors;const _errs633 = errors;if(typeof data241 === "string"){if(!pattern0.test(data241)){const err469 = {};if(vErrors === null){vErrors = [err469];}else {vErrors.push(err469);}errors++;}}var valid178 = _errs633 === errors;if(valid178){const err470 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/credentialRef",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/properties/credentialRef/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err470];}else {vErrors.push(err470);}errors++;}else {errors = _errs632;if(vErrors !== null){if(_errs632){vErrors.length = _errs632;}else {vErrors = null;}}}if(typeof data241 === "string"){if(func2(data241) < 1){const err471 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/credentialRef",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/properties/credentialRef/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err471];}else {vErrors.push(err471);}errors++;}}else {const err472 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/credentialRef",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/properties/credentialRef/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err472];}else {vErrors.push(err472);}errors++;}}}else {const err473 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err473];}else {vErrors.push(err473);}errors++;}var _valid6 = _errs627 === errors;if(_valid6){valid176 = true;passing5 = 0;}const _errs634 = errors;if(data240 && typeof data240 == "object" && !Array.isArray(data240)){if(data240.signInSkill === undefined){const err474 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/required",keyword:"required",params:{missingProperty: "signInSkill"},message:"must have required property '"+"signInSkill"+"'"};if(vErrors === null){vErrors = [err474];}else {vErrors.push(err474);}errors++;}for(const key74 in data240){if(!(key74 === "signInSkill")){const err475 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err475];}else {vErrors.push(err475);}errors++;}}if(data240.signInSkill !== undefined){let data242 = data240.signInSkill;const _errs639 = errors;const _errs640 = errors;if(typeof data242 === "string"){if(!pattern0.test(data242)){const err476 = {};if(vErrors === null){vErrors = [err476];}else {vErrors.push(err476);}errors++;}}var valid180 = _errs640 === errors;if(valid180){const err477 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSkill",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/properties/signInSkill/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err477];}else {vErrors.push(err477);}errors++;}else {errors = _errs639;if(vErrors !== null){if(_errs639){vErrors.length = _errs639;}else {vErrors = null;}}}if(typeof data242 === "string"){if(func2(data242) < 1){const err478 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSkill",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/properties/signInSkill/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err478];}else {vErrors.push(err478);}errors++;}}else {const err479 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSkill",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/properties/signInSkill/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err479];}else {vErrors.push(err479);}errors++;}}}else {const err480 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err480];}else {vErrors.push(err480);}errors++;}var _valid6 = _errs634 === errors;if(_valid6 && valid176){valid176 = false;passing5 = [passing5, 1];}else {if(_valid6){valid176 = true;passing5 = 1;}}if(!valid176){const err481 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err481];}else {vErrors.push(err481);}errors++;}else {errors = _errs626;if(vErrors !== null){if(_errs626){vErrors.length = _errs626;}else {vErrors = null;}}}}}else {const err482 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err482];}else {vErrors.push(err482);}errors++;}var _valid5 = _errs622 === errors;if(_valid5 && valid171){valid171 = false;passing4 = [passing4, 1];}else {if(_valid5){valid171 = true;passing4 = 1;}}if(!valid171){const err483 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err483];}else {vErrors.push(err483);}errors++;}else {errors = _errs615;if(vErrors !== null){if(_errs615){vErrors.length = _errs615;}else {vErrors = null;}}}}if(data228.gherkinLint !== undefined){let data243 = data228.gherkinLint;if(data243 && typeof data243 == "object" && !Array.isArray(data243)){if(data243.scopes === undefined){const err484 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/required",keyword:"required",params:{missingProperty: "scopes"},message:"must have required property '"+"scopes"+"'"};if(vErrors === null){vErrors = [err484];}else {vErrors.push(err484);}errors++;}for(const key75 in data243){if(!(((key75 === "scopes") || (key75 === "exemptionTags")) || (key75 === "stepWaivers"))){const err485 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err485];}else {vErrors.push(err485);}errors++;}}if(data243.scopes !== undefined){let data244 = data243.scopes;if(data244 && typeof data244 == "object" && !Array.isArray(data244)){if(Object.keys(data244).length < 1){const err486 = {instancePath:instancePath+"/qa/gherkinLint/scopes",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/minProperties",keyword:"minProperties",params:{limit: 1},message:"must NOT have fewer than 1 properties"};if(vErrors === null){vErrors = [err486];}else {vErrors.push(err486);}errors++;}for(const key76 in data244){let data245 = data244[key76];if(data245 && typeof data245 == "object" && !Array.isArray(data245)){if(data245.featureRoots === undefined){const err487 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/required",keyword:"required",params:{missingProperty: "featureRoots"},message:"must have required property '"+"featureRoots"+"'"};if(vErrors === null){vErrors = [err487];}else {vErrors.push(err487);}errors++;}if(data245.stepRoots === undefined){const err488 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/required",keyword:"required",params:{missingProperty: "stepRoots"},message:"must have required property '"+"stepRoots"+"'"};if(vErrors === null){vErrors = [err488];}else {vErrors.push(err488);}errors++;}for(const key77 in data245){if(!((key77 === "featureRoots") || (key77 === "stepRoots"))){const err489 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err489];}else {vErrors.push(err489);}errors++;}}if(data245.featureRoots !== undefined){let data246 = data245.featureRoots;if(Array.isArray(data246)){if(data246.length < 1){const err490 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err490];}else {vErrors.push(err490);}errors++;}const len35 = data246.length;for(let i37=0; i37<len35; i37++){let data247 = data246[i37];const _errs654 = errors;const _errs655 = errors;if(typeof data247 === "string"){if(!pattern0.test(data247)){const err491 = {};if(vErrors === null){vErrors = [err491];}else {vErrors.push(err491);}errors++;}}var valid186 = _errs655 === errors;if(valid186){const err492 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i37,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err492];}else {vErrors.push(err492);}errors++;}else {errors = _errs654;if(vErrors !== null){if(_errs654){vErrors.length = _errs654;}else {vErrors = null;}}}if(typeof data247 === "string"){if(func2(data247) < 1){const err493 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i37,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err493];}else {vErrors.push(err493);}errors++;}}else {const err494 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i37,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err494];}else {vErrors.push(err494);}errors++;}}}else {const err495 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err495];}else {vErrors.push(err495);}errors++;}}if(data245.stepRoots !== undefined){let data248 = data245.stepRoots;if(Array.isArray(data248)){if(data248.length < 1){const err496 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err496];}else {vErrors.push(err496);}errors++;}const len36 = data248.length;for(let i38=0; i38<len36; i38++){let data249 = data248[i38];const _errs660 = errors;const _errs661 = errors;if(typeof data249 === "string"){if(!pattern0.test(data249)){const err497 = {};if(vErrors === null){vErrors = [err497];}else {vErrors.push(err497);}errors++;}}var valid189 = _errs661 === errors;if(valid189){const err498 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i38,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err498];}else {vErrors.push(err498);}errors++;}else {errors = _errs660;if(vErrors !== null){if(_errs660){vErrors.length = _errs660;}else {vErrors = null;}}}if(typeof data249 === "string"){if(func2(data249) < 1){const err499 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i38,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err499];}else {vErrors.push(err499);}errors++;}}else {const err500 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i38,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err500];}else {vErrors.push(err500);}errors++;}}}else {const err501 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err501];}else {vErrors.push(err501);}errors++;}}}else {const err502 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err502];}else {vErrors.push(err502);}errors++;}}}else {const err503 = {instancePath:instancePath+"/qa/gherkinLint/scopes",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err503];}else {vErrors.push(err503);}errors++;}}if(data243.exemptionTags !== undefined){let data250 = data243.exemptionTags;if(Array.isArray(data250)){const len37 = data250.length;for(let i39=0; i39<len37; i39++){let data251 = data250[i39];const _errs666 = errors;const _errs667 = errors;if(typeof data251 === "string"){if(!pattern0.test(data251)){const err504 = {};if(vErrors === null){vErrors = [err504];}else {vErrors.push(err504);}errors++;}}var valid192 = _errs667 === errors;if(valid192){const err505 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i39,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err505];}else {vErrors.push(err505);}errors++;}else {errors = _errs666;if(vErrors !== null){if(_errs666){vErrors.length = _errs666;}else {vErrors = null;}}}if(typeof data251 === "string"){if(func2(data251) < 1){const err506 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i39,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err506];}else {vErrors.push(err506);}errors++;}}else {const err507 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i39,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err507];}else {vErrors.push(err507);}errors++;}}}else {const err508 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags",schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err508];}else {vErrors.push(err508);}errors++;}}if(data243.stepWaivers !== undefined){let data252 = data243.stepWaivers;if(Array.isArray(data252)){const len38 = data252.length;for(let i40=0; i40<len38; i40++){let data253 = data252[i40];if(typeof data253 === "string"){if(func2(data253) < 1){const err509 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i40,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err509];}else {vErrors.push(err509);}errors++;}}else {const err510 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i40,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err510];}else {vErrors.push(err510);}errors++;}}}else {const err511 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers",schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err511];}else {vErrors.push(err511);}errors++;}}}else {const err512 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err512];}else {vErrors.push(err512);}errors++;}}if(data228.consoleAllowlist !== undefined){let data254 = data228.consoleAllowlist;if(Array.isArray(data254)){const len39 = data254.length;for(let i41=0; i41<len39; i41++){let data255 = data254[i41];const _errs676 = errors;const _errs677 = errors;if(typeof data255 === "string"){if(!pattern0.test(data255)){const err513 = {};if(vErrors === null){vErrors = [err513];}else {vErrors.push(err513);}errors++;}}var valid197 = _errs677 === errors;if(valid197){const err514 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i41,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err514];}else {vErrors.push(err514);}errors++;}else {errors = _errs676;if(vErrors !== null){if(_errs676){vErrors.length = _errs676;}else {vErrors = null;}}}if(typeof data255 === "string"){if(func2(data255) < 1){const err515 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i41,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err515];}else {vErrors.push(err515);}errors++;}}else {const err516 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i41,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err516];}else {vErrors.push(err516);}errors++;}}}else {const err517 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err517];}else {vErrors.push(err517);}errors++;}}if(data228.designTokens !== undefined){let data256 = data228.designTokens;const _errs680 = errors;const _errs681 = errors;if(typeof data256 === "string"){if(!pattern0.test(data256)){const err518 = {};if(vErrors === null){vErrors = [err518];}else {vErrors.push(err518);}errors++;}}var valid198 = _errs681 === errors;if(valid198){const err519 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err519];}else {vErrors.push(err519);}errors++;}else {errors = _errs680;if(vErrors !== null){if(_errs680){vErrors.length = _errs680;}else {vErrors = null;}}}if(typeof data256 === "string"){if(func2(data256) < 1){const err520 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err520];}else {vErrors.push(err520);}errors++;}}else {const err521 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err521];}else {vErrors.push(err521);}errors++;}}}else {const err522 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err522];}else {vErrors.push(err522);}errors++;}}}else {const err523 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err523];}else {vErrors.push(err523);}errors++;}validate10.errors = vErrors;return errors === 0;}
|
|
16
|
+
"use strict";export const validate = validate10;export default validate10;const schema11 = {"type":"object","required":["project"],"properties":{"$schema":{"type":"string","description":"Editor pointer at the shipped JSON-Schema mirror. Not read by the runtime."},"project":{"type":"object","description":"Project identity, filesystem roots, planner docs context, and the commands the close-validation chain spawns.","required":["paths"],"properties":{"baseBranch":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"description":"Branch every `story-<id>` branch is seeded from and every Story PR targets.","default":"main"},"paths":{"type":"object","description":"The three required filesystem roots. Every `${dir}Root` the framework needs is derived at runtime as `${agentRoot}/<dir>`, and the audit output dir as `${tempRoot}/audits`.","required":["agentRoot","docsRoot","tempRoot"],"properties":{"agentRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the materialized framework tree (`mandrel sync` writes here).","default":".agents"},"docsRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the project documentation the planner reads for context.","default":"docs"},"tempRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative gitignored scratch root. Every temporary artifact — gate transcripts, audit reports, plan authoring dirs — lands under it.","default":"temp"}},"additionalProperties":false},"docsContextFiles":{"type":"array","items":{"type":"string"},"description":"Files under `paths.docsRoot` the planner treats as standing context. Read digest-first — the docs digest names the file and the line range, and only the named section is pulled.","default":["architecture.md","data-dictionary.md","decisions.md","patterns.md"]},"commands":{"type":"object","description":"Shell commands the close-validation chain spawns. Each is run from the repo root.","properties":{"test":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Full test-suite command run by the close-validation chain.","default":"npm test"},"typecheck":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Static type-check command. `null` disables the gate for projects with no type layer; the empty string is rejected so a typo cannot silently disable it.","default":null},"lint":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Lint command run as a close-validation gate. `null` (the default) uses `npm run lint`; the gate is mandatory, so unlike `typecheck` this key cannot disable it. Point it at the scoped command your hooks already run to stop paying for a third whole-repo lint at close — the gate still lints the diff, and CI still owns whole-repo drift. Like every command here it must be a single argv (no `;`, `&&`, pipes or substitution), so wrap a multi-linter pair in one npm script and name that.","default":null},"formatCheck":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Non-mutating format verification run as a close-validation gate.","default":"npx biome format ."},"formatWrite":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Mutating format command the close-time format-autofix step spawns.","default":"npx biome format --write ."}},"additionalProperties":false}},"additionalProperties":false},"github":{"type":"object","description":"GitHub provider identity plus the remote stance the bootstrap enforces. `owner`, `repo`, and `operatorHandle` are operator identity — the shipped values are placeholders, not usable defaults.","required":["owner","repo","operatorHandle"],"properties":{"owner":{"type":"string","minLength":1,"description":"GitHub owner (user or org) that hosts the repository.","default":"[OWNER]"},"repo":{"type":"string","minLength":1,"description":"Repository name under `owner`.","default":"[REPO]"},"projectNumber":{"type":["integer","null"],"minimum":1,"description":"Projects V2 board number the orchestrator syncs Story status onto. `null` disables board sync.","default":null},"projectOwner":{"type":["string","null"],"minLength":1,"description":"Owner of the Projects V2 board when it lives outside `owner` (an org board fed by a user repo). `null` means the board shares `owner`.","default":null},"operatorHandle":{"type":"string","pattern":"^@.+","description":"The human the framework escalates to, `@`-prefixed. Used for HITL @-mentions on `agent::blocked`.","default":"@[USERNAME]"},"followUpRepos":{"type":"object","description":"Repository slugs for the non-consumer follow-up ownership buckets, used when a CI gap, retro proposal, or audit finding belongs to someone other than the repo that surfaced it.","properties":{"framework":{"type":"string","pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` that owns framework-level defects. Defaults to the Mandrel mirror — the one bucket with a knowable default.","default":"dsj1984/mandrel"},"platform":{"type":["string","null"],"pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` for a shared platform or infrastructure tracker (a shared base config, a runner fleet, a cross-repo toolchain). No default — nothing can guess a shared repo. Left unset, platform-owned findings file locally and say so.","default":null}},"additionalProperties":false},"branchProtection":{"type":"object","description":"Branch-protection stance applied to `project.baseBranch` by the GitHub bootstrap, and reproduced locally before every push.","properties":{"enforce":{"type":"boolean","description":"When true, the GitHub bootstrap writes the required-check ruleset. False leaves the remote stance alone.","default":true},"requiredChecks":{"type":"array","items":{"type":"object","description":"One required status check: the context name GitHub gates the merge on, plus the argv the framework runs locally to reproduce it.","required":["name","cmd"],"properties":{"name":{"type":"string","minLength":1,"description":"Required status-check context name as GitHub reports it."},"cmd":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"argv array (never a shell string) the local pre-push validation runs to reproduce the check."}},"additionalProperties":false},"description":"Checks that must pass before a Story PR merges. Each entry carries both the remote context name and the local argv.","default":[{"name":"lint","cmd":["npm","run","lint"]},{"name":"test","cmd":["npm","test"]},{"name":"baselines","cmd":["node",".agents/scripts/check-baselines.js"]}]}},"additionalProperties":false},"mergeMethods":{"type":"object","description":"Repository merge-method stance the GitHub bootstrap enforces. The framework ships squash-only with auto-merge on, which is what the one-PR-per-Story model needs for release-please to parse each landed subject.","properties":{"allow_squash_merge":{"type":"boolean","default":true},"allow_rebase_merge":{"type":"boolean","default":false},"allow_merge_commit":{"type":"boolean","default":false},"allow_auto_merge":{"type":"boolean","default":true},"delete_branch_on_merge":{"type":"boolean","default":true}},"additionalProperties":false},"notifications":{"type":"object","description":"Allowlist-gated notification channels. An event fires on a channel only when it is named in that channel's array.","properties":{"mentionOperator":{"type":"boolean","description":"When true, `github.operatorHandle` is @-mentioned in the comments the notifier posts.","default":false},"commentEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message"]},"uniqueItems":true,"description":"Events mirrored onto the Story issue as a comment. Deliberately narrower than `webhookEvents`: only Story-scoped events whose message reads as narrative an operator wants durably on the ticket belong here.","default":["state-transition","story-merged","operator-message"]},"webhookEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]},"uniqueItems":true,"description":"Events dispatched to the configured webhook. The vocabulary is the allowlist the webhook channel gates on; `merge.unlanded` and `merge.flip-failed` are allowlistable but reach the run ledger rather than `notify()` today.","default":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]}},"additionalProperties":false}},"additionalProperties":false},"planning":{"type":"object","description":"Inputs to `/mandrel-plan`: the opt-in navigability reachability gate.","properties":{"navigation":{"type":"object","description":"Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"delivery":{"type":"object","description":"Everything `/mandrel-deliver` and `single-story-close` consume: worktree isolation, runner concurrency, docs freshness, quality gates, merge/CI watch, review ceremony, and the feedback loop.","properties":{"execution":{"type":"object","description":"Serialization of the full-suite spawns delivery drives.","properties":{"fullSuiteLock":{"type":"boolean","description":"Serialize full-suite spawns (`npm test` / `npm run test:coverage`) behind a host-level advisory lock, so two concurrent deliveries on one checkout do not run two suites against the same cores. The lock queues, it never overlaps: a wait that expires with a live holder spawns nothing and exits 75 (resumable), naming the holder. A dead or non-heartbeating holder is taken over, and a broken lockfile proceeds unserialized, so the lock can never fail a delivery. Set false — or export `MANDREL_FULL_SUITE_LOCK=0` for one invocation — to disable.","default":true}},"additionalProperties":false},"docsFreshness":{"type":"object","description":"Documentation-freshness scope: the files a change of consequence is expected to touch. Read by the audit-documentation lens to seed its target set; no delivery gate enforces it.","properties":{"paths":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Repo-relative documentation paths the audit-documentation lens adds to its target set.","default":["README.md"]}},"additionalProperties":false},"tempRetention":{"type":"object","description":"Story #4794. Auto-purge of spent temp artifacts once their Story lands. Classification is an allowlist: only the declared classes below are ever deleted, so unrecognized files under tempRoot are reported with their size and left alone (`/clean-temp` is the operator path for them). signals.ndjson is never purged by any path.","properties":{"enabled":{"type":"boolean","description":"Master switch. Default true — reclaiming a landed Story's gate transcripts and validation evidence is the behaviour, and this knob turns it off. When false every purge path is a reported no-op.","default":true},"classes":{"type":"object","description":"Per-class opt-out. Each defaults to true; set one false to keep that family while the rest are purged.","properties":{"orchestrationLogs":{"type":"boolean","description":"<tempRoot>/orchestration/*.log — close gate transcripts and terse-result detail dumps.","default":true},"validationEvidence":{"type":"boolean","description":"Per-Story validation-evidence.json, lifecycle.ndjson, and manifest.md under the standalone and per-run story trees.","default":true},"auditResults":{"type":"boolean","description":"<tempRoot>/audits/ — audit lens reports.","default":true},"planDirs":{"type":"boolean","description":"<tempRoot>/plan-<slug>/ — abandoned plan authoring dirs. Age-floored only; the current run is always excluded.","default":true},"scratch":{"type":"boolean","description":"<tempRoot>/scratch/ — agent-authored scratch. `scratch/story-<id>/` is purged when that Story lands; any other `scratch/` entry is age-floored.","default":true}},"additionalProperties":false}},"additionalProperties":false},"deliverRunner":{"type":"object","description":"Bounded-concurrency knob for the /mandrel-deliver fan-out.","properties":{"concurrencyCap":{"type":"integer","minimum":1,"description":"Maximum ready Stories dispatched by /mandrel-deliver at once. Default 3. Moderate by design — keeps host-quota consumption predictable while allowing a small ready-set fan-out. Set 1 for strictly sequential delivery; raise further on hosts with adequate parallel-agent quota. See deliver.md for the sequencing model and throughput tradeoff.","default":3},"footprintGuard":{"type":"string","enum":["enforce","advisory"],"description":"How a file-footprint collision affects dispatch. 'enforce' (default, and the behaviour to keep unless you have a reason) withholds a Story whose footprint races a peer admitted this beat or one still in flight — the guard encodes delivery-time-only knowledge (open implementation windows, foreign leases, ground that moved since planning) that no depends_on edge can carry. 'advisory' still DETECTS every collision and reports each would-be withhold in the tick envelope, but lets dispatch follow the declared depends_on edges alone — a deliberate throughput trade for a run whose ordering is fully declared. See stories-wave-tick.js and helpers/deliver-reference.md.","default":"enforce"}},"additionalProperties":false},"worktreeIsolation":{"type":"object","description":"Per-Story git worktree provisioning. Each Story is implemented in its own checkout so concurrent siblings never share a working tree.","properties":{"enabled":{"type":"boolean","description":"When true, `single-story-init.js` materializes a worktree per Story. False implements every Story in the main checkout, which is only safe for strictly serial delivery.","default":true},"root":{"type":"string","minLength":1,"description":"Repo-relative directory the per-Story worktrees are created under. Required whenever `enabled` is explicitly true.","default":".worktrees"},"nodeModulesStrategy":{"type":"string","enum":["per-worktree","clone","symlink","pnpm-store"],"description":"How each worktree gets its dependencies. `clone` copy-on-writes the main checkout tree (fast, cross-platform); `per-worktree` runs a full install; `symlink` links the shared tree (POSIX only unless `allowSymlinkOnWindows`); `pnpm-store` re-links from the pnpm content store.","default":"clone"},"primeFromPath":{"type":["string","null"],"minLength":1,"description":"Absolute path to an existing `node_modules` tree to prime new worktrees from, instead of the main checkout. `null` uses the main checkout.","default":null},"allowSymlinkOnWindows":{"type":"boolean","description":"Permit the `symlink` strategy on win32, where it needs Developer Mode or elevation. Off by default so a Windows consumer fails over to a strategy that works.","default":false},"reapOnSuccess":{"type":"boolean","description":"Remove the Story's worktree once its PR merges. False keeps it for post-mortem inspection.","default":true},"bootstrapFiles":{"type":"array","items":{"type":"string","minLength":1},"description":"Gitignored files copied from the main checkout into every new worktree. A worktree checks out tracked files only, so local secrets and overrides would otherwise be missing.","default":[".env",".mcp.json",".agentrc.local.json",".agents/instructions.local.md"]}},"additionalProperties":false,"allOf":[{"if":{"properties":{"enabled":{"const":true}},"required":["enabled"]},"then":{"required":["root"]}}]},"quality":{"type":"object","description":"Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"gates":{"type":"object","description":"The six quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"coverage":{"type":"object","description":"Line/branch/function coverage ratchet, read from the Istanbul JSON summary the project test run emits.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/coverage.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"lines":90,"branches":85,"functions":90}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"coveragePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative path to the Istanbul `coverage-final.json` the capture step writes and the gate reads.","default":"coverage/coverage-final.json"},"captureScope":{"type":"string","enum":["full","affected"],"description":"What coverage-capture runs. `full` (default) runs `npm run test:coverage`. `affected` runs the consumer-owned `npm run test:coverage:affected` with the base ref in `MANDREL_COVERAGE_BASE_REF`, merges its rows over the prior artifact and stamps it `affected`; baseline rows the scoped run did not measure are treated as unmeasured, never removed. Falls back to `full` with a warning when the script is absent. Meant for consumers whose CI already enforces coverage on the full suite.","default":"full"},"timeoutMs":{"type":"integer","minimum":60000,"maximum":7200000,"description":"Kill bound (ms) for one full-suite run — the coverage capture, the close-validation full-suite gate and the full-suite lock-wait budget all read it. The clock starts at spawn, never while queued on the host lock; a suite that signals `MANDREL_SUITE_READY_FILE` gets a fresh bound for its test phase, so worst-case wall is lock wait + 2 × timeoutMs. On expiry the run exits 124 so callers can tell a hang from a failure.","default":600000}},"additionalProperties":false},"crap":{"type":"object","description":"CRAP (Change Risk Anti-Pattern) ratchet — per-method cyclomatic complexity joined against per-method coverage.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/crap.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.05}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"max":30,"p95":20,"methodsAbove20":50}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the CRAP gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":["src"]},"newMethodCeiling":{"type":"integer","minimum":1,"description":"Hard CRAP ceiling applied to a method the diff introduces. A new method above it fails the gate regardless of the baseline.","default":30},"requireCoverage":{"type":"boolean","description":"When true, the gate refuses to score without a coverage artifact rather than silently reporting complexity-only rows.","default":true},"minMethodResolutionRate":{"type":"number","minimum":0,"maximum":1,"description":"Fail-closed floor on the per-method coverage JOIN (Story #4775): the fraction of methods that must resolve a coverage entry, counted only over files that HAVE one, before `update-crap-baseline.js` will persist. A broken join is silent by construction — unresolved methods are simply absent — so the updater refuses rather than writing a thin baseline and logging it as success. Not enforced below 25 joinable methods, where a diff-scoped run’s rate is noise. Default 0.75; a healthy repo resolves ~98%."},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from CRAP discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]},"incrementalCoverage":{"type":"object","description":"The two independent full-suite economies (Story #4981, split by Story #5173). `skipWhenUnchanged` (default true) decides WHETHER to capture — no changed file under `crap.targetDirs` versus `baseRef` means no capture at all — and is a pure saving. `baselineJoin` (default false) loosens gate semantics: the CRAP join resolves a method in an untouched file from its committed baseline row instead of requiring fresh coverage for it. Neither narrows the capture run itself: a capture that does happen is the ordinary full `npm run test:coverage` (Story #5065).","properties":{"skipWhenUnchanged":{"type":"boolean","description":"Skip the capture entirely when no changed file under `crap.targetDirs` versus `baseRef` was touched. The only measured saving, and gate-semantics-neutral. Defaults to true.","default":true},"baselineJoin":{"type":"boolean","description":"Let the CRAP join resolve a method in a file the diff did not touch from its committed baseline row instead of requiring fresh coverage for it. A gate loosening, not a saving — defaults to false.","default":false},"baseRef":{"type":"string","minLength":1,"description":"Default git ref the changed-file set is computed against, for a caller that passes no `--ref`. A `--ref` the caller named wins over this value, so a caller that anchors another gate on the same ref — `.husky/pre-push`, which passes `--ref origin/main` and then previews `--changed-since origin/main` — resolves ONE scope for both steps (Story #5365). Omitted and unpassed, the gate’s own default `main` applies."}},"additionalProperties":false}},"additionalProperties":false},"maintainability":{"type":"object","description":"Maintainability-index ratchet. Scores per file as the average over its methods, so deleting a small high-MI method can legitimately lower a file’s score.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/maintainability.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.5}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"min":70}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the maintainability gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/` plus `tests/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":[]},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from MI discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]}},"additionalProperties":false},"mutation":{"type":"object","description":"Stryker mutation-score ratchet. Off in practice for most consumers — the baseline kind is registered but no framework path runs Stryker.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/mutation.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"score":60}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}}},"additionalProperties":false},"bundle-size":{"type":"object","description":"Built-artifact size ratchet for web targets. Off by default — it needs declared bundles.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/bundle-size.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"bundles":{"type":"array","items":{"type":"object","description":"One built artifact the bundle-size gate weighs.","required":["name","path","limit"],"properties":{"name":{"type":"string","minLength":1,"description":"Label the rollup row is keyed by."},"path":{"type":"string","minLength":1,"description":"Glob or path of the built artifact to measure."},"limit":{"type":"string","minLength":1,"description":"Human size ceiling (e.g. `\"180 kB\"`)."}},"additionalProperties":false},"description":"The artifacts to weigh. Empty means the gate has nothing to do.","default":[]}},"additionalProperties":false},"duplication":{"type":"object","description":"Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks and `ignoreGlobs` to exclude files from the scan.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/duplication.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":1}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"percentage":25}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the duplication (DRY) gate scans for copy-paste clones. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal (Story #3664).","default":["src"]},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from duplication discovery before scanning. Orthogonal to `components` (grouping). Absent or empty preserves the existing behaviour (Story #3664).","default":[]}},"additionalProperties":false}},"additionalProperties":false},"autoRefresh":{"type":"object","description":"Baseline-attribution auto-refresh: when a gate can prove a regression is a legitimate consequence of the diff, it rewrites the baseline instead of blocking. The single-row CRAP jump cap (5) and the rescore scope (`diff`) are fixed.","properties":{"enabled":{"type":"boolean","description":"Master switch for the auto-refresh path. When false, every baseline refresh is a deliberate operator action.","default":true}},"additionalProperties":false},"requireBaselines":{"type":"boolean","description":"Story #4495. Fail-closed baseline-enforcement policy for the unified check-baselines close-validation gate. When false (default), a consumer that enables baseline gates (crap/maintainability/…) but has not committed the corresponding baseline artifacts under baselines/ gets a clean skip-with-reason instead of a deterministic first-try close failure. Set true to keep the gate registered so an absent baseline artifact fails close-validation with a preflight hint naming the fix (the fail-closed posture).","default":false},"navigability":{"type":"object","description":"Navigability lens + journey-suite config (Epic #4131, F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and /mandrel-deliver's per-Story ceremony (journey suite). Opt-in: absent or empty routeGlobs degrades to a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (pages/**, app/**/route.ts) marking paths that add a user-facing route — the route-tree SSOT the navigability lens enumerates and the route-added routing predicate matches against.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT the navigability lens checks every route resolves a nav door against.","default":[]},"journeySuite":{"type":"string","description":"Path or command for the per-persona journey suite /mandrel-deliver's per-Story ceremony runs."}},"additionalProperties":false}},"additionalProperties":false},"mergeWatch":{"type":"object","description":"Knobs consumed by the close-and-land merge wait (Story #4543). `mode` (Story #4698) selects the close-time merge posture. `maxWaitSeconds` bounds ONE invocation of the merge wait and its expiry returns a resumable `pending` terminal with no label mutation; `maxBudgetSeconds` bounds the CUMULATIVE wait across resumes (anchored at the PR's createdAt, so a resume does not restart the clock) and exhausting it is the genuine give-up that classifies and blocks. The poll cadence is internal (at most 30s while checks run, at most 10s once they are green and the PR is unmerged); it and the cap of 3 behind-the-base updates are not configurable.","properties":{"mode":{"type":"string","enum":["sync","async"],"description":"Close-time merge-wait posture (Story #4698). `sync` (default) keeps the in-close foreground merge wait unchanged. `async` caps the per-invocation wait to a short ~60s probe window — long enough to catch an instant merge and, via the head-anchored required-check predicate, an instantly-red required check — then returns the resumable `pending` terminal (exit 3) with a `nextCommand`. Opt in when slow CI makes the foreground wait routinely expire: the worker launches `nextCommand` in the background instead of burning the host tool slot polling. `maxBudgetSeconds` (the cumulative give-up) is unchanged."},"maxWaitSeconds":{"type":"integer","minimum":1,"description":"Per-invocation merge-wait bound (seconds). Default 300 (5 minutes) — chosen to fit inside a single host tool invocation (~10 min ceiling) alongside the close gates that precede the wait. Expiry yields `pending` (exit 3), never a block. Headless callers with no host ceiling raise this to land in one block."},"maxBudgetSeconds":{"type":"integer","minimum":1,"description":"Cumulative wall-clock budget (seconds) across merge-wait resumes, anchored at the PR's createdAt. Default 3600 (60 minutes). Exhausting this classifies the block and transitions the Story to agent::blocked.","default":3600}},"additionalProperties":false},"codeReview":{"type":"object","description":"Review-provider chain and on-branch remediation threshold for the /mandrel-deliver code-review ceremony.","properties":{"providers":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","enum":["native","code-review","codex","security-review","ultrareview"],"description":"Registered provider key. Inline: native, code-review, codex, security-review. Manual-prompt: ultrareview."},"scopes":{"type":"array","items":{"type":"string","enum":["story","epic"]},"description":"Invocation scopes this entry fires on. Default (omitted) is both."},"optional":{"type":"boolean","default":false,"description":"When true, construction failure (host missing CLI/plugin) is logged and the entry is skipped instead of hard-failing the chain. Use for cross-runtime portability."},"manualPrompt":{"type":"boolean","default":false,"description":"When true, the entry is loaded from the manual-prompt registry: contributes a one-line operator suggestion via `renderPrompt()` instead of running a review via `runReview()`. Does not affect severity counts or `halted`."},"when":{"type":"object","description":"Optional label-gated invocation predicate. Evaluated against the ticket's current labels at invocation time; when false, the entry is silently skipped for this run.","properties":{"label":{"type":"string","minLength":1,"description":"Single label that MUST be present on the ticket."},"labelAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Run when ANY of the listed labels is present."}},"additionalProperties":false}},"additionalProperties":false},"description":"Review-provider chain (Story #2871). When unset or empty, falls back to this default: `native` (scoped lint + MI) then an optional story-scoped `code-review` — a low-effort `claude --print` bug review whose every finding is critical and halts close before auto-merge; hosts without the `claude` CLI skip it. `security-review` and `ultrareview` are opt-in. The orchestrator iterates inline entries in declaration order and merges their Finding[] before posting one structured comment; manual-prompt entries (e.g. ultrareview) contribute a trailing 'Manual review suggestions' section. Selecting an adapter whose probe fails hard-fails at factory construction unless declared `optional: true` in the chain.","default":[{"name":"native"},{"name":"code-review","scopes":["story"],"optional":true}]},"autoFixSeverity":{"type":"string","enum":["high","medium"],"description":"Severity threshold for on-branch remediation in /mandrel-deliver Phase 5 (code-review). `medium` (default) routes 🔴/🟠/🟡 findings into the host-LLM focused-fix routing (Mediums batched per lens: one commit per lens, a single validation + rescan at the end) while 🟢 suggestions still graduate to follow-up issues; `high` reproduces the pre-4399 Critical/High-only routing. Hard cutover — no back-compat flag.","default":"medium"}},"additionalProperties":false},"refactorStage":{"type":"object","description":"Opt-in, config-gated post-green refactor checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly additive and default-OFF: when disabled, story-deliver behaves exactly as before. Advisory only — never changes existing close-validation gate semantics.","properties":{"enabled":{"type":"boolean","description":"When true, story-deliver runs an advisory post-green refactor stage (core/code-review-and-quality skill, Post-Green Refactor Pass) after the suite is green. Default false — when unset the stage is skipped and close-validation gate semantics are unchanged.","default":false}},"additionalProperties":false},"acceptanceEval":{"type":"object","description":"Story #3819. Bounded per-Story acceptance self-eval loop. After the implementation commits land and before the Story-implementation phase flips to `closing`, an independent (fresh-context) critic pass scores the caller-injected change set against each inline `acceptance[]` item, redrafts the unmet items, and re-evaluates — capped at `maxRounds` redraft rounds (0 = scored once, no redraft), then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the scoring pass is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":0,"description":"Maximum number of redraft rounds before escalation. Default 2; 0 means the verdict is scored once with no redraft round (Story #5313 dropped the hard ceiling and the floor-of-one clamp).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-in toggle for the close-time retro auto-file graduator. Auto-filing defaults to OFF (Story #5341).","properties":{"retroProposals":{"type":"boolean","description":"When true, the retro auto-files its actionable routed proposals as meta::<framework-gap|consumer-improvement> + friction::<category> issues via the graduator pre-parsed-findings seam, and the rendered retro sections list the filed issue numbers instead of paste-ready gh command stanzas. Defaults to false (Story #5341), which renders the command stanzas instead.","default":false}},"additionalProperties":false},"ci":{"type":"object","description":"CI-aware delivery namespace (Story #4356, Epic #4355): the merge posture and the advisory-check policy.","properties":{"autoMerge":{"type":"string","enum":["trust-ci","strict"],"description":"Story #4356 (Epic #4355). Merge posture. 'trust-ci' (default) merges once required checks pass; 'strict' additionally requires a clean review gate.","default":"trust-ci"},"blockOnAdvisoryFailure":{"type":"boolean","description":"Story #5096. When true (default), delivery refuses to arm — and disarms — GitHub native auto-merge while a non-required (advisory) check is genuinely red on the PR head and GitHub reports the PR mergeable anyway (mergeStateStatus=UNSTABLE). `--auto` waits on REQUIRED contexts only, so without this a red advisory quality gate merges unattended. Set false to restore the pre-#5096 behaviour verbatim.","default":true},"advisoryAllowlist":{"type":"array","items":{"type":"string"},"description":"Story #5096. Check-run names exempt from blockOnAdvisoryFailure — a red run whose name matches exactly never blocks arming. Matching is exact; an unnamed run can never match and always blocks.","default":[]},"rerunAdvisory":{"type":"integer","minimum":0,"description":"Story #5266. How many times close may re-run a failed advisory workflow run before blocking on it, per close invocation. Default 0: close spends no CI minutes and issues no GitHub mutation on an advisory red unless asked. At n > 0 the failed run(s) are re-run within that allowance and the merge wait re-polls inside its existing budget, landing or blocking on the re-run verdict. Overridden per invocation by --rerun-advisory <n>.","default":0}},"additionalProperties":false},"routing":{"type":"object","description":"v2 delivery-spawn routing: role-scoped boot contexts and the ceremony profile. The v1 singleDelivery epic-route kill-switch was removed in Stage 6; the freshCriticSampleRate sampling floor was retired in Story #5313 and the derived-level ceremony routing in Story #5343.","properties":{"roleScopedAgents":{"type":"boolean","description":"Epic #4478 (M7-B). Kill-switch for the role-scoped boot contexts. When true (default), a converted delivery spawn (`story-worker`, `acceptance-critic`) boots on its own `.claude/agents/<role>.md` system prompt instead of re-paying the full entry-doc (AGENTS.md or CLAUDE.md) @-import closure. When false, every converted spawn falls back to `subagent_type: general-purpose` — the instant, code-rollback-free per-consumer revert, and the universal escape for hosts that ignore `.claude/agents/`. The fallback is the full-closure agent that ran before M7-B, so flipping it off never drops a gate.","default":true},"ceremonyProfile":{"type":"string","enum":["minimal","standard","strict"],"description":"Acceptance-ceremony depth — who authors the Story acceptance verdict. minimal and standard (default) = the inline self-eval, whatever the diff touches; strict = a fresh-context maker-blind critic. Review depth is a separate decision and still derives `deep` for any sensitive path (review-depth.js).","default":"standard"},"closeAndLand":{"type":"boolean","description":"When true (default), single-story-close lands through merge in one close. Opt out per-run with --no-wait-merge.","default":true}},"additionalProperties":false}},"additionalProperties":false},"qa":{"type":"object","description":"Agent-driven QA harness contract (Epic #3214; environment-keyed by Epic #4326). Optional top-level block. All filesystem-pointer fields (featureRoot, fixturesManifest, designTokens) carry safeString guards rejecting shell-injection metacharacters. environments is a map of named deployment targets (each with a baseUrl, a per-environment url-template/skill sign-in seam, and an optional allowWrites gate); personas resolve to a stored credential reference or a sign-in skill, never an inline secret.","properties":{"featureRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Directory holding the Gherkin feature files the QA sweep drives.","default":"tests/features"},"fixturesManifest":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the persona/fixture manifest the harness seeds from.","default":"tests/fixtures/personas.json"},"environments":{"type":"object","description":"Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.","default":{"local":{"baseUrl":"http://localhost:3000","signInSeam":{"urlTemplate":"/dev/sign-in-as/{persona}"}},"staging":{"baseUrl":"https://staging.example.test","allowWrites":false}},"minProperties":1,"additionalProperties":{"type":"object","properties":{"baseUrl":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"signInSeam":{"oneOf":[{"type":"object","properties":{"urlTemplate":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["urlTemplate"],"additionalProperties":false},{"type":"object","properties":{"skill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"pattern":"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$","description":"Tier-relative skill id, e.g. `stack/qa/acme-sso`: lowercase segments of letters, digits, `.`, `_` or `-`, at least two of them, separated by `/`. A traversal (`../..`), an absolute path, a backslash or an uppercase segment is rejected here rather than normalized."}},"required":["skill"],"additionalProperties":false}]},"allowWrites":{"type":"boolean"}},"required":["baseUrl"],"additionalProperties":false}},"personas":{"description":"Personas the QA-harness sign-in seam accepts. Two accepted shapes: (1) a plain array of persona names — the honest shape for a `urlTemplate` dev-impersonation seam, where the persona name is the sole input the workflow consumes; (2) the object-map form keyed by persona name, where each entry carries per-persona auth material (`credentialRef` or `signInSkill`) consulted only under a skill-based or credential-based seam.","default":{"admin":{"credentialRef":"QA_ADMIN_CREDENTIAL"},"member":{"credentialRef":"QA_MEMBER_CREDENTIAL"}},"oneOf":[{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},{"type":"object","minProperties":1,"additionalProperties":{"oneOf":[{"type":"object","properties":{"credentialRef":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["credentialRef"],"additionalProperties":false},{"type":"object","properties":{"signInSkill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["signInSkill"],"additionalProperties":false}]}}]},"gherkinLint":{"type":"object","description":"Static Gherkin corpus gate (Story #5013). Optional; the gate runs only when this block is present, so an upgrade never reddens the lint of a consumer that never asked the framework to police its `.feature` files. Inside the opt-in it fails closed: an unresolvable `@cucumber/gherkin` parser, or a scope resolving zero step definitions, exits 1 rather than reporting a clean run.","default":{"scopes":{"web":{"featureRoots":["apps/web/tests/features"],"stepRoots":["apps/web/tests/steps"]}},"exemptionTags":["@skip"],"stepWaivers":[]},"properties":{"scopes":{"type":"object","description":"Binding scopes, keyed by name. Each scope resolves its own features against its own step definitions only — pooling every step root into one matcher list is what makes a cross-app false bind possible, where a step defined solely in app B silently vouches for app A. The scope name appears verbatim in every unbound finding.","minProperties":1,"additionalProperties":{"type":"object","properties":{"featureRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the `.feature` files of this scope, walked recursively."},"stepRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the step definitions of this scope, walked recursively. Resolving zero definitions here is a fail-closed error, not a clean run."}},"required":["featureRoots","stepRoots"],"additionalProperties":false}},"exemptionTags":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Tags marking a scenario as intentionally non-binding, so must-bind skips it. Never an escape from must-compile: a parse error in the file still fails the run. Default: [\"@skip\"].","default":["@skip"]},"stepWaivers":{"type":"array","items":{"type":"string","minLength":1},"description":"Exact step texts must-bind never reports as unbound. The step index is a source scan and therefore heuristic while the parser is exact, so a false unbound must always have an escape that does not require switching the gate off. Default: [].","default":[]}},"required":["scopes"],"additionalProperties":false},"consoleAllowlist":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Console-message substrings the QA run tolerates instead of reporting as a finding (framework dev-mode chatter).","default":["Download the React DevTools","[HMR]"]},"designTokens":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the design-token SSOT the UX/UI lens checks rendered styles against.","default":"src/styles/tokens.css"}},"additionalProperties":false}},"additionalProperties":false};const pattern0 = new RegExp("([;&|`]|\\$\\()", "u");const pattern9 = new RegExp("^@.+", "u");const pattern10 = new RegExp("^[^/\\s]+/[^/\\s]+$", "u");const pattern25 = new RegExp("^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$", "u");const func2 = require("ajv/dist/runtime/ucs2length").default;const func10 = Object.prototype.hasOwnProperty;function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == "object" && !Array.isArray(data)){if(data.project === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "project"},message:"must have required property '"+"project"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!((((((key0 === "$schema") || (key0 === "project")) || (key0 === "github")) || (key0 === "planning")) || (key0 === "delivery")) || (key0 === "qa"))){const err1 = {instancePath,schemaPath:"#/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.$schema !== undefined){if(typeof data.$schema !== "string"){const err2 = {instancePath:instancePath+"/$schema",schemaPath:"#/properties/%24schema/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.project !== undefined){let data1 = data.project;if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.paths === undefined){const err3 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/required",keyword:"required",params:{missingProperty: "paths"},message:"must have required property '"+"paths"+"'"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key1 in data1){if(!((((key1 === "baseBranch") || (key1 === "paths")) || (key1 === "docsContextFiles")) || (key1 === "commands"))){const err4 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key1},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data1.baseBranch !== undefined){let data2 = data1.baseBranch;if(typeof data2 !== "string"){const err5 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const _errs9 = errors;const _errs10 = errors;if(typeof data2 === "string"){if(!pattern0.test(data2)){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}var valid2 = _errs10 === errors;if(valid2){const err7 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}else {errors = _errs9;if(vErrors !== null){if(_errs9){vErrors.length = _errs9;}else {vErrors = null;}}}}if(data1.paths !== undefined){let data3 = data1.paths;if(data3 && typeof data3 == "object" && !Array.isArray(data3)){if(data3.agentRoot === undefined){const err8 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "agentRoot"},message:"must have required property '"+"agentRoot"+"'"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data3.docsRoot === undefined){const err9 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "docsRoot"},message:"must have required property '"+"docsRoot"+"'"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data3.tempRoot === undefined){const err10 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "tempRoot"},message:"must have required property '"+"tempRoot"+"'"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key2 in data3){if(!(((key2 === "agentRoot") || (key2 === "docsRoot")) || (key2 === "tempRoot"))){const err11 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key2},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data3.agentRoot !== undefined){let data4 = data3.agentRoot;const _errs16 = errors;const _errs17 = errors;if(typeof data4 === "string"){if(!pattern0.test(data4)){const err12 = {};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}var valid4 = _errs17 === errors;if(valid4){const err13 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}else {errors = _errs16;if(vErrors !== null){if(_errs16){vErrors.length = _errs16;}else {vErrors = null;}}}if(typeof data4 === "string"){if(func2(data4) < 1){const err14 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data3.docsRoot !== undefined){let data5 = data3.docsRoot;const _errs20 = errors;const _errs21 = errors;if(typeof data5 === "string"){if(!pattern0.test(data5)){const err16 = {};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}var valid5 = _errs21 === errors;if(valid5){const err17 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}else {errors = _errs20;if(vErrors !== null){if(_errs20){vErrors.length = _errs20;}else {vErrors = null;}}}if(typeof data5 === "string"){if(func2(data5) < 1){const err18 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}else {const err19 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data3.tempRoot !== undefined){let data6 = data3.tempRoot;const _errs24 = errors;const _errs25 = errors;if(typeof data6 === "string"){if(!pattern0.test(data6)){const err20 = {};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}var valid6 = _errs25 === errors;if(valid6){const err21 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}else {errors = _errs24;if(vErrors !== null){if(_errs24){vErrors.length = _errs24;}else {vErrors = null;}}}if(typeof data6 === "string"){if(func2(data6) < 1){const err22 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data1.docsContextFiles !== undefined){let data7 = data1.docsContextFiles;if(Array.isArray(data7)){const len0 = data7.length;for(let i0=0; i0<len0; i0++){if(typeof data7[i0] !== "string"){const err25 = {instancePath:instancePath+"/project/docsContextFiles/" + i0,schemaPath:"#/properties/project/properties/docsContextFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}else {const err26 = {instancePath:instancePath+"/project/docsContextFiles",schemaPath:"#/properties/project/properties/docsContextFiles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data1.commands !== undefined){let data9 = data1.commands;if(data9 && typeof data9 == "object" && !Array.isArray(data9)){for(const key3 in data9){if(!(((((key3 === "test") || (key3 === "typecheck")) || (key3 === "lint")) || (key3 === "formatCheck")) || (key3 === "formatWrite"))){const err27 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key3},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data9.test !== undefined){let data10 = data9.test;const _errs35 = errors;const _errs36 = errors;if(typeof data10 === "string"){if(!pattern0.test(data10)){const err28 = {};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}var valid10 = _errs36 === errors;if(valid10){const err29 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}else {errors = _errs35;if(vErrors !== null){if(_errs35){vErrors.length = _errs35;}else {vErrors = null;}}}if(typeof data10 === "string"){if(func2(data10) < 1){const err30 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data9.typecheck !== undefined){let data11 = data9.typecheck;if((typeof data11 !== "string") && (data11 !== null)){const err32 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.typecheck.type},message:"must be string,null"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}const _errs39 = errors;const _errs40 = errors;if(errors === _errs40){if(typeof data11 === "string"){if(!pattern0.test(data11)){const err33 = {};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}else {const err34 = {};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}var valid11 = _errs40 === errors;if(valid11){const err35 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(typeof data11 === "string"){if(func2(data11) < 1){const err36 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}}if(data9.lint !== undefined){let data12 = data9.lint;if((typeof data12 !== "string") && (data12 !== null)){const err37 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.lint.type},message:"must be string,null"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}const _errs44 = errors;const _errs45 = errors;if(errors === _errs45){if(typeof data12 === "string"){if(!pattern0.test(data12)){const err38 = {};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}else {const err39 = {};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}var valid12 = _errs45 === errors;if(valid12){const err40 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}else {errors = _errs44;if(vErrors !== null){if(_errs44){vErrors.length = _errs44;}else {vErrors = null;}}}if(typeof data12 === "string"){if(func2(data12) < 1){const err41 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}}if(data9.formatCheck !== undefined){let data13 = data9.formatCheck;const _errs49 = errors;const _errs50 = errors;if(typeof data13 === "string"){if(!pattern0.test(data13)){const err42 = {};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}var valid13 = _errs50 === errors;if(valid13){const err43 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}else {errors = _errs49;if(vErrors !== null){if(_errs49){vErrors.length = _errs49;}else {vErrors = null;}}}if(typeof data13 === "string"){if(func2(data13) < 1){const err44 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data9.formatWrite !== undefined){let data14 = data9.formatWrite;const _errs53 = errors;const _errs54 = errors;if(typeof data14 === "string"){if(!pattern0.test(data14)){const err46 = {};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}var valid14 = _errs54 === errors;if(valid14){const err47 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}else {errors = _errs53;if(vErrors !== null){if(_errs53){vErrors.length = _errs53;}else {vErrors = null;}}}if(typeof data14 === "string"){if(func2(data14) < 1){const err48 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}}else {const err50 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}}else {const err51 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}}if(data.github !== undefined){let data15 = data.github;if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.owner === undefined){const err52 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "owner"},message:"must have required property '"+"owner"+"'"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}if(data15.repo === undefined){const err53 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "repo"},message:"must have required property '"+"repo"+"'"};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}if(data15.operatorHandle === undefined){const err54 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "operatorHandle"},message:"must have required property '"+"operatorHandle"+"'"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}for(const key4 in data15){if(!(func10.call(schema11.properties.github.properties, key4))){const err55 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key4},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}if(data15.owner !== undefined){let data16 = data15.owner;if(typeof data16 === "string"){if(func2(data16) < 1){const err56 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}}else {const err57 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}}if(data15.repo !== undefined){let data17 = data15.repo;if(typeof data17 === "string"){if(func2(data17) < 1){const err58 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}}else {const err59 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}if(data15.projectNumber !== undefined){let data18 = data15.projectNumber;if((!(((typeof data18 == "number") && (!(data18 % 1) && !isNaN(data18))) && (isFinite(data18)))) && (data18 !== null)){const err60 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/type",keyword:"type",params:{type: schema11.properties.github.properties.projectNumber.type},message:"must be integer,null"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}if((typeof data18 == "number") && (isFinite(data18))){if(data18 < 1 || isNaN(data18)){const err61 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}}}if(data15.projectOwner !== undefined){let data19 = data15.projectOwner;if((typeof data19 !== "string") && (data19 !== null)){const err62 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/type",keyword:"type",params:{type: schema11.properties.github.properties.projectOwner.type},message:"must be string,null"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}if(typeof data19 === "string"){if(func2(data19) < 1){const err63 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}}if(data15.operatorHandle !== undefined){let data20 = data15.operatorHandle;if(typeof data20 === "string"){if(!pattern9.test(data20)){const err64 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/pattern",keyword:"pattern",params:{pattern: "^@.+"},message:"must match pattern \""+"^@.+"+"\""};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}}else {const err65 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}}if(data15.followUpRepos !== undefined){let data21 = data15.followUpRepos;if(data21 && typeof data21 == "object" && !Array.isArray(data21)){for(const key5 in data21){if(!((key5 === "framework") || (key5 === "platform"))){const err66 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}}if(data21.framework !== undefined){let data22 = data21.framework;if(typeof data22 === "string"){if(!pattern10.test(data22)){const err67 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}else {const err68 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}if(data21.platform !== undefined){let data23 = data21.platform;if((typeof data23 !== "string") && (data23 !== null)){const err69 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/type",keyword:"type",params:{type: schema11.properties.github.properties.followUpRepos.properties.platform.type},message:"must be string,null"};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}if(typeof data23 === "string"){if(!pattern10.test(data23)){const err70 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err70];}else {vErrors.push(err70);}errors++;}}}}else {const err71 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err71];}else {vErrors.push(err71);}errors++;}}if(data15.branchProtection !== undefined){let data24 = data15.branchProtection;if(data24 && typeof data24 == "object" && !Array.isArray(data24)){for(const key6 in data24){if(!((key6 === "enforce") || (key6 === "requiredChecks"))){const err72 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}}if(data24.enforce !== undefined){if(typeof data24.enforce !== "boolean"){const err73 = {instancePath:instancePath+"/github/branchProtection/enforce",schemaPath:"#/properties/github/properties/branchProtection/properties/enforce/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err73];}else {vErrors.push(err73);}errors++;}}if(data24.requiredChecks !== undefined){let data26 = data24.requiredChecks;if(Array.isArray(data26)){const len1 = data26.length;for(let i1=0; i1<len1; i1++){let data27 = data26[i1];if(data27 && typeof data27 == "object" && !Array.isArray(data27)){if(data27.name === undefined){const err74 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err74];}else {vErrors.push(err74);}errors++;}if(data27.cmd === undefined){const err75 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/required",keyword:"required",params:{missingProperty: "cmd"},message:"must have required property '"+"cmd"+"'"};if(vErrors === null){vErrors = [err75];}else {vErrors.push(err75);}errors++;}for(const key7 in data27){if(!((key7 === "name") || (key7 === "cmd"))){const err76 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err76];}else {vErrors.push(err76);}errors++;}}if(data27.name !== undefined){let data28 = data27.name;if(typeof data28 === "string"){if(func2(data28) < 1){const err77 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/name",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/name/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err77];}else {vErrors.push(err77);}errors++;}}else {const err78 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/name",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err78];}else {vErrors.push(err78);}errors++;}}if(data27.cmd !== undefined){let data29 = data27.cmd;if(Array.isArray(data29)){if(data29.length < 1){const err79 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err79];}else {vErrors.push(err79);}errors++;}const len2 = data29.length;for(let i2=0; i2<len2; i2++){let data30 = data29[i2];if(typeof data30 === "string"){if(func2(data30) < 1){const err80 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd/" + i2,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err80];}else {vErrors.push(err80);}errors++;}}else {const err81 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd/" + i2,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err81];}else {vErrors.push(err81);}errors++;}}}else {const err82 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1+"/cmd",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/properties/cmd/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err82];}else {vErrors.push(err82);}errors++;}}}else {const err83 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err83];}else {vErrors.push(err83);}errors++;}}}else {const err84 = {instancePath:instancePath+"/github/branchProtection/requiredChecks",schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err84];}else {vErrors.push(err84);}errors++;}}}else {const err85 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err85];}else {vErrors.push(err85);}errors++;}}if(data15.mergeMethods !== undefined){let data31 = data15.mergeMethods;if(data31 && typeof data31 == "object" && !Array.isArray(data31)){for(const key8 in data31){if(!(((((key8 === "allow_squash_merge") || (key8 === "allow_rebase_merge")) || (key8 === "allow_merge_commit")) || (key8 === "allow_auto_merge")) || (key8 === "delete_branch_on_merge"))){const err86 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err86];}else {vErrors.push(err86);}errors++;}}if(data31.allow_squash_merge !== undefined){if(typeof data31.allow_squash_merge !== "boolean"){const err87 = {instancePath:instancePath+"/github/mergeMethods/allow_squash_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_squash_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err87];}else {vErrors.push(err87);}errors++;}}if(data31.allow_rebase_merge !== undefined){if(typeof data31.allow_rebase_merge !== "boolean"){const err88 = {instancePath:instancePath+"/github/mergeMethods/allow_rebase_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_rebase_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}}if(data31.allow_merge_commit !== undefined){if(typeof data31.allow_merge_commit !== "boolean"){const err89 = {instancePath:instancePath+"/github/mergeMethods/allow_merge_commit",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_merge_commit/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err89];}else {vErrors.push(err89);}errors++;}}if(data31.allow_auto_merge !== undefined){if(typeof data31.allow_auto_merge !== "boolean"){const err90 = {instancePath:instancePath+"/github/mergeMethods/allow_auto_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/allow_auto_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err90];}else {vErrors.push(err90);}errors++;}}if(data31.delete_branch_on_merge !== undefined){if(typeof data31.delete_branch_on_merge !== "boolean"){const err91 = {instancePath:instancePath+"/github/mergeMethods/delete_branch_on_merge",schemaPath:"#/properties/github/properties/mergeMethods/properties/delete_branch_on_merge/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err91];}else {vErrors.push(err91);}errors++;}}}else {const err92 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err92];}else {vErrors.push(err92);}errors++;}}if(data15.notifications !== undefined){let data37 = data15.notifications;if(data37 && typeof data37 == "object" && !Array.isArray(data37)){for(const key9 in data37){if(!(((key9 === "mentionOperator") || (key9 === "commentEvents")) || (key9 === "webhookEvents"))){const err93 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err93];}else {vErrors.push(err93);}errors++;}}if(data37.mentionOperator !== undefined){if(typeof data37.mentionOperator !== "boolean"){const err94 = {instancePath:instancePath+"/github/notifications/mentionOperator",schemaPath:"#/properties/github/properties/notifications/properties/mentionOperator/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}}if(data37.commentEvents !== undefined){let data39 = data37.commentEvents;if(Array.isArray(data39)){const len3 = data39.length;for(let i3=0; i3<len3; i3++){let data40 = data39[i3];if(typeof data40 !== "string"){const err95 = {instancePath:instancePath+"/github/notifications/commentEvents/" + i3,schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}if(!((((data40 === "state-transition") || (data40 === "story-merged")) || (data40 === "story-closing")) || (data40 === "operator-message"))){const err96 = {instancePath:instancePath+"/github/notifications/commentEvents/" + i3,schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.github.properties.notifications.properties.commentEvents.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err96];}else {vErrors.push(err96);}errors++;}}let i4 = data39.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data39[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err97 = {instancePath:instancePath+"/github/notifications/commentEvents",schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/uniqueItems",keyword:"uniqueItems",params:{i: i4, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i4+" are identical)"};if(vErrors === null){vErrors = [err97];}else {vErrors.push(err97);}errors++;break;}indices0[item0] = i4;}}}else {const err98 = {instancePath:instancePath+"/github/notifications/commentEvents",schemaPath:"#/properties/github/properties/notifications/properties/commentEvents/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err98];}else {vErrors.push(err98);}errors++;}}if(data37.webhookEvents !== undefined){let data41 = data37.webhookEvents;if(Array.isArray(data41)){const len4 = data41.length;for(let i5=0; i5<len4; i5++){let data42 = data41[i5];if(typeof data42 !== "string"){const err99 = {instancePath:instancePath+"/github/notifications/webhookEvents/" + i5,schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}if(!((((((data42 === "state-transition") || (data42 === "story-merged")) || (data42 === "story-closing")) || (data42 === "operator-message")) || (data42 === "merge.unlanded")) || (data42 === "merge.flip-failed"))){const err100 = {instancePath:instancePath+"/github/notifications/webhookEvents/" + i5,schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.github.properties.notifications.properties.webhookEvents.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}}let i6 = data41.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data41[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err101 = {instancePath:instancePath+"/github/notifications/webhookEvents",schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/uniqueItems",keyword:"uniqueItems",params:{i: i6, j: j1},message:"must NOT have duplicate items (items ## "+j1+" and "+i6+" are identical)"};if(vErrors === null){vErrors = [err101];}else {vErrors.push(err101);}errors++;break;}indices1[item1] = i6;}}}else {const err102 = {instancePath:instancePath+"/github/notifications/webhookEvents",schemaPath:"#/properties/github/properties/notifications/properties/webhookEvents/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err102];}else {vErrors.push(err102);}errors++;}}}else {const err103 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err103];}else {vErrors.push(err103);}errors++;}}}else {const err104 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err104];}else {vErrors.push(err104);}errors++;}}if(data.planning !== undefined){let data43 = data.planning;if(data43 && typeof data43 == "object" && !Array.isArray(data43)){for(const key10 in data43){if(!(key10 === "navigation")){const err105 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}}if(data43.navigation !== undefined){let data44 = data43.navigation;if(data44 && typeof data44 == "object" && !Array.isArray(data44)){for(const key11 in data44){if(!((key11 === "routeGlobs") || (key11 === "navRegistry"))){const err106 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data44.routeGlobs !== undefined){let data45 = data44.routeGlobs;if(Array.isArray(data45)){const len5 = data45.length;for(let i7=0; i7<len5; i7++){if(typeof data45[i7] !== "string"){const err107 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i7,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}}else {const err108 = {instancePath:instancePath+"/planning/navigation/routeGlobs",schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}}if(data44.navRegistry !== undefined){let data47 = data44.navRegistry;if(Array.isArray(data47)){const len6 = data47.length;for(let i8=0; i8<len6; i8++){if(typeof data47[i8] !== "string"){const err109 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i8,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}}}else {const err110 = {instancePath:instancePath+"/planning/navigation/navRegistry",schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}}}else {const err111 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}}else {const err112 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data.delivery !== undefined){let data49 = data.delivery;if(data49 && typeof data49 == "object" && !Array.isArray(data49)){for(const key12 in data49){if(!(func10.call(schema11.properties.delivery.properties, key12))){const err113 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}}if(data49.execution !== undefined){let data50 = data49.execution;if(data50 && typeof data50 == "object" && !Array.isArray(data50)){for(const key13 in data50){if(!(key13 === "fullSuiteLock")){const err114 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err114];}else {vErrors.push(err114);}errors++;}}if(data50.fullSuiteLock !== undefined){if(typeof data50.fullSuiteLock !== "boolean"){const err115 = {instancePath:instancePath+"/delivery/execution/fullSuiteLock",schemaPath:"#/properties/delivery/properties/execution/properties/fullSuiteLock/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}}else {const err116 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err116];}else {vErrors.push(err116);}errors++;}}if(data49.docsFreshness !== undefined){let data52 = data49.docsFreshness;if(data52 && typeof data52 == "object" && !Array.isArray(data52)){for(const key14 in data52){if(!(key14 === "paths")){const err117 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}}if(data52.paths !== undefined){let data53 = data52.paths;if(Array.isArray(data53)){const len7 = data53.length;for(let i9=0; i9<len7; i9++){let data54 = data53[i9];const _errs146 = errors;const _errs147 = errors;if(typeof data54 === "string"){if(!pattern0.test(data54)){const err118 = {};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}var valid42 = _errs147 === errors;if(valid42){const err119 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}else {errors = _errs146;if(vErrors !== null){if(_errs146){vErrors.length = _errs146;}else {vErrors = null;}}}if(typeof data54 === "string"){if(func2(data54) < 1){const err120 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}}else {const err121 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err121];}else {vErrors.push(err121);}errors++;}}}else {const err122 = {instancePath:instancePath+"/delivery/docsFreshness/paths",schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err122];}else {vErrors.push(err122);}errors++;}}}else {const err123 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err123];}else {vErrors.push(err123);}errors++;}}if(data49.tempRetention !== undefined){let data55 = data49.tempRetention;if(data55 && typeof data55 == "object" && !Array.isArray(data55)){for(const key15 in data55){if(!((key15 === "enabled") || (key15 === "classes"))){const err124 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}}if(data55.enabled !== undefined){if(typeof data55.enabled !== "boolean"){const err125 = {instancePath:instancePath+"/delivery/tempRetention/enabled",schemaPath:"#/properties/delivery/properties/tempRetention/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}}if(data55.classes !== undefined){let data57 = data55.classes;if(data57 && typeof data57 == "object" && !Array.isArray(data57)){for(const key16 in data57){if(!(((((key16 === "orchestrationLogs") || (key16 === "validationEvidence")) || (key16 === "auditResults")) || (key16 === "planDirs")) || (key16 === "scratch"))){const err126 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}if(data57.orchestrationLogs !== undefined){if(typeof data57.orchestrationLogs !== "boolean"){const err127 = {instancePath:instancePath+"/delivery/tempRetention/classes/orchestrationLogs",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/orchestrationLogs/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}}if(data57.validationEvidence !== undefined){if(typeof data57.validationEvidence !== "boolean"){const err128 = {instancePath:instancePath+"/delivery/tempRetention/classes/validationEvidence",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/validationEvidence/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err128];}else {vErrors.push(err128);}errors++;}}if(data57.auditResults !== undefined){if(typeof data57.auditResults !== "boolean"){const err129 = {instancePath:instancePath+"/delivery/tempRetention/classes/auditResults",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/auditResults/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}if(data57.planDirs !== undefined){if(typeof data57.planDirs !== "boolean"){const err130 = {instancePath:instancePath+"/delivery/tempRetention/classes/planDirs",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/planDirs/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err130];}else {vErrors.push(err130);}errors++;}}if(data57.scratch !== undefined){if(typeof data57.scratch !== "boolean"){const err131 = {instancePath:instancePath+"/delivery/tempRetention/classes/scratch",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/properties/scratch/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err131];}else {vErrors.push(err131);}errors++;}}}else {const err132 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}}}else {const err133 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}}if(data49.deliverRunner !== undefined){let data63 = data49.deliverRunner;if(data63 && typeof data63 == "object" && !Array.isArray(data63)){for(const key17 in data63){if(!((key17 === "concurrencyCap") || (key17 === "footprintGuard"))){const err134 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err134];}else {vErrors.push(err134);}errors++;}}if(data63.concurrencyCap !== undefined){let data64 = data63.concurrencyCap;if(!(((typeof data64 == "number") && (!(data64 % 1) && !isNaN(data64))) && (isFinite(data64)))){const err135 = {instancePath:instancePath+"/delivery/deliverRunner/concurrencyCap",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/concurrencyCap/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err135];}else {vErrors.push(err135);}errors++;}if((typeof data64 == "number") && (isFinite(data64))){if(data64 < 1 || isNaN(data64)){const err136 = {instancePath:instancePath+"/delivery/deliverRunner/concurrencyCap",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/concurrencyCap/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err136];}else {vErrors.push(err136);}errors++;}}}if(data63.footprintGuard !== undefined){let data65 = data63.footprintGuard;if(typeof data65 !== "string"){const err137 = {instancePath:instancePath+"/delivery/deliverRunner/footprintGuard",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/footprintGuard/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err137];}else {vErrors.push(err137);}errors++;}if(!((data65 === "enforce") || (data65 === "advisory"))){const err138 = {instancePath:instancePath+"/delivery/deliverRunner/footprintGuard",schemaPath:"#/properties/delivery/properties/deliverRunner/properties/footprintGuard/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.deliverRunner.properties.footprintGuard.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err138];}else {vErrors.push(err138);}errors++;}}}else {const err139 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err139];}else {vErrors.push(err139);}errors++;}}if(data49.worktreeIsolation !== undefined){let data66 = data49.worktreeIsolation;const _errs176 = errors;let valid47 = true;const _errs177 = errors;if(data66 && typeof data66 == "object" && !Array.isArray(data66)){let missing0;if((data66.enabled === undefined) && (missing0 = "enabled")){const err140 = {};if(vErrors === null){vErrors = [err140];}else {vErrors.push(err140);}errors++;}else {if(data66.enabled !== undefined){if(true !== data66.enabled){const err141 = {};if(vErrors === null){vErrors = [err141];}else {vErrors.push(err141);}errors++;}}}}var _valid0 = _errs177 === errors;errors = _errs176;if(vErrors !== null){if(_errs176){vErrors.length = _errs176;}else {vErrors = null;}}if(_valid0){const _errs179 = errors;if(data66 && typeof data66 == "object" && !Array.isArray(data66)){if(data66.root === undefined){const err142 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/allOf/0/then/required",keyword:"required",params:{missingProperty: "root"},message:"must have required property '"+"root"+"'"};if(vErrors === null){vErrors = [err142];}else {vErrors.push(err142);}errors++;}}var _valid0 = _errs179 === errors;valid47 = _valid0;}if(!valid47){const err143 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/allOf/0/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema"};if(vErrors === null){vErrors = [err143];}else {vErrors.push(err143);}errors++;}if(data66 && typeof data66 == "object" && !Array.isArray(data66)){for(const key18 in data66){if(!(((((((key18 === "enabled") || (key18 === "root")) || (key18 === "nodeModulesStrategy")) || (key18 === "primeFromPath")) || (key18 === "allowSymlinkOnWindows")) || (key18 === "reapOnSuccess")) || (key18 === "bootstrapFiles"))){const err144 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err144];}else {vErrors.push(err144);}errors++;}}if(data66.enabled !== undefined){if(typeof data66.enabled !== "boolean"){const err145 = {instancePath:instancePath+"/delivery/worktreeIsolation/enabled",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err145];}else {vErrors.push(err145);}errors++;}}if(data66.root !== undefined){let data69 = data66.root;if(typeof data69 === "string"){if(func2(data69) < 1){const err146 = {instancePath:instancePath+"/delivery/worktreeIsolation/root",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/root/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err146];}else {vErrors.push(err146);}errors++;}}else {const err147 = {instancePath:instancePath+"/delivery/worktreeIsolation/root",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/root/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err147];}else {vErrors.push(err147);}errors++;}}if(data66.nodeModulesStrategy !== undefined){let data70 = data66.nodeModulesStrategy;if(typeof data70 !== "string"){const err148 = {instancePath:instancePath+"/delivery/worktreeIsolation/nodeModulesStrategy",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/nodeModulesStrategy/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err148];}else {vErrors.push(err148);}errors++;}if(!((((data70 === "per-worktree") || (data70 === "clone")) || (data70 === "symlink")) || (data70 === "pnpm-store"))){const err149 = {instancePath:instancePath+"/delivery/worktreeIsolation/nodeModulesStrategy",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/nodeModulesStrategy/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.worktreeIsolation.properties.nodeModulesStrategy.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err149];}else {vErrors.push(err149);}errors++;}}if(data66.primeFromPath !== undefined){let data71 = data66.primeFromPath;if((typeof data71 !== "string") && (data71 !== null)){const err150 = {instancePath:instancePath+"/delivery/worktreeIsolation/primeFromPath",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/primeFromPath/type",keyword:"type",params:{type: schema11.properties.delivery.properties.worktreeIsolation.properties.primeFromPath.type},message:"must be string,null"};if(vErrors === null){vErrors = [err150];}else {vErrors.push(err150);}errors++;}if(typeof data71 === "string"){if(func2(data71) < 1){const err151 = {instancePath:instancePath+"/delivery/worktreeIsolation/primeFromPath",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/primeFromPath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err151];}else {vErrors.push(err151);}errors++;}}}if(data66.allowSymlinkOnWindows !== undefined){if(typeof data66.allowSymlinkOnWindows !== "boolean"){const err152 = {instancePath:instancePath+"/delivery/worktreeIsolation/allowSymlinkOnWindows",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/allowSymlinkOnWindows/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err152];}else {vErrors.push(err152);}errors++;}}if(data66.reapOnSuccess !== undefined){if(typeof data66.reapOnSuccess !== "boolean"){const err153 = {instancePath:instancePath+"/delivery/worktreeIsolation/reapOnSuccess",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/reapOnSuccess/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err153];}else {vErrors.push(err153);}errors++;}}if(data66.bootstrapFiles !== undefined){let data74 = data66.bootstrapFiles;if(Array.isArray(data74)){const len8 = data74.length;for(let i10=0; i10<len8; i10++){let data75 = data74[i10];if(typeof data75 === "string"){if(func2(data75) < 1){const err154 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err154];}else {vErrors.push(err154);}errors++;}}else {const err155 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err155];}else {vErrors.push(err155);}errors++;}}}else {const err156 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err156];}else {vErrors.push(err156);}errors++;}}}else {const err157 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err157];}else {vErrors.push(err157);}errors++;}}if(data49.quality !== undefined){let data76 = data49.quality;if(data76 && typeof data76 == "object" && !Array.isArray(data76)){for(const key19 in data76){if(!((((key19 === "gates") || (key19 === "autoRefresh")) || (key19 === "requireBaselines")) || (key19 === "navigability"))){const err158 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err158];}else {vErrors.push(err158);}errors++;}}if(data76.gates !== undefined){let data77 = data76.gates;if(data77 && typeof data77 == "object" && !Array.isArray(data77)){for(const key20 in data77){if(!((((((key20 === "coverage") || (key20 === "crap")) || (key20 === "maintainability")) || (key20 === "mutation")) || (key20 === "bundle-size")) || (key20 === "duplication"))){const err159 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err159];}else {vErrors.push(err159);}errors++;}}if(data77.coverage !== undefined){let data78 = data77.coverage;if(data78 && typeof data78 == "object" && !Array.isArray(data78)){for(const key21 in data78){if(!((((((((key21 === "enabled") || (key21 === "baselinePath")) || (key21 === "tolerance")) || (key21 === "floors")) || (key21 === "components")) || (key21 === "coveragePath")) || (key21 === "captureScope")) || (key21 === "timeoutMs"))){const err160 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err160];}else {vErrors.push(err160);}errors++;}}if(data78.enabled !== undefined){if(typeof data78.enabled !== "boolean"){const err161 = {instancePath:instancePath+"/delivery/quality/gates/coverage/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err161];}else {vErrors.push(err161);}errors++;}}if(data78.baselinePath !== undefined){let data80 = data78.baselinePath;const _errs210 = errors;const _errs211 = errors;if(typeof data80 === "string"){if(!pattern0.test(data80)){const err162 = {};if(vErrors === null){vErrors = [err162];}else {vErrors.push(err162);}errors++;}}var valid55 = _errs211 === errors;if(valid55){const err163 = {instancePath:instancePath+"/delivery/quality/gates/coverage/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err163];}else {vErrors.push(err163);}errors++;}else {errors = _errs210;if(vErrors !== null){if(_errs210){vErrors.length = _errs210;}else {vErrors = null;}}}if(typeof data80 === "string"){if(func2(data80) < 1){const err164 = {instancePath:instancePath+"/delivery/quality/gates/coverage/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err164];}else {vErrors.push(err164);}errors++;}}else {const err165 = {instancePath:instancePath+"/delivery/quality/gates/coverage/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err165];}else {vErrors.push(err165);}errors++;}}if(data78.tolerance !== undefined){let data81 = data78.tolerance;if(data81 && typeof data81 == "object" && !Array.isArray(data81)){if(data81.kind === undefined){const err166 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err166];}else {vErrors.push(err166);}errors++;}if(data81.value === undefined){const err167 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err167];}else {vErrors.push(err167);}errors++;}for(const key22 in data81){if(!((key22 === "kind") || (key22 === "value"))){const err168 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err168];}else {vErrors.push(err168);}errors++;}}if(data81.kind !== undefined){let data82 = data81.kind;if(typeof data82 !== "string"){const err169 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err169];}else {vErrors.push(err169);}errors++;}if(!((data82 === "absolute") || (data82 === "percent"))){const err170 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.coverage.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err170];}else {vErrors.push(err170);}errors++;}}if(data81.value !== undefined){let data83 = data81.value;if((typeof data83 == "number") && (isFinite(data83))){if(data83 < 0 || isNaN(data83)){const err171 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err171];}else {vErrors.push(err171);}errors++;}}else {const err172 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err172];}else {vErrors.push(err172);}errors++;}}}else {const err173 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err173];}else {vErrors.push(err173);}errors++;}}if(data78.floors !== undefined){let data84 = data78.floors;if(data84 && typeof data84 == "object" && !Array.isArray(data84)){for(const key23 in data84){let data85 = data84[key23];if(data85 && typeof data85 == "object" && !Array.isArray(data85)){for(const key24 in data85){let data86 = data85[key24];if(!((typeof data86 == "number") && (isFinite(data86)))){const err174 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key23.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key24.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err174];}else {vErrors.push(err174);}errors++;}}}else {const err175 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key23.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err175];}else {vErrors.push(err175);}errors++;}}}else {const err176 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err176];}else {vErrors.push(err176);}errors++;}}if(data78.components !== undefined){let data87 = data78.components;if(data87 && typeof data87 == "object" && !Array.isArray(data87)){for(const key25 in data87){let data88 = data87[key25];if(Array.isArray(data88)){const len9 = data88.length;for(let i11=0; i11<len9; i11++){let data89 = data88[i11];if(typeof data89 === "string"){if(func2(data89) < 1){const err177 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key25.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err177];}else {vErrors.push(err177);}errors++;}}else {const err178 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key25.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err178];}else {vErrors.push(err178);}errors++;}}}else {const err179 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key25.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err179];}else {vErrors.push(err179);}errors++;}}}else {const err180 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err180];}else {vErrors.push(err180);}errors++;}}if(data78.coveragePath !== undefined){let data90 = data78.coveragePath;const _errs236 = errors;const _errs237 = errors;if(typeof data90 === "string"){if(!pattern0.test(data90)){const err181 = {};if(vErrors === null){vErrors = [err181];}else {vErrors.push(err181);}errors++;}}var valid62 = _errs237 === errors;if(valid62){const err182 = {instancePath:instancePath+"/delivery/quality/gates/coverage/coveragePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/coveragePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err182];}else {vErrors.push(err182);}errors++;}else {errors = _errs236;if(vErrors !== null){if(_errs236){vErrors.length = _errs236;}else {vErrors = null;}}}if(typeof data90 === "string"){if(func2(data90) < 1){const err183 = {instancePath:instancePath+"/delivery/quality/gates/coverage/coveragePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/coveragePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err183];}else {vErrors.push(err183);}errors++;}}else {const err184 = {instancePath:instancePath+"/delivery/quality/gates/coverage/coveragePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/coveragePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err184];}else {vErrors.push(err184);}errors++;}}if(data78.captureScope !== undefined){let data91 = data78.captureScope;if(typeof data91 !== "string"){const err185 = {instancePath:instancePath+"/delivery/quality/gates/coverage/captureScope",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/captureScope/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err185];}else {vErrors.push(err185);}errors++;}if(!((data91 === "full") || (data91 === "affected"))){const err186 = {instancePath:instancePath+"/delivery/quality/gates/coverage/captureScope",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/captureScope/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.coverage.properties.captureScope.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err186];}else {vErrors.push(err186);}errors++;}}if(data78.timeoutMs !== undefined){let data92 = data78.timeoutMs;if(!(((typeof data92 == "number") && (!(data92 % 1) && !isNaN(data92))) && (isFinite(data92)))){const err187 = {instancePath:instancePath+"/delivery/quality/gates/coverage/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/timeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err187];}else {vErrors.push(err187);}errors++;}if((typeof data92 == "number") && (isFinite(data92))){if(data92 > 7200000 || isNaN(data92)){const err188 = {instancePath:instancePath+"/delivery/quality/gates/coverage/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/timeoutMs/maximum",keyword:"maximum",params:{comparison: "<=", limit: 7200000},message:"must be <= 7200000"};if(vErrors === null){vErrors = [err188];}else {vErrors.push(err188);}errors++;}if(data92 < 60000 || isNaN(data92)){const err189 = {instancePath:instancePath+"/delivery/quality/gates/coverage/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/timeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 60000},message:"must be >= 60000"};if(vErrors === null){vErrors = [err189];}else {vErrors.push(err189);}errors++;}}}}else {const err190 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err190];}else {vErrors.push(err190);}errors++;}}if(data77.crap !== undefined){let data93 = data77.crap;if(data93 && typeof data93 == "object" && !Array.isArray(data93)){for(const key26 in data93){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key26))){const err191 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key26},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err191];}else {vErrors.push(err191);}errors++;}}if(data93.enabled !== undefined){if(typeof data93.enabled !== "boolean"){const err192 = {instancePath:instancePath+"/delivery/quality/gates/crap/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err192];}else {vErrors.push(err192);}errors++;}}if(data93.baselinePath !== undefined){let data95 = data93.baselinePath;const _errs249 = errors;const _errs250 = errors;if(typeof data95 === "string"){if(!pattern0.test(data95)){const err193 = {};if(vErrors === null){vErrors = [err193];}else {vErrors.push(err193);}errors++;}}var valid64 = _errs250 === errors;if(valid64){const err194 = {instancePath:instancePath+"/delivery/quality/gates/crap/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err194];}else {vErrors.push(err194);}errors++;}else {errors = _errs249;if(vErrors !== null){if(_errs249){vErrors.length = _errs249;}else {vErrors = null;}}}if(typeof data95 === "string"){if(func2(data95) < 1){const err195 = {instancePath:instancePath+"/delivery/quality/gates/crap/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err195];}else {vErrors.push(err195);}errors++;}}else {const err196 = {instancePath:instancePath+"/delivery/quality/gates/crap/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err196];}else {vErrors.push(err196);}errors++;}}if(data93.tolerance !== undefined){let data96 = data93.tolerance;if(data96 && typeof data96 == "object" && !Array.isArray(data96)){if(data96.kind === undefined){const err197 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err197];}else {vErrors.push(err197);}errors++;}if(data96.value === undefined){const err198 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}for(const key27 in data96){if(!((key27 === "kind") || (key27 === "value"))){const err199 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key27},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err199];}else {vErrors.push(err199);}errors++;}}if(data96.kind !== undefined){let data97 = data96.kind;if(typeof data97 !== "string"){const err200 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}if(!((data97 === "absolute") || (data97 === "percent"))){const err201 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err201];}else {vErrors.push(err201);}errors++;}}if(data96.value !== undefined){let data98 = data96.value;if((typeof data98 == "number") && (isFinite(data98))){if(data98 < 0 || isNaN(data98)){const err202 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err202];}else {vErrors.push(err202);}errors++;}}else {const err203 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err203];}else {vErrors.push(err203);}errors++;}}}else {const err204 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err204];}else {vErrors.push(err204);}errors++;}}if(data93.floors !== undefined){let data99 = data93.floors;if(data99 && typeof data99 == "object" && !Array.isArray(data99)){for(const key28 in data99){let data100 = data99[key28];if(data100 && typeof data100 == "object" && !Array.isArray(data100)){for(const key29 in data100){let data101 = data100[key29];if(!((typeof data101 == "number") && (isFinite(data101)))){const err205 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key28.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key29.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err205];}else {vErrors.push(err205);}errors++;}}}else {const err206 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key28.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err206];}else {vErrors.push(err206);}errors++;}}}else {const err207 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err207];}else {vErrors.push(err207);}errors++;}}if(data93.components !== undefined){let data102 = data93.components;if(data102 && typeof data102 == "object" && !Array.isArray(data102)){for(const key30 in data102){let data103 = data102[key30];if(Array.isArray(data103)){const len10 = data103.length;for(let i12=0; i12<len10; i12++){let data104 = data103[i12];if(typeof data104 === "string"){if(func2(data104) < 1){const err208 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err208];}else {vErrors.push(err208);}errors++;}}else {const err209 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err209];}else {vErrors.push(err209);}errors++;}}}else {const err210 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key30.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err210];}else {vErrors.push(err210);}errors++;}}}else {const err211 = {instancePath:instancePath+"/delivery/quality/gates/crap/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err211];}else {vErrors.push(err211);}errors++;}}if(data93.targetDirs !== undefined){let data105 = data93.targetDirs;const _errs274 = errors;let valid71 = false;let passing0 = null;const _errs275 = errors;if(Array.isArray(data105)){const len11 = data105.length;for(let i13=0; i13<len11; i13++){if(typeof data105[i13] !== "string"){const err212 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i13,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err212];}else {vErrors.push(err212);}errors++;}}}else {const err213 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err213];}else {vErrors.push(err213);}errors++;}var _valid1 = _errs275 === errors;if(_valid1){valid71 = true;passing0 = 0;}const _errs279 = errors;if(data105 && typeof data105 == "object" && !Array.isArray(data105)){for(const key31 in data105){if(!((key31 === "append") || (key31 === "prepend"))){const err214 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key31},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err214];}else {vErrors.push(err214);}errors++;}}if(data105.append !== undefined){let data107 = data105.append;if(Array.isArray(data107)){const len12 = data107.length;for(let i14=0; i14<len12; i14++){if(typeof data107[i14] !== "string"){const err215 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i14,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err215];}else {vErrors.push(err215);}errors++;}}}else {const err216 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err216];}else {vErrors.push(err216);}errors++;}}if(data105.prepend !== undefined){let data109 = data105.prepend;if(Array.isArray(data109)){const len13 = data109.length;for(let i15=0; i15<len13; i15++){if(typeof data109[i15] !== "string"){const err217 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i15,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err217];}else {vErrors.push(err217);}errors++;}}}else {const err218 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err218];}else {vErrors.push(err218);}errors++;}}}else {const err219 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err219];}else {vErrors.push(err219);}errors++;}var _valid1 = _errs279 === errors;if(_valid1 && valid71){valid71 = false;passing0 = [passing0, 1];}else {if(_valid1){valid71 = true;passing0 = 1;}}if(!valid71){const err220 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err220];}else {vErrors.push(err220);}errors++;}else {errors = _errs274;if(vErrors !== null){if(_errs274){vErrors.length = _errs274;}else {vErrors = null;}}}}if(data93.newMethodCeiling !== undefined){let data111 = data93.newMethodCeiling;if(!(((typeof data111 == "number") && (!(data111 % 1) && !isNaN(data111))) && (isFinite(data111)))){const err221 = {instancePath:instancePath+"/delivery/quality/gates/crap/newMethodCeiling",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/newMethodCeiling/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err221];}else {vErrors.push(err221);}errors++;}if((typeof data111 == "number") && (isFinite(data111))){if(data111 < 1 || isNaN(data111)){const err222 = {instancePath:instancePath+"/delivery/quality/gates/crap/newMethodCeiling",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/newMethodCeiling/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err222];}else {vErrors.push(err222);}errors++;}}}if(data93.requireCoverage !== undefined){if(typeof data93.requireCoverage !== "boolean"){const err223 = {instancePath:instancePath+"/delivery/quality/gates/crap/requireCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/requireCoverage/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err223];}else {vErrors.push(err223);}errors++;}}if(data93.minMethodResolutionRate !== undefined){let data113 = data93.minMethodResolutionRate;if((typeof data113 == "number") && (isFinite(data113))){if(data113 > 1 || isNaN(data113)){const err224 = {instancePath:instancePath+"/delivery/quality/gates/crap/minMethodResolutionRate",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/minMethodResolutionRate/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1"};if(vErrors === null){vErrors = [err224];}else {vErrors.push(err224);}errors++;}if(data113 < 0 || isNaN(data113)){const err225 = {instancePath:instancePath+"/delivery/quality/gates/crap/minMethodResolutionRate",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/minMethodResolutionRate/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err225];}else {vErrors.push(err225);}errors++;}}else {const err226 = {instancePath:instancePath+"/delivery/quality/gates/crap/minMethodResolutionRate",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/minMethodResolutionRate/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err226];}else {vErrors.push(err226);}errors++;}}if(data93.ignoreGlobs !== undefined){let data114 = data93.ignoreGlobs;if(Array.isArray(data114)){const len14 = data114.length;for(let i16=0; i16<len14; i16++){let data115 = data114[i16];if(typeof data115 === "string"){if(func2(data115) < 1){const err227 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i16,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err227];}else {vErrors.push(err227);}errors++;}}else {const err228 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i16,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err228];}else {vErrors.push(err228);}errors++;}}}else {const err229 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err229];}else {vErrors.push(err229);}errors++;}}if(data93.incrementalCoverage !== undefined){let data116 = data93.incrementalCoverage;if(data116 && typeof data116 == "object" && !Array.isArray(data116)){for(const key32 in data116){if(!(((key32 === "skipWhenUnchanged") || (key32 === "baselineJoin")) || (key32 === "baseRef"))){const err230 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key32},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err230];}else {vErrors.push(err230);}errors++;}}if(data116.skipWhenUnchanged !== undefined){if(typeof data116.skipWhenUnchanged !== "boolean"){const err231 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/skipWhenUnchanged",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/skipWhenUnchanged/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err231];}else {vErrors.push(err231);}errors++;}}if(data116.baselineJoin !== undefined){if(typeof data116.baselineJoin !== "boolean"){const err232 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/baselineJoin",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/baselineJoin/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err232];}else {vErrors.push(err232);}errors++;}}if(data116.baseRef !== undefined){let data119 = data116.baseRef;if(typeof data119 === "string"){if(func2(data119) < 1){const err233 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/baseRef",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/baseRef/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err233];}else {vErrors.push(err233);}errors++;}}else {const err234 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/baseRef",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/baseRef/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err234];}else {vErrors.push(err234);}errors++;}}}else {const err235 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err235];}else {vErrors.push(err235);}errors++;}}}else {const err236 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err236];}else {vErrors.push(err236);}errors++;}}if(data77.maintainability !== undefined){let data120 = data77.maintainability;if(data120 && typeof data120 == "object" && !Array.isArray(data120)){for(const key33 in data120){if(!(((((((key33 === "enabled") || (key33 === "baselinePath")) || (key33 === "tolerance")) || (key33 === "floors")) || (key33 === "components")) || (key33 === "targetDirs")) || (key33 === "ignoreGlobs"))){const err237 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err237];}else {vErrors.push(err237);}errors++;}}if(data120.enabled !== undefined){if(typeof data120.enabled !== "boolean"){const err238 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err238];}else {vErrors.push(err238);}errors++;}}if(data120.baselinePath !== undefined){let data122 = data120.baselinePath;const _errs316 = errors;const _errs317 = errors;if(typeof data122 === "string"){if(!pattern0.test(data122)){const err239 = {};if(vErrors === null){vErrors = [err239];}else {vErrors.push(err239);}errors++;}}var valid83 = _errs317 === errors;if(valid83){const err240 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err240];}else {vErrors.push(err240);}errors++;}else {errors = _errs316;if(vErrors !== null){if(_errs316){vErrors.length = _errs316;}else {vErrors = null;}}}if(typeof data122 === "string"){if(func2(data122) < 1){const err241 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err241];}else {vErrors.push(err241);}errors++;}}else {const err242 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err242];}else {vErrors.push(err242);}errors++;}}if(data120.tolerance !== undefined){let data123 = data120.tolerance;if(data123 && typeof data123 == "object" && !Array.isArray(data123)){if(data123.kind === undefined){const err243 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err243];}else {vErrors.push(err243);}errors++;}if(data123.value === undefined){const err244 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err244];}else {vErrors.push(err244);}errors++;}for(const key34 in data123){if(!((key34 === "kind") || (key34 === "value"))){const err245 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key34},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err245];}else {vErrors.push(err245);}errors++;}}if(data123.kind !== undefined){let data124 = data123.kind;if(typeof data124 !== "string"){const err246 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err246];}else {vErrors.push(err246);}errors++;}if(!((data124 === "absolute") || (data124 === "percent"))){const err247 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err247];}else {vErrors.push(err247);}errors++;}}if(data123.value !== undefined){let data125 = data123.value;if((typeof data125 == "number") && (isFinite(data125))){if(data125 < 0 || isNaN(data125)){const err248 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err248];}else {vErrors.push(err248);}errors++;}}else {const err249 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err249];}else {vErrors.push(err249);}errors++;}}}else {const err250 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err250];}else {vErrors.push(err250);}errors++;}}if(data120.floors !== undefined){let data126 = data120.floors;if(data126 && typeof data126 == "object" && !Array.isArray(data126)){for(const key35 in data126){let data127 = data126[key35];if(data127 && typeof data127 == "object" && !Array.isArray(data127)){for(const key36 in data127){let data128 = data127[key36];if(!((typeof data128 == "number") && (isFinite(data128)))){const err251 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key36.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err251];}else {vErrors.push(err251);}errors++;}}}else {const err252 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err252];}else {vErrors.push(err252);}errors++;}}}else {const err253 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err253];}else {vErrors.push(err253);}errors++;}}if(data120.components !== undefined){let data129 = data120.components;if(data129 && typeof data129 == "object" && !Array.isArray(data129)){for(const key37 in data129){let data130 = data129[key37];if(Array.isArray(data130)){const len15 = data130.length;for(let i17=0; i17<len15; i17++){let data131 = data130[i17];if(typeof data131 === "string"){if(func2(data131) < 1){const err254 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err254];}else {vErrors.push(err254);}errors++;}}else {const err255 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err255];}else {vErrors.push(err255);}errors++;}}}else {const err256 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err256];}else {vErrors.push(err256);}errors++;}}}else {const err257 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err257];}else {vErrors.push(err257);}errors++;}}if(data120.targetDirs !== undefined){let data132 = data120.targetDirs;const _errs341 = errors;let valid90 = false;let passing1 = null;const _errs342 = errors;if(Array.isArray(data132)){const len16 = data132.length;for(let i18=0; i18<len16; i18++){if(typeof data132[i18] !== "string"){const err258 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i18,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err258];}else {vErrors.push(err258);}errors++;}}}else {const err259 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err259];}else {vErrors.push(err259);}errors++;}var _valid2 = _errs342 === errors;if(_valid2){valid90 = true;passing1 = 0;}const _errs346 = errors;if(data132 && typeof data132 == "object" && !Array.isArray(data132)){for(const key38 in data132){if(!((key38 === "append") || (key38 === "prepend"))){const err260 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err260];}else {vErrors.push(err260);}errors++;}}if(data132.append !== undefined){let data134 = data132.append;if(Array.isArray(data134)){const len17 = data134.length;for(let i19=0; i19<len17; i19++){if(typeof data134[i19] !== "string"){const err261 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i19,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err261];}else {vErrors.push(err261);}errors++;}}}else {const err262 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err262];}else {vErrors.push(err262);}errors++;}}if(data132.prepend !== undefined){let data136 = data132.prepend;if(Array.isArray(data136)){const len18 = data136.length;for(let i20=0; i20<len18; i20++){if(typeof data136[i20] !== "string"){const err263 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i20,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err263];}else {vErrors.push(err263);}errors++;}}}else {const err264 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err264];}else {vErrors.push(err264);}errors++;}}}else {const err265 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err265];}else {vErrors.push(err265);}errors++;}var _valid2 = _errs346 === errors;if(_valid2 && valid90){valid90 = false;passing1 = [passing1, 1];}else {if(_valid2){valid90 = true;passing1 = 1;}}if(!valid90){const err266 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err266];}else {vErrors.push(err266);}errors++;}else {errors = _errs341;if(vErrors !== null){if(_errs341){vErrors.length = _errs341;}else {vErrors = null;}}}}if(data120.ignoreGlobs !== undefined){let data138 = data120.ignoreGlobs;if(Array.isArray(data138)){const len19 = data138.length;for(let i21=0; i21<len19; i21++){let data139 = data138[i21];if(typeof data139 === "string"){if(func2(data139) < 1){const err267 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i21,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err267];}else {vErrors.push(err267);}errors++;}}else {const err268 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i21,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err268];}else {vErrors.push(err268);}errors++;}}}else {const err269 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err269];}else {vErrors.push(err269);}errors++;}}}else {const err270 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err270];}else {vErrors.push(err270);}errors++;}}if(data77.mutation !== undefined){let data140 = data77.mutation;if(data140 && typeof data140 == "object" && !Array.isArray(data140)){for(const key39 in data140){if(!(((((key39 === "enabled") || (key39 === "baselinePath")) || (key39 === "tolerance")) || (key39 === "floors")) || (key39 === "components"))){const err271 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key39},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err271];}else {vErrors.push(err271);}errors++;}}if(data140.enabled !== undefined){if(typeof data140.enabled !== "boolean"){const err272 = {instancePath:instancePath+"/delivery/quality/gates/mutation/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err272];}else {vErrors.push(err272);}errors++;}}if(data140.baselinePath !== undefined){let data142 = data140.baselinePath;const _errs368 = errors;const _errs369 = errors;if(typeof data142 === "string"){if(!pattern0.test(data142)){const err273 = {};if(vErrors === null){vErrors = [err273];}else {vErrors.push(err273);}errors++;}}var valid101 = _errs369 === errors;if(valid101){const err274 = {instancePath:instancePath+"/delivery/quality/gates/mutation/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err274];}else {vErrors.push(err274);}errors++;}else {errors = _errs368;if(vErrors !== null){if(_errs368){vErrors.length = _errs368;}else {vErrors = null;}}}if(typeof data142 === "string"){if(func2(data142) < 1){const err275 = {instancePath:instancePath+"/delivery/quality/gates/mutation/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err275];}else {vErrors.push(err275);}errors++;}}else {const err276 = {instancePath:instancePath+"/delivery/quality/gates/mutation/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err276];}else {vErrors.push(err276);}errors++;}}if(data140.tolerance !== undefined){let data143 = data140.tolerance;if(data143 && typeof data143 == "object" && !Array.isArray(data143)){if(data143.kind === undefined){const err277 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err277];}else {vErrors.push(err277);}errors++;}if(data143.value === undefined){const err278 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err278];}else {vErrors.push(err278);}errors++;}for(const key40 in data143){if(!((key40 === "kind") || (key40 === "value"))){const err279 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key40},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err279];}else {vErrors.push(err279);}errors++;}}if(data143.kind !== undefined){let data144 = data143.kind;if(typeof data144 !== "string"){const err280 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err280];}else {vErrors.push(err280);}errors++;}if(!((data144 === "absolute") || (data144 === "percent"))){const err281 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.mutation.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err281];}else {vErrors.push(err281);}errors++;}}if(data143.value !== undefined){let data145 = data143.value;if((typeof data145 == "number") && (isFinite(data145))){if(data145 < 0 || isNaN(data145)){const err282 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err282];}else {vErrors.push(err282);}errors++;}}else {const err283 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err283];}else {vErrors.push(err283);}errors++;}}}else {const err284 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err284];}else {vErrors.push(err284);}errors++;}}if(data140.floors !== undefined){let data146 = data140.floors;if(data146 && typeof data146 == "object" && !Array.isArray(data146)){for(const key41 in data146){let data147 = data146[key41];if(data147 && typeof data147 == "object" && !Array.isArray(data147)){for(const key42 in data147){let data148 = data147[key42];if(!((typeof data148 == "number") && (isFinite(data148)))){const err285 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key41.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key42.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err285];}else {vErrors.push(err285);}errors++;}}}else {const err286 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key41.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err286];}else {vErrors.push(err286);}errors++;}}}else {const err287 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err287];}else {vErrors.push(err287);}errors++;}}if(data140.components !== undefined){let data149 = data140.components;if(data149 && typeof data149 == "object" && !Array.isArray(data149)){for(const key43 in data149){let data150 = data149[key43];if(Array.isArray(data150)){const len20 = data150.length;for(let i22=0; i22<len20; i22++){let data151 = data150[i22];if(typeof data151 === "string"){if(func2(data151) < 1){const err288 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key43.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i22,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err288];}else {vErrors.push(err288);}errors++;}}else {const err289 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key43.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i22,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err289];}else {vErrors.push(err289);}errors++;}}}else {const err290 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key43.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err290];}else {vErrors.push(err290);}errors++;}}}else {const err291 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err291];}else {vErrors.push(err291);}errors++;}}}else {const err292 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err292];}else {vErrors.push(err292);}errors++;}}if(data77["bundle-size"] !== undefined){let data152 = data77["bundle-size"];if(data152 && typeof data152 == "object" && !Array.isArray(data152)){for(const key44 in data152){if(!((((((key44 === "enabled") || (key44 === "baselinePath")) || (key44 === "tolerance")) || (key44 === "floors")) || (key44 === "components")) || (key44 === "bundles"))){const err293 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key44},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err293];}else {vErrors.push(err293);}errors++;}}if(data152.enabled !== undefined){if(typeof data152.enabled !== "boolean"){const err294 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err294];}else {vErrors.push(err294);}errors++;}}if(data152.baselinePath !== undefined){let data154 = data152.baselinePath;const _errs399 = errors;const _errs400 = errors;if(typeof data154 === "string"){if(!pattern0.test(data154)){const err295 = {};if(vErrors === null){vErrors = [err295];}else {vErrors.push(err295);}errors++;}}var valid109 = _errs400 === errors;if(valid109){const err296 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err296];}else {vErrors.push(err296);}errors++;}else {errors = _errs399;if(vErrors !== null){if(_errs399){vErrors.length = _errs399;}else {vErrors = null;}}}if(typeof data154 === "string"){if(func2(data154) < 1){const err297 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err297];}else {vErrors.push(err297);}errors++;}}else {const err298 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err298];}else {vErrors.push(err298);}errors++;}}if(data152.tolerance !== undefined){let data155 = data152.tolerance;if(data155 && typeof data155 == "object" && !Array.isArray(data155)){if(data155.kind === undefined){const err299 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err299];}else {vErrors.push(err299);}errors++;}if(data155.value === undefined){const err300 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err300];}else {vErrors.push(err300);}errors++;}for(const key45 in data155){if(!((key45 === "kind") || (key45 === "value"))){const err301 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key45},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err301];}else {vErrors.push(err301);}errors++;}}if(data155.kind !== undefined){let data156 = data155.kind;if(typeof data156 !== "string"){const err302 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err302];}else {vErrors.push(err302);}errors++;}if(!((data156 === "absolute") || (data156 === "percent"))){const err303 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties["bundle-size"].properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err303];}else {vErrors.push(err303);}errors++;}}if(data155.value !== undefined){let data157 = data155.value;if((typeof data157 == "number") && (isFinite(data157))){if(data157 < 0 || isNaN(data157)){const err304 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err304];}else {vErrors.push(err304);}errors++;}}else {const err305 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err305];}else {vErrors.push(err305);}errors++;}}}else {const err306 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err306];}else {vErrors.push(err306);}errors++;}}if(data152.floors !== undefined){let data158 = data152.floors;if(data158 && typeof data158 == "object" && !Array.isArray(data158)){for(const key46 in data158){let data159 = data158[key46];if(data159 && typeof data159 == "object" && !Array.isArray(data159)){for(const key47 in data159){let data160 = data159[key47];if(!((typeof data160 == "number") && (isFinite(data160)))){const err307 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key46.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key47.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err307];}else {vErrors.push(err307);}errors++;}}}else {const err308 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key46.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err308];}else {vErrors.push(err308);}errors++;}}}else {const err309 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err309];}else {vErrors.push(err309);}errors++;}}if(data152.components !== undefined){let data161 = data152.components;if(data161 && typeof data161 == "object" && !Array.isArray(data161)){for(const key48 in data161){let data162 = data161[key48];if(Array.isArray(data162)){const len21 = data162.length;for(let i23=0; i23<len21; i23++){let data163 = data162[i23];if(typeof data163 === "string"){if(func2(data163) < 1){const err310 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key48.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err310];}else {vErrors.push(err310);}errors++;}}else {const err311 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key48.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err311];}else {vErrors.push(err311);}errors++;}}}else {const err312 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key48.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err312];}else {vErrors.push(err312);}errors++;}}}else {const err313 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err313];}else {vErrors.push(err313);}errors++;}}if(data152.bundles !== undefined){let data164 = data152.bundles;if(Array.isArray(data164)){const len22 = data164.length;for(let i24=0; i24<len22; i24++){let data165 = data164[i24];if(data165 && typeof data165 == "object" && !Array.isArray(data165)){if(data165.name === undefined){const err314 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err314];}else {vErrors.push(err314);}errors++;}if(data165.path === undefined){const err315 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err315];}else {vErrors.push(err315);}errors++;}if(data165.limit === undefined){const err316 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "limit"},message:"must have required property '"+"limit"+"'"};if(vErrors === null){vErrors = [err316];}else {vErrors.push(err316);}errors++;}for(const key49 in data165){if(!(((key49 === "name") || (key49 === "path")) || (key49 === "limit"))){const err317 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key49},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err317];}else {vErrors.push(err317);}errors++;}}if(data165.name !== undefined){let data166 = data165.name;if(typeof data166 === "string"){if(func2(data166) < 1){const err318 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err318];}else {vErrors.push(err318);}errors++;}}else {const err319 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err319];}else {vErrors.push(err319);}errors++;}}if(data165.path !== undefined){let data167 = data165.path;if(typeof data167 === "string"){if(func2(data167) < 1){const err320 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err320];}else {vErrors.push(err320);}errors++;}}else {const err321 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err321];}else {vErrors.push(err321);}errors++;}}if(data165.limit !== undefined){let data168 = data165.limit;if(typeof data168 === "string"){if(func2(data168) < 1){const err322 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err322];}else {vErrors.push(err322);}errors++;}}else {const err323 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err323];}else {vErrors.push(err323);}errors++;}}}else {const err324 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err324];}else {vErrors.push(err324);}errors++;}}}else {const err325 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err325];}else {vErrors.push(err325);}errors++;}}}else {const err326 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err326];}else {vErrors.push(err326);}errors++;}}if(data77.duplication !== undefined){let data169 = data77.duplication;if(data169 && typeof data169 == "object" && !Array.isArray(data169)){for(const key50 in data169){if(!(((((((key50 === "enabled") || (key50 === "baselinePath")) || (key50 === "tolerance")) || (key50 === "floors")) || (key50 === "components")) || (key50 === "targetDirs")) || (key50 === "ignoreGlobs"))){const err327 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key50},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err327];}else {vErrors.push(err327);}errors++;}}if(data169.enabled !== undefined){if(typeof data169.enabled !== "boolean"){const err328 = {instancePath:instancePath+"/delivery/quality/gates/duplication/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err328];}else {vErrors.push(err328);}errors++;}}if(data169.baselinePath !== undefined){let data171 = data169.baselinePath;const _errs441 = errors;const _errs442 = errors;if(typeof data171 === "string"){if(!pattern0.test(data171)){const err329 = {};if(vErrors === null){vErrors = [err329];}else {vErrors.push(err329);}errors++;}}var valid120 = _errs442 === errors;if(valid120){const err330 = {instancePath:instancePath+"/delivery/quality/gates/duplication/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err330];}else {vErrors.push(err330);}errors++;}else {errors = _errs441;if(vErrors !== null){if(_errs441){vErrors.length = _errs441;}else {vErrors = null;}}}if(typeof data171 === "string"){if(func2(data171) < 1){const err331 = {instancePath:instancePath+"/delivery/quality/gates/duplication/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err331];}else {vErrors.push(err331);}errors++;}}else {const err332 = {instancePath:instancePath+"/delivery/quality/gates/duplication/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err332];}else {vErrors.push(err332);}errors++;}}if(data169.tolerance !== undefined){let data172 = data169.tolerance;if(data172 && typeof data172 == "object" && !Array.isArray(data172)){if(data172.kind === undefined){const err333 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err333];}else {vErrors.push(err333);}errors++;}if(data172.value === undefined){const err334 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err334];}else {vErrors.push(err334);}errors++;}for(const key51 in data172){if(!((key51 === "kind") || (key51 === "value"))){const err335 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key51},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err335];}else {vErrors.push(err335);}errors++;}}if(data172.kind !== undefined){let data173 = data172.kind;if(typeof data173 !== "string"){const err336 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err336];}else {vErrors.push(err336);}errors++;}if(!((data173 === "absolute") || (data173 === "percent"))){const err337 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.duplication.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err337];}else {vErrors.push(err337);}errors++;}}if(data172.value !== undefined){let data174 = data172.value;if((typeof data174 == "number") && (isFinite(data174))){if(data174 < 0 || isNaN(data174)){const err338 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err338];}else {vErrors.push(err338);}errors++;}}else {const err339 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err339];}else {vErrors.push(err339);}errors++;}}}else {const err340 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err340];}else {vErrors.push(err340);}errors++;}}if(data169.floors !== undefined){let data175 = data169.floors;if(data175 && typeof data175 == "object" && !Array.isArray(data175)){for(const key52 in data175){let data176 = data175[key52];if(data176 && typeof data176 == "object" && !Array.isArray(data176)){for(const key53 in data176){let data177 = data176[key53];if(!((typeof data177 == "number") && (isFinite(data177)))){const err341 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key52.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key53.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err341];}else {vErrors.push(err341);}errors++;}}}else {const err342 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key52.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err342];}else {vErrors.push(err342);}errors++;}}}else {const err343 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err343];}else {vErrors.push(err343);}errors++;}}if(data169.components !== undefined){let data178 = data169.components;if(data178 && typeof data178 == "object" && !Array.isArray(data178)){for(const key54 in data178){let data179 = data178[key54];if(Array.isArray(data179)){const len23 = data179.length;for(let i25=0; i25<len23; i25++){let data180 = data179[i25];if(typeof data180 === "string"){if(func2(data180) < 1){const err344 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err344];}else {vErrors.push(err344);}errors++;}}else {const err345 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err345];}else {vErrors.push(err345);}errors++;}}}else {const err346 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key54.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err346];}else {vErrors.push(err346);}errors++;}}}else {const err347 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err347];}else {vErrors.push(err347);}errors++;}}if(data169.targetDirs !== undefined){let data181 = data169.targetDirs;const _errs466 = errors;let valid127 = false;let passing2 = null;const _errs467 = errors;if(Array.isArray(data181)){const len24 = data181.length;for(let i26=0; i26<len24; i26++){if(typeof data181[i26] !== "string"){const err348 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i26,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err348];}else {vErrors.push(err348);}errors++;}}}else {const err349 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err349];}else {vErrors.push(err349);}errors++;}var _valid3 = _errs467 === errors;if(_valid3){valid127 = true;passing2 = 0;}const _errs471 = errors;if(data181 && typeof data181 == "object" && !Array.isArray(data181)){for(const key55 in data181){if(!((key55 === "append") || (key55 === "prepend"))){const err350 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key55},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err350];}else {vErrors.push(err350);}errors++;}}if(data181.append !== undefined){let data183 = data181.append;if(Array.isArray(data183)){const len25 = data183.length;for(let i27=0; i27<len25; i27++){if(typeof data183[i27] !== "string"){const err351 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i27,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err351];}else {vErrors.push(err351);}errors++;}}}else {const err352 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err352];}else {vErrors.push(err352);}errors++;}}if(data181.prepend !== undefined){let data185 = data181.prepend;if(Array.isArray(data185)){const len26 = data185.length;for(let i28=0; i28<len26; i28++){if(typeof data185[i28] !== "string"){const err353 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i28,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err353];}else {vErrors.push(err353);}errors++;}}}else {const err354 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err354];}else {vErrors.push(err354);}errors++;}}}else {const err355 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err355];}else {vErrors.push(err355);}errors++;}var _valid3 = _errs471 === errors;if(_valid3 && valid127){valid127 = false;passing2 = [passing2, 1];}else {if(_valid3){valid127 = true;passing2 = 1;}}if(!valid127){const err356 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err356];}else {vErrors.push(err356);}errors++;}else {errors = _errs466;if(vErrors !== null){if(_errs466){vErrors.length = _errs466;}else {vErrors = null;}}}}if(data169.ignoreGlobs !== undefined){let data187 = data169.ignoreGlobs;if(Array.isArray(data187)){const len27 = data187.length;for(let i29=0; i29<len27; i29++){let data188 = data187[i29];if(typeof data188 === "string"){if(func2(data188) < 1){const err357 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err357];}else {vErrors.push(err357);}errors++;}}else {const err358 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err358];}else {vErrors.push(err358);}errors++;}}}else {const err359 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err359];}else {vErrors.push(err359);}errors++;}}}else {const err360 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err360];}else {vErrors.push(err360);}errors++;}}}else {const err361 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err361];}else {vErrors.push(err361);}errors++;}}if(data76.autoRefresh !== undefined){let data189 = data76.autoRefresh;if(data189 && typeof data189 == "object" && !Array.isArray(data189)){for(const key56 in data189){if(!(key56 === "enabled")){const err362 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key56},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err362];}else {vErrors.push(err362);}errors++;}}if(data189.enabled !== undefined){if(typeof data189.enabled !== "boolean"){const err363 = {instancePath:instancePath+"/delivery/quality/autoRefresh/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err363];}else {vErrors.push(err363);}errors++;}}}else {const err364 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err364];}else {vErrors.push(err364);}errors++;}}if(data76.requireBaselines !== undefined){if(typeof data76.requireBaselines !== "boolean"){const err365 = {instancePath:instancePath+"/delivery/quality/requireBaselines",schemaPath:"#/properties/delivery/properties/quality/properties/requireBaselines/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err365];}else {vErrors.push(err365);}errors++;}}if(data76.navigability !== undefined){let data192 = data76.navigability;if(data192 && typeof data192 == "object" && !Array.isArray(data192)){for(const key57 in data192){if(!(((key57 === "routeGlobs") || (key57 === "navRegistry")) || (key57 === "journeySuite"))){const err366 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err366];}else {vErrors.push(err366);}errors++;}}if(data192.routeGlobs !== undefined){let data193 = data192.routeGlobs;if(Array.isArray(data193)){const len28 = data193.length;for(let i30=0; i30<len28; i30++){if(typeof data193[i30] !== "string"){const err367 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err367];}else {vErrors.push(err367);}errors++;}}}else {const err368 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err368];}else {vErrors.push(err368);}errors++;}}if(data192.navRegistry !== undefined){let data195 = data192.navRegistry;if(Array.isArray(data195)){const len29 = data195.length;for(let i31=0; i31<len29; i31++){if(typeof data195[i31] !== "string"){const err369 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err369];}else {vErrors.push(err369);}errors++;}}}else {const err370 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err370];}else {vErrors.push(err370);}errors++;}}if(data192.journeySuite !== undefined){if(typeof data192.journeySuite !== "string"){const err371 = {instancePath:instancePath+"/delivery/quality/navigability/journeySuite",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/journeySuite/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err371];}else {vErrors.push(err371);}errors++;}}}else {const err372 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err372];}else {vErrors.push(err372);}errors++;}}}else {const err373 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err373];}else {vErrors.push(err373);}errors++;}}if(data49.mergeWatch !== undefined){let data198 = data49.mergeWatch;if(data198 && typeof data198 == "object" && !Array.isArray(data198)){for(const key58 in data198){if(!(((key58 === "mode") || (key58 === "maxWaitSeconds")) || (key58 === "maxBudgetSeconds"))){const err374 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key58},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err374];}else {vErrors.push(err374);}errors++;}}if(data198.mode !== undefined){let data199 = data198.mode;if(typeof data199 !== "string"){const err375 = {instancePath:instancePath+"/delivery/mergeWatch/mode",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/mode/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err375];}else {vErrors.push(err375);}errors++;}if(!((data199 === "sync") || (data199 === "async"))){const err376 = {instancePath:instancePath+"/delivery/mergeWatch/mode",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/mode/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.mergeWatch.properties.mode.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err376];}else {vErrors.push(err376);}errors++;}}if(data198.maxWaitSeconds !== undefined){let data200 = data198.maxWaitSeconds;if(!(((typeof data200 == "number") && (!(data200 % 1) && !isNaN(data200))) && (isFinite(data200)))){const err377 = {instancePath:instancePath+"/delivery/mergeWatch/maxWaitSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxWaitSeconds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err377];}else {vErrors.push(err377);}errors++;}if((typeof data200 == "number") && (isFinite(data200))){if(data200 < 1 || isNaN(data200)){const err378 = {instancePath:instancePath+"/delivery/mergeWatch/maxWaitSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxWaitSeconds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err378];}else {vErrors.push(err378);}errors++;}}}if(data198.maxBudgetSeconds !== undefined){let data201 = data198.maxBudgetSeconds;if(!(((typeof data201 == "number") && (!(data201 % 1) && !isNaN(data201))) && (isFinite(data201)))){const err379 = {instancePath:instancePath+"/delivery/mergeWatch/maxBudgetSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxBudgetSeconds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err379];}else {vErrors.push(err379);}errors++;}if((typeof data201 == "number") && (isFinite(data201))){if(data201 < 1 || isNaN(data201)){const err380 = {instancePath:instancePath+"/delivery/mergeWatch/maxBudgetSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/maxBudgetSeconds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err380];}else {vErrors.push(err380);}errors++;}}}}else {const err381 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err381];}else {vErrors.push(err381);}errors++;}}if(data49.codeReview !== undefined){let data202 = data49.codeReview;if(data202 && typeof data202 == "object" && !Array.isArray(data202)){for(const key59 in data202){if(!((key59 === "providers") || (key59 === "autoFixSeverity"))){const err382 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key59},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err382];}else {vErrors.push(err382);}errors++;}}if(data202.providers !== undefined){let data203 = data202.providers;if(Array.isArray(data203)){const len30 = data203.length;for(let i32=0; i32<len30; i32++){let data204 = data203[i32];if(data204 && typeof data204 == "object" && !Array.isArray(data204)){if(data204.name === undefined){const err383 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err383];}else {vErrors.push(err383);}errors++;}for(const key60 in data204){if(!(((((key60 === "name") || (key60 === "scopes")) || (key60 === "optional")) || (key60 === "manualPrompt")) || (key60 === "when"))){const err384 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key60},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err384];}else {vErrors.push(err384);}errors++;}}if(data204.name !== undefined){let data205 = data204.name;if(typeof data205 !== "string"){const err385 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err385];}else {vErrors.push(err385);}errors++;}if(!(((((data205 === "native") || (data205 === "code-review")) || (data205 === "codex")) || (data205 === "security-review")) || (data205 === "ultrareview"))){const err386 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.name.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err386];}else {vErrors.push(err386);}errors++;}}if(data204.scopes !== undefined){let data206 = data204.scopes;if(Array.isArray(data206)){const len31 = data206.length;for(let i33=0; i33<len31; i33++){let data207 = data206[i33];if(typeof data207 !== "string"){const err387 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/scopes/" + i33,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err387];}else {vErrors.push(err387);}errors++;}if(!((data207 === "story") || (data207 === "epic"))){const err388 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/scopes/" + i33,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.scopes.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err388];}else {vErrors.push(err388);}errors++;}}}else {const err389 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/scopes",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err389];}else {vErrors.push(err389);}errors++;}}if(data204.optional !== undefined){if(typeof data204.optional !== "boolean"){const err390 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/optional",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/optional/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err390];}else {vErrors.push(err390);}errors++;}}if(data204.manualPrompt !== undefined){if(typeof data204.manualPrompt !== "boolean"){const err391 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/manualPrompt",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/manualPrompt/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err391];}else {vErrors.push(err391);}errors++;}}if(data204.when !== undefined){let data210 = data204.when;if(data210 && typeof data210 == "object" && !Array.isArray(data210)){for(const key61 in data210){if(!((key61 === "label") || (key61 === "labelAny"))){const err392 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key61},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err392];}else {vErrors.push(err392);}errors++;}}if(data210.label !== undefined){let data211 = data210.label;if(typeof data211 === "string"){if(func2(data211) < 1){const err393 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err393];}else {vErrors.push(err393);}errors++;}}else {const err394 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err394];}else {vErrors.push(err394);}errors++;}}if(data210.labelAny !== undefined){let data212 = data210.labelAny;if(Array.isArray(data212)){if(data212.length < 1){const err395 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err395];}else {vErrors.push(err395);}errors++;}const len32 = data212.length;for(let i34=0; i34<len32; i34++){let data213 = data212[i34];if(typeof data213 === "string"){if(func2(data213) < 1){const err396 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny/" + i34,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err396];}else {vErrors.push(err396);}errors++;}}else {const err397 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny/" + i34,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err397];}else {vErrors.push(err397);}errors++;}}}else {const err398 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err398];}else {vErrors.push(err398);}errors++;}}}else {const err399 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err399];}else {vErrors.push(err399);}errors++;}}}else {const err400 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i32,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err400];}else {vErrors.push(err400);}errors++;}}}else {const err401 = {instancePath:instancePath+"/delivery/codeReview/providers",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err401];}else {vErrors.push(err401);}errors++;}}if(data202.autoFixSeverity !== undefined){let data214 = data202.autoFixSeverity;if(typeof data214 !== "string"){const err402 = {instancePath:instancePath+"/delivery/codeReview/autoFixSeverity",schemaPath:"#/properties/delivery/properties/codeReview/properties/autoFixSeverity/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err402];}else {vErrors.push(err402);}errors++;}if(!((data214 === "high") || (data214 === "medium"))){const err403 = {instancePath:instancePath+"/delivery/codeReview/autoFixSeverity",schemaPath:"#/properties/delivery/properties/codeReview/properties/autoFixSeverity/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.autoFixSeverity.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err403];}else {vErrors.push(err403);}errors++;}}}else {const err404 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err404];}else {vErrors.push(err404);}errors++;}}if(data49.refactorStage !== undefined){let data215 = data49.refactorStage;if(data215 && typeof data215 == "object" && !Array.isArray(data215)){for(const key62 in data215){if(!(key62 === "enabled")){const err405 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key62},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err405];}else {vErrors.push(err405);}errors++;}}if(data215.enabled !== undefined){if(typeof data215.enabled !== "boolean"){const err406 = {instancePath:instancePath+"/delivery/refactorStage/enabled",schemaPath:"#/properties/delivery/properties/refactorStage/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err406];}else {vErrors.push(err406);}errors++;}}}else {const err407 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err407];}else {vErrors.push(err407);}errors++;}}if(data49.acceptanceEval !== undefined){let data217 = data49.acceptanceEval;if(data217 && typeof data217 == "object" && !Array.isArray(data217)){for(const key63 in data217){if(!(key63 === "maxRounds")){const err408 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err408];}else {vErrors.push(err408);}errors++;}}if(data217.maxRounds !== undefined){let data218 = data217.maxRounds;if(!(((typeof data218 == "number") && (!(data218 % 1) && !isNaN(data218))) && (isFinite(data218)))){const err409 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err409];}else {vErrors.push(err409);}errors++;}if((typeof data218 == "number") && (isFinite(data218))){if(data218 < 0 || isNaN(data218)){const err410 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err410];}else {vErrors.push(err410);}errors++;}}}}else {const err411 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err411];}else {vErrors.push(err411);}errors++;}}if(data49.feedbackLoop !== undefined){let data219 = data49.feedbackLoop;if(data219 && typeof data219 == "object" && !Array.isArray(data219)){for(const key64 in data219){if(!(key64 === "retroProposals")){const err412 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key64},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err412];}else {vErrors.push(err412);}errors++;}}if(data219.retroProposals !== undefined){if(typeof data219.retroProposals !== "boolean"){const err413 = {instancePath:instancePath+"/delivery/feedbackLoop/retroProposals",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/retroProposals/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err413];}else {vErrors.push(err413);}errors++;}}}else {const err414 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err414];}else {vErrors.push(err414);}errors++;}}if(data49.ci !== undefined){let data221 = data49.ci;if(data221 && typeof data221 == "object" && !Array.isArray(data221)){for(const key65 in data221){if(!((((key65 === "autoMerge") || (key65 === "blockOnAdvisoryFailure")) || (key65 === "advisoryAllowlist")) || (key65 === "rerunAdvisory"))){const err415 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key65},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err415];}else {vErrors.push(err415);}errors++;}}if(data221.autoMerge !== undefined){let data222 = data221.autoMerge;if(typeof data222 !== "string"){const err416 = {instancePath:instancePath+"/delivery/ci/autoMerge",schemaPath:"#/properties/delivery/properties/ci/properties/autoMerge/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err416];}else {vErrors.push(err416);}errors++;}if(!((data222 === "trust-ci") || (data222 === "strict"))){const err417 = {instancePath:instancePath+"/delivery/ci/autoMerge",schemaPath:"#/properties/delivery/properties/ci/properties/autoMerge/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.ci.properties.autoMerge.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err417];}else {vErrors.push(err417);}errors++;}}if(data221.blockOnAdvisoryFailure !== undefined){if(typeof data221.blockOnAdvisoryFailure !== "boolean"){const err418 = {instancePath:instancePath+"/delivery/ci/blockOnAdvisoryFailure",schemaPath:"#/properties/delivery/properties/ci/properties/blockOnAdvisoryFailure/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err418];}else {vErrors.push(err418);}errors++;}}if(data221.advisoryAllowlist !== undefined){let data224 = data221.advisoryAllowlist;if(Array.isArray(data224)){const len33 = data224.length;for(let i35=0; i35<len33; i35++){if(typeof data224[i35] !== "string"){const err419 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i35,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err419];}else {vErrors.push(err419);}errors++;}}}else {const err420 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist",schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err420];}else {vErrors.push(err420);}errors++;}}if(data221.rerunAdvisory !== undefined){let data226 = data221.rerunAdvisory;if(!(((typeof data226 == "number") && (!(data226 % 1) && !isNaN(data226))) && (isFinite(data226)))){const err421 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err421];}else {vErrors.push(err421);}errors++;}if((typeof data226 == "number") && (isFinite(data226))){if(data226 < 0 || isNaN(data226)){const err422 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err422];}else {vErrors.push(err422);}errors++;}}}}else {const err423 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err423];}else {vErrors.push(err423);}errors++;}}if(data49.routing !== undefined){let data227 = data49.routing;if(data227 && typeof data227 == "object" && !Array.isArray(data227)){for(const key66 in data227){if(!(((key66 === "roleScopedAgents") || (key66 === "ceremonyProfile")) || (key66 === "closeAndLand"))){const err424 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key66},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err424];}else {vErrors.push(err424);}errors++;}}if(data227.roleScopedAgents !== undefined){if(typeof data227.roleScopedAgents !== "boolean"){const err425 = {instancePath:instancePath+"/delivery/routing/roleScopedAgents",schemaPath:"#/properties/delivery/properties/routing/properties/roleScopedAgents/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err425];}else {vErrors.push(err425);}errors++;}}if(data227.ceremonyProfile !== undefined){let data229 = data227.ceremonyProfile;if(typeof data229 !== "string"){const err426 = {instancePath:instancePath+"/delivery/routing/ceremonyProfile",schemaPath:"#/properties/delivery/properties/routing/properties/ceremonyProfile/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err426];}else {vErrors.push(err426);}errors++;}if(!(((data229 === "minimal") || (data229 === "standard")) || (data229 === "strict"))){const err427 = {instancePath:instancePath+"/delivery/routing/ceremonyProfile",schemaPath:"#/properties/delivery/properties/routing/properties/ceremonyProfile/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.routing.properties.ceremonyProfile.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err427];}else {vErrors.push(err427);}errors++;}}if(data227.closeAndLand !== undefined){if(typeof data227.closeAndLand !== "boolean"){const err428 = {instancePath:instancePath+"/delivery/routing/closeAndLand",schemaPath:"#/properties/delivery/properties/routing/properties/closeAndLand/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err428];}else {vErrors.push(err428);}errors++;}}}else {const err429 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err429];}else {vErrors.push(err429);}errors++;}}}else {const err430 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err430];}else {vErrors.push(err430);}errors++;}}if(data.qa !== undefined){let data231 = data.qa;if(data231 && typeof data231 == "object" && !Array.isArray(data231)){for(const key67 in data231){if(!(((((((key67 === "featureRoot") || (key67 === "fixturesManifest")) || (key67 === "environments")) || (key67 === "personas")) || (key67 === "gherkinLint")) || (key67 === "consoleAllowlist")) || (key67 === "designTokens"))){const err431 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key67},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err431];}else {vErrors.push(err431);}errors++;}}if(data231.featureRoot !== undefined){let data232 = data231.featureRoot;const _errs586 = errors;const _errs587 = errors;if(typeof data232 === "string"){if(!pattern0.test(data232)){const err432 = {};if(vErrors === null){vErrors = [err432];}else {vErrors.push(err432);}errors++;}}var valid161 = _errs587 === errors;if(valid161){const err433 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err433];}else {vErrors.push(err433);}errors++;}else {errors = _errs586;if(vErrors !== null){if(_errs586){vErrors.length = _errs586;}else {vErrors = null;}}}if(typeof data232 === "string"){if(func2(data232) < 1){const err434 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err434];}else {vErrors.push(err434);}errors++;}}else {const err435 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err435];}else {vErrors.push(err435);}errors++;}}if(data231.fixturesManifest !== undefined){let data233 = data231.fixturesManifest;const _errs590 = errors;const _errs591 = errors;if(typeof data233 === "string"){if(!pattern0.test(data233)){const err436 = {};if(vErrors === null){vErrors = [err436];}else {vErrors.push(err436);}errors++;}}var valid162 = _errs591 === errors;if(valid162){const err437 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err437];}else {vErrors.push(err437);}errors++;}else {errors = _errs590;if(vErrors !== null){if(_errs590){vErrors.length = _errs590;}else {vErrors = null;}}}if(typeof data233 === "string"){if(func2(data233) < 1){const err438 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err438];}else {vErrors.push(err438);}errors++;}}else {const err439 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err439];}else {vErrors.push(err439);}errors++;}}if(data231.environments !== undefined){let data234 = data231.environments;if(data234 && typeof data234 == "object" && !Array.isArray(data234)){if(Object.keys(data234).length < 1){const err440 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/minProperties",keyword:"minProperties",params:{limit: 1},message:"must NOT have fewer than 1 properties"};if(vErrors === null){vErrors = [err440];}else {vErrors.push(err440);}errors++;}for(const key68 in data234){let data235 = data234[key68];if(data235 && typeof data235 == "object" && !Array.isArray(data235)){if(data235.baseUrl === undefined){const err441 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/required",keyword:"required",params:{missingProperty: "baseUrl"},message:"must have required property '"+"baseUrl"+"'"};if(vErrors === null){vErrors = [err441];}else {vErrors.push(err441);}errors++;}for(const key69 in data235){if(!(((key69 === "baseUrl") || (key69 === "signInSeam")) || (key69 === "allowWrites"))){const err442 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err442];}else {vErrors.push(err442);}errors++;}}if(data235.baseUrl !== undefined){let data236 = data235.baseUrl;const _errs600 = errors;const _errs601 = errors;if(typeof data236 === "string"){if(!pattern0.test(data236)){const err443 = {};if(vErrors === null){vErrors = [err443];}else {vErrors.push(err443);}errors++;}}var valid165 = _errs601 === errors;if(valid165){const err444 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/baseUrl",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/baseUrl/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err444];}else {vErrors.push(err444);}errors++;}else {errors = _errs600;if(vErrors !== null){if(_errs600){vErrors.length = _errs600;}else {vErrors = null;}}}if(typeof data236 === "string"){if(func2(data236) < 1){const err445 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/baseUrl",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/baseUrl/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err445];}else {vErrors.push(err445);}errors++;}}else {const err446 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/baseUrl",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/baseUrl/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err446];}else {vErrors.push(err446);}errors++;}}if(data235.signInSeam !== undefined){let data237 = data235.signInSeam;const _errs603 = errors;let valid166 = false;let passing3 = null;const _errs604 = errors;if(data237 && typeof data237 == "object" && !Array.isArray(data237)){if(data237.urlTemplate === undefined){const err447 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/required",keyword:"required",params:{missingProperty: "urlTemplate"},message:"must have required property '"+"urlTemplate"+"'"};if(vErrors === null){vErrors = [err447];}else {vErrors.push(err447);}errors++;}for(const key70 in data237){if(!(key70 === "urlTemplate")){const err448 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key70},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err448];}else {vErrors.push(err448);}errors++;}}if(data237.urlTemplate !== undefined){let data238 = data237.urlTemplate;const _errs609 = errors;const _errs610 = errors;if(typeof data238 === "string"){if(!pattern0.test(data238)){const err449 = {};if(vErrors === null){vErrors = [err449];}else {vErrors.push(err449);}errors++;}}var valid168 = _errs610 === errors;if(valid168){const err450 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/urlTemplate",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/properties/urlTemplate/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err450];}else {vErrors.push(err450);}errors++;}else {errors = _errs609;if(vErrors !== null){if(_errs609){vErrors.length = _errs609;}else {vErrors = null;}}}if(typeof data238 === "string"){if(func2(data238) < 1){const err451 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/urlTemplate",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/properties/urlTemplate/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err451];}else {vErrors.push(err451);}errors++;}}else {const err452 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/urlTemplate",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/properties/urlTemplate/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err452];}else {vErrors.push(err452);}errors++;}}}else {const err453 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err453];}else {vErrors.push(err453);}errors++;}var _valid4 = _errs604 === errors;if(_valid4){valid166 = true;passing3 = 0;}const _errs611 = errors;if(data237 && typeof data237 == "object" && !Array.isArray(data237)){if(data237.skill === undefined){const err454 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/required",keyword:"required",params:{missingProperty: "skill"},message:"must have required property '"+"skill"+"'"};if(vErrors === null){vErrors = [err454];}else {vErrors.push(err454);}errors++;}for(const key71 in data237){if(!(key71 === "skill")){const err455 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key71},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err455];}else {vErrors.push(err455);}errors++;}}if(data237.skill !== undefined){let data239 = data237.skill;const _errs616 = errors;const _errs617 = errors;if(typeof data239 === "string"){if(!pattern0.test(data239)){const err456 = {};if(vErrors === null){vErrors = [err456];}else {vErrors.push(err456);}errors++;}}var valid170 = _errs617 === errors;if(valid170){const err457 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err457];}else {vErrors.push(err457);}errors++;}else {errors = _errs616;if(vErrors !== null){if(_errs616){vErrors.length = _errs616;}else {vErrors = null;}}}if(typeof data239 === "string"){if(func2(data239) < 1){const err458 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err458];}else {vErrors.push(err458);}errors++;}if(!pattern25.test(data239)){const err459 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/pattern",keyword:"pattern",params:{pattern: "^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"},message:"must match pattern \""+"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"+"\""};if(vErrors === null){vErrors = [err459];}else {vErrors.push(err459);}errors++;}}else {const err460 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err460];}else {vErrors.push(err460);}errors++;}}}else {const err461 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err461];}else {vErrors.push(err461);}errors++;}var _valid4 = _errs611 === errors;if(_valid4 && valid166){valid166 = false;passing3 = [passing3, 1];}else {if(_valid4){valid166 = true;passing3 = 1;}}if(!valid166){const err462 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err462];}else {vErrors.push(err462);}errors++;}else {errors = _errs603;if(vErrors !== null){if(_errs603){vErrors.length = _errs603;}else {vErrors = null;}}}}if(data235.allowWrites !== undefined){if(typeof data235.allowWrites !== "boolean"){const err463 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/allowWrites",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/allowWrites/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err463];}else {vErrors.push(err463);}errors++;}}}else {const err464 = {instancePath:instancePath+"/qa/environments/" + key68.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err464];}else {vErrors.push(err464);}errors++;}}}else {const err465 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err465];}else {vErrors.push(err465);}errors++;}}if(data231.personas !== undefined){let data241 = data231.personas;const _errs621 = errors;let valid171 = false;let passing4 = null;const _errs622 = errors;if(Array.isArray(data241)){if(data241.length < 1){const err466 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/0/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err466];}else {vErrors.push(err466);}errors++;}const len34 = data241.length;for(let i36=0; i36<len34; i36++){let data242 = data241[i36];const _errs626 = errors;const _errs627 = errors;if(typeof data242 === "string"){if(!pattern0.test(data242)){const err467 = {};if(vErrors === null){vErrors = [err467];}else {vErrors.push(err467);}errors++;}}var valid174 = _errs627 === errors;if(valid174){const err468 = {instancePath:instancePath+"/qa/personas/" + i36,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err468];}else {vErrors.push(err468);}errors++;}else {errors = _errs626;if(vErrors !== null){if(_errs626){vErrors.length = _errs626;}else {vErrors = null;}}}if(typeof data242 === "string"){if(func2(data242) < 1){const err469 = {instancePath:instancePath+"/qa/personas/" + i36,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err469];}else {vErrors.push(err469);}errors++;}}else {const err470 = {instancePath:instancePath+"/qa/personas/" + i36,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err470];}else {vErrors.push(err470);}errors++;}}}else {const err471 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err471];}else {vErrors.push(err471);}errors++;}var _valid5 = _errs622 === errors;if(_valid5){valid171 = true;passing4 = 0;}const _errs628 = errors;if(data241 && typeof data241 == "object" && !Array.isArray(data241)){if(Object.keys(data241).length < 1){const err472 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/1/minProperties",keyword:"minProperties",params:{limit: 1},message:"must NOT have fewer than 1 properties"};if(vErrors === null){vErrors = [err472];}else {vErrors.push(err472);}errors++;}for(const key72 in data241){let data243 = data241[key72];const _errs632 = errors;let valid176 = false;let passing5 = null;const _errs633 = errors;if(data243 && typeof data243 == "object" && !Array.isArray(data243)){if(data243.credentialRef === undefined){const err473 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/required",keyword:"required",params:{missingProperty: "credentialRef"},message:"must have required property '"+"credentialRef"+"'"};if(vErrors === null){vErrors = [err473];}else {vErrors.push(err473);}errors++;}for(const key73 in data243){if(!(key73 === "credentialRef")){const err474 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key73},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err474];}else {vErrors.push(err474);}errors++;}}if(data243.credentialRef !== undefined){let data244 = data243.credentialRef;const _errs638 = errors;const _errs639 = errors;if(typeof data244 === "string"){if(!pattern0.test(data244)){const err475 = {};if(vErrors === null){vErrors = [err475];}else {vErrors.push(err475);}errors++;}}var valid178 = _errs639 === errors;if(valid178){const err476 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/credentialRef",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/properties/credentialRef/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err476];}else {vErrors.push(err476);}errors++;}else {errors = _errs638;if(vErrors !== null){if(_errs638){vErrors.length = _errs638;}else {vErrors = null;}}}if(typeof data244 === "string"){if(func2(data244) < 1){const err477 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/credentialRef",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/properties/credentialRef/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err477];}else {vErrors.push(err477);}errors++;}}else {const err478 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/credentialRef",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/properties/credentialRef/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err478];}else {vErrors.push(err478);}errors++;}}}else {const err479 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err479];}else {vErrors.push(err479);}errors++;}var _valid6 = _errs633 === errors;if(_valid6){valid176 = true;passing5 = 0;}const _errs640 = errors;if(data243 && typeof data243 == "object" && !Array.isArray(data243)){if(data243.signInSkill === undefined){const err480 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/required",keyword:"required",params:{missingProperty: "signInSkill"},message:"must have required property '"+"signInSkill"+"'"};if(vErrors === null){vErrors = [err480];}else {vErrors.push(err480);}errors++;}for(const key74 in data243){if(!(key74 === "signInSkill")){const err481 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err481];}else {vErrors.push(err481);}errors++;}}if(data243.signInSkill !== undefined){let data245 = data243.signInSkill;const _errs645 = errors;const _errs646 = errors;if(typeof data245 === "string"){if(!pattern0.test(data245)){const err482 = {};if(vErrors === null){vErrors = [err482];}else {vErrors.push(err482);}errors++;}}var valid180 = _errs646 === errors;if(valid180){const err483 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSkill",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/properties/signInSkill/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err483];}else {vErrors.push(err483);}errors++;}else {errors = _errs645;if(vErrors !== null){if(_errs645){vErrors.length = _errs645;}else {vErrors = null;}}}if(typeof data245 === "string"){if(func2(data245) < 1){const err484 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSkill",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/properties/signInSkill/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err484];}else {vErrors.push(err484);}errors++;}}else {const err485 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSkill",schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/properties/signInSkill/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err485];}else {vErrors.push(err485);}errors++;}}}else {const err486 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err486];}else {vErrors.push(err486);}errors++;}var _valid6 = _errs640 === errors;if(_valid6 && valid176){valid176 = false;passing5 = [passing5, 1];}else {if(_valid6){valid176 = true;passing5 = 1;}}if(!valid176){const err487 = {instancePath:instancePath+"/qa/personas/" + key72.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err487];}else {vErrors.push(err487);}errors++;}else {errors = _errs632;if(vErrors !== null){if(_errs632){vErrors.length = _errs632;}else {vErrors = null;}}}}}else {const err488 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err488];}else {vErrors.push(err488);}errors++;}var _valid5 = _errs628 === errors;if(_valid5 && valid171){valid171 = false;passing4 = [passing4, 1];}else {if(_valid5){valid171 = true;passing4 = 1;}}if(!valid171){const err489 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err489];}else {vErrors.push(err489);}errors++;}else {errors = _errs621;if(vErrors !== null){if(_errs621){vErrors.length = _errs621;}else {vErrors = null;}}}}if(data231.gherkinLint !== undefined){let data246 = data231.gherkinLint;if(data246 && typeof data246 == "object" && !Array.isArray(data246)){if(data246.scopes === undefined){const err490 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/required",keyword:"required",params:{missingProperty: "scopes"},message:"must have required property '"+"scopes"+"'"};if(vErrors === null){vErrors = [err490];}else {vErrors.push(err490);}errors++;}for(const key75 in data246){if(!(((key75 === "scopes") || (key75 === "exemptionTags")) || (key75 === "stepWaivers"))){const err491 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err491];}else {vErrors.push(err491);}errors++;}}if(data246.scopes !== undefined){let data247 = data246.scopes;if(data247 && typeof data247 == "object" && !Array.isArray(data247)){if(Object.keys(data247).length < 1){const err492 = {instancePath:instancePath+"/qa/gherkinLint/scopes",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/minProperties",keyword:"minProperties",params:{limit: 1},message:"must NOT have fewer than 1 properties"};if(vErrors === null){vErrors = [err492];}else {vErrors.push(err492);}errors++;}for(const key76 in data247){let data248 = data247[key76];if(data248 && typeof data248 == "object" && !Array.isArray(data248)){if(data248.featureRoots === undefined){const err493 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/required",keyword:"required",params:{missingProperty: "featureRoots"},message:"must have required property '"+"featureRoots"+"'"};if(vErrors === null){vErrors = [err493];}else {vErrors.push(err493);}errors++;}if(data248.stepRoots === undefined){const err494 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/required",keyword:"required",params:{missingProperty: "stepRoots"},message:"must have required property '"+"stepRoots"+"'"};if(vErrors === null){vErrors = [err494];}else {vErrors.push(err494);}errors++;}for(const key77 in data248){if(!((key77 === "featureRoots") || (key77 === "stepRoots"))){const err495 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err495];}else {vErrors.push(err495);}errors++;}}if(data248.featureRoots !== undefined){let data249 = data248.featureRoots;if(Array.isArray(data249)){if(data249.length < 1){const err496 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err496];}else {vErrors.push(err496);}errors++;}const len35 = data249.length;for(let i37=0; i37<len35; i37++){let data250 = data249[i37];const _errs660 = errors;const _errs661 = errors;if(typeof data250 === "string"){if(!pattern0.test(data250)){const err497 = {};if(vErrors === null){vErrors = [err497];}else {vErrors.push(err497);}errors++;}}var valid186 = _errs661 === errors;if(valid186){const err498 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i37,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err498];}else {vErrors.push(err498);}errors++;}else {errors = _errs660;if(vErrors !== null){if(_errs660){vErrors.length = _errs660;}else {vErrors = null;}}}if(typeof data250 === "string"){if(func2(data250) < 1){const err499 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i37,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err499];}else {vErrors.push(err499);}errors++;}}else {const err500 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i37,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err500];}else {vErrors.push(err500);}errors++;}}}else {const err501 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err501];}else {vErrors.push(err501);}errors++;}}if(data248.stepRoots !== undefined){let data251 = data248.stepRoots;if(Array.isArray(data251)){if(data251.length < 1){const err502 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err502];}else {vErrors.push(err502);}errors++;}const len36 = data251.length;for(let i38=0; i38<len36; i38++){let data252 = data251[i38];const _errs666 = errors;const _errs667 = errors;if(typeof data252 === "string"){if(!pattern0.test(data252)){const err503 = {};if(vErrors === null){vErrors = [err503];}else {vErrors.push(err503);}errors++;}}var valid189 = _errs667 === errors;if(valid189){const err504 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i38,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err504];}else {vErrors.push(err504);}errors++;}else {errors = _errs666;if(vErrors !== null){if(_errs666){vErrors.length = _errs666;}else {vErrors = null;}}}if(typeof data252 === "string"){if(func2(data252) < 1){const err505 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i38,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err505];}else {vErrors.push(err505);}errors++;}}else {const err506 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i38,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err506];}else {vErrors.push(err506);}errors++;}}}else {const err507 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err507];}else {vErrors.push(err507);}errors++;}}}else {const err508 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key76.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err508];}else {vErrors.push(err508);}errors++;}}}else {const err509 = {instancePath:instancePath+"/qa/gherkinLint/scopes",schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err509];}else {vErrors.push(err509);}errors++;}}if(data246.exemptionTags !== undefined){let data253 = data246.exemptionTags;if(Array.isArray(data253)){const len37 = data253.length;for(let i39=0; i39<len37; i39++){let data254 = data253[i39];const _errs672 = errors;const _errs673 = errors;if(typeof data254 === "string"){if(!pattern0.test(data254)){const err510 = {};if(vErrors === null){vErrors = [err510];}else {vErrors.push(err510);}errors++;}}var valid192 = _errs673 === errors;if(valid192){const err511 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i39,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err511];}else {vErrors.push(err511);}errors++;}else {errors = _errs672;if(vErrors !== null){if(_errs672){vErrors.length = _errs672;}else {vErrors = null;}}}if(typeof data254 === "string"){if(func2(data254) < 1){const err512 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i39,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err512];}else {vErrors.push(err512);}errors++;}}else {const err513 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i39,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err513];}else {vErrors.push(err513);}errors++;}}}else {const err514 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags",schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err514];}else {vErrors.push(err514);}errors++;}}if(data246.stepWaivers !== undefined){let data255 = data246.stepWaivers;if(Array.isArray(data255)){const len38 = data255.length;for(let i40=0; i40<len38; i40++){let data256 = data255[i40];if(typeof data256 === "string"){if(func2(data256) < 1){const err515 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i40,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err515];}else {vErrors.push(err515);}errors++;}}else {const err516 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i40,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err516];}else {vErrors.push(err516);}errors++;}}}else {const err517 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers",schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err517];}else {vErrors.push(err517);}errors++;}}}else {const err518 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err518];}else {vErrors.push(err518);}errors++;}}if(data231.consoleAllowlist !== undefined){let data257 = data231.consoleAllowlist;if(Array.isArray(data257)){const len39 = data257.length;for(let i41=0; i41<len39; i41++){let data258 = data257[i41];const _errs682 = errors;const _errs683 = errors;if(typeof data258 === "string"){if(!pattern0.test(data258)){const err519 = {};if(vErrors === null){vErrors = [err519];}else {vErrors.push(err519);}errors++;}}var valid197 = _errs683 === errors;if(valid197){const err520 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i41,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err520];}else {vErrors.push(err520);}errors++;}else {errors = _errs682;if(vErrors !== null){if(_errs682){vErrors.length = _errs682;}else {vErrors = null;}}}if(typeof data258 === "string"){if(func2(data258) < 1){const err521 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i41,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err521];}else {vErrors.push(err521);}errors++;}}else {const err522 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i41,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err522];}else {vErrors.push(err522);}errors++;}}}else {const err523 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err523];}else {vErrors.push(err523);}errors++;}}if(data231.designTokens !== undefined){let data259 = data231.designTokens;const _errs686 = errors;const _errs687 = errors;if(typeof data259 === "string"){if(!pattern0.test(data259)){const err524 = {};if(vErrors === null){vErrors = [err524];}else {vErrors.push(err524);}errors++;}}var valid198 = _errs687 === errors;if(valid198){const err525 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err525];}else {vErrors.push(err525);}errors++;}else {errors = _errs686;if(vErrors !== null){if(_errs686){vErrors.length = _errs686;}else {vErrors = null;}}}if(typeof data259 === "string"){if(func2(data259) < 1){const err526 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err526];}else {vErrors.push(err526);}errors++;}}else {const err527 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err527];}else {vErrors.push(err527);}errors++;}}}else {const err528 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err528];}else {vErrors.push(err528);}errors++;}}}else {const err529 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err529];}else {vErrors.push(err529);}errors++;}validate10.errors = vErrors;return errors === 0;}
|