mandrel 2.41.0 → 2.42.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/story-worker.md +24 -14
- package/.agents/docs/agentrc-reference.json +7 -2
- package/.agents/docs/configuration.md +5 -2
- package/.agents/schemas/agentrc.schema.json +17 -2
- package/.agents/schemas/validation-evidence.schema.json +3 -1
- package/.agents/scripts/acceptance-eval.js +68 -3
- package/.agents/scripts/coverage-capture.js +25 -8
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -2
- package/.agents/scripts/lib/baselines/git-base.js +74 -38
- package/.agents/scripts/lib/close-validation/gates.js +153 -25
- package/.agents/scripts/lib/close-validation/process.js +30 -1
- package/.agents/scripts/lib/close-validation/runner.js +5 -0
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +33 -12
- package/.agents/scripts/lib/config/quality.js +36 -21
- package/.agents/scripts/lib/config-settings-schema-delivery.js +6 -0
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -6
- package/.agents/scripts/lib/crap-baseline-join.js +11 -7
- package/.agents/scripts/lib/full-suite-lock.js +311 -0
- package/.agents/scripts/lib/generated/agentrc-validator.js +1 -1
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -104
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +320 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +8 -1
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +83 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +39 -7
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +70 -18
- package/.agents/scripts/lib/orchestration/verify-credit.js +207 -0
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +24 -0
- package/.agents/workflows/helpers/acceptance-self-eval.md +12 -0
- package/.agents/workflows/helpers/deliver-digest.md +31 -10
- package/.agents/workflows/helpers/deliver-story-reference.md +50 -30
- package/.agents/workflows/helpers/deliver-story.md +23 -21
- package/docs/CHANGELOG.md +18 -0
- 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},"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]"},"defaultTimeoutMs":{"type":"integer","minimum":1000,"description":"Default `timeoutMs` applied to every `gh` subprocess the provider facade spawns, so a stalled socket or long-poll cannot hang an orchestration indefinitely. A `GhExecTimeoutError` from a hit ceiling is classified `transient` and retried by `withTransientRetry`. Story #2860.","default":60000},"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`: risk escalation heuristics, ceremony-lite routing, and the cross-Story conflict-finding severity gates.","properties":{"riskHeuristics":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Prose heuristics the planner escalates a Story against. A plain array replaces the framework list; the `{ append, prepend }` extender form deep-merges with it.","default":["Destructive or irreversible data mutations (dropping tables, deleting rows without soft-delete or backup, truncating production state).","Modifications to shared security or auth infrastructure (IAM policies, auth middleware, session or token handling, secret rotation).","Changes to CI/CD, deployment pipelines, or release gating that could disable safety checks or ship unverified code to production.","Monorepo-wide AST or text replacements touching overlapping files in parallel (catastrophic merge-conflict risk across concurrent agents).","Schema migrations that rewrite existing rows or drop columns without a backfill or rollback plan."]},"complexityGate":{"type":"object","description":"Shape-derived ceremony-lite complexity routing. A lite claim is validated against the authored Story shape at persist and re-derived from the Story body at dispatch; conservative (full on any doubt). Never relaxes the Story-ticket / PR-to-main / repo-gates / security-baseline non-negotiables.","properties":{"enabled":{"type":"boolean","description":"Master switch. When false, lite routing is disabled everywhere: persist refuses lite claims and dispatch always takes the sub-agent path. Default true."},"maxArtifacts":{"type":"integer","minimum":0,"description":"Enumerated-artifact threshold reported by the plan-context complexity signals. An input signal for the planner verdict — carries no routing authority. Default 1."}},"additionalProperties":false},"failOnSharedEditors":{"type":"boolean","description":"When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).","default":false},"requireExplicitCrossStoryDeps":{"type":"boolean","description":"When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only).","default":false},"crossCuttingRegistries":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted.","default":["lib/orchestration/lifecycle/listeners/index.js","**/listeners/index.js","**/handlers/index.js"]},"failOnRegistryConflicts":{"type":"boolean","description":"When true, upgrade cross-cutting registry conflict findings to hard errors (default false).","default":false},"failOnLargeFanOut":{"type":"boolean","description":"When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory).","default":false},"largeFanOutThreshold":{"type":"integer","minimum":0,"description":"Call-site count above which a Story that deletes a module emits a fan-out-warning. Counts base-branch references to the deleted path basename. Soft by default; does not size or reject Stories. Default 10.","default":10},"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: execution timeouts, worktree isolation, runner concurrency, docs freshness, signals, quality gates, merge/CI watch, review ceremony, and the feedback loop.","properties":{"execution":{"type":"object","description":"Wall-clock bounds on the subprocesses delivery spawns.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Per-command timeout (ms) for the long-running spawns delivery drives — the close-validation chain and the gate CLIs.","default":600000}},"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},"staleDays":{"type":"integer","minimum":1,"description":"Age floor (days, default 7) for the families no Story id can be recovered from — roster-level audit reports and abandoned plan-<slug>/ dirs. Story-keyed artifacts do not wait for it: they are purged as soon as their merge is confirmed.","default":7},"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"]}}]},"signals":{"type":"object","description":"Detector thresholds for the surviving performance-signal categories. Each block is shallow-merged by the resolver.","properties":{"rework":{"type":"object","description":"Rework detector — repeated edits to one file in a run.","properties":{"editsPerFile":{"type":"integer","minimum":1,"description":"Edits to a single file within one run that trip the rework signal.","default":5}},"additionalProperties":false},"retry":{"type":"object","description":"Retry detector — the same command failing repeatedly.","properties":{"repeatCount":{"type":"integer","minimum":1,"description":"Repeats of an identical failing command that trip the retry signal.","default":3}},"additionalProperties":false}},"additionalProperties":false},"quality":{"type":"object","description":"Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base; shared scoping lives at this block root.","properties":{"gateScoping":{"type":"object","description":"Shared scope applied to every gate that supports one, unless the gate overrides it.","properties":{"scope":{"type":"string","enum":["diff","full"],"description":"Score only the files changed against `diffRef` (`diff`) or every file in the gate target dirs (`full`).","default":"diff"},"diffRef":{"type":"string","minLength":1,"description":"Git ref the `diff` scope is computed against.","default":"main"}},"additionalProperties":false},"gates":{"type":"object","description":"The eight quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"lint":{"type":"object","description":"Lint-count ratchet. Floors are absolute error/warning counts; the baseline pins the current count so a regression is visible even while the floor is not yet met.","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/lint.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":{"*":{"errorCount":0}}},"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},"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"},"timeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for the `npm run test:coverage` capture spawn. A SIGKILL at the budget boundary maps to exit 124 so close-validation can tell a hang from a test 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%."},"friction":{"type":"object","description":"Friction-signal wiring for a CRAP baseline regression, so a recurring one can reach the actionable threshold.","properties":{"markerKey":{"type":"string","minLength":1,"description":"Signal marker key the regression is recorded under."}},"additionalProperties":false,"default":{"markerKey":"crap-baseline-regression"}},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate CRAP baseline refresh in the compared range. A range commit carrying it that also touches the baseline file demotes head-vs-base regressions; floors stay enforced.","default":"baseline-refresh:"},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run crap:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"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":"Story #4981 — opt-in incremental coverage-capture + CRAP-join scoping. Default (key absent) preserves today’s full-repo behaviour byte-for-byte. When `enabled: true`, the changed-file set against `baseRef` (default: the gate’s own `--ref` / `main`) decides WHETHER to capture — no changed file under `crap.targetDirs` means no capture at all — and the CRAP join treats a method in a file the diff did not touch as resolved by its committed baseline row instead of requiring fresh coverage for it. It does NOT narrow the capture run itself: a capture that does happen is the ordinary full `npm run test:coverage` (Story #5065).","properties":{"enabled":{"type":"boolean","description":"Master switch for the capture skip and the baseline-resolved CRAP join."},"baseRef":{"type":"string","minLength":1,"description":"Git ref the changed-file set is computed against. Omitted falls back to the gate’s own `--ref` (`main`)."}},"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":[]},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate maintainability baseline refresh in the compared range. Mirrors the CRAP gate's `refreshTag`; a range commit carrying it that touches the baseline file demotes head-vs-base regressions (floors still enforced)."},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run maintainability:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"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}}},"strykerConfigPath":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Repo-relative path to the Stryker config. `null` lets Stryker resolve its own default.","default":null}},"additionalProperties":false},"lighthouse":{"type":"object","description":"Lighthouse category-score ratchet for web targets. Off by default — it needs a running deployment.","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/lighthouse.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":{"*":{"performance":0,"accessibility":0,"bestPractices":0,"seo":0}}},"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}}},"baseUrl":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Origin the routes are resolved against. `null` leaves the gate unusable, which is why it ships disabled.","default":null},"routes":{"type":"array","items":{"type":"object","description":"One route the Lighthouse run scores.","required":["path"],"properties":{"path":{"type":"string","minLength":1,"description":"Route path appended to `baseUrl`."},"formFactor":{"type":"string","enum":["mobile","desktop"],"description":"Emulated form factor for this route."}},"additionalProperties":false},"description":"Routes to score on each run.","default":[]}},"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, a bounded refresh timeout mirroring crap/MI, 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"]},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run duplication:update` spawned by the baseline-attribution refresh path. Mirrors `crap.refreshTimeoutMs` / `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124. Default 60000 (Story #3664).","default":60000},"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},"formatAutofix":{"type":"object","description":"Bounded-timeout knob for the close-time `npx biome format --write` spawn (Story #2165). A SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked` with a friction comment.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Timeout (ms) for the format-write spawn.","default":60000}},"additionalProperties":false},"codingGuardrails":{"type":"object","description":"Authoring-time cyclomatic-complexity advisories surfaced by the quality-preview pre-commit gate.","properties":{"cyclomaticFlag":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method is flagged for a refactor look.","default":8},"cyclomaticMustFix":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method must be decomposed before the diff closes.","default":12},"requireSiblingTest":{"type":"boolean","description":"When true, a new source file with no colocated sibling test is reported by the guardrails pass.","default":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.","properties":{"enabled":{"type":"boolean","description":"Master switch for the auto-refresh path. When false, every baseline refresh is a deliberate operator action.","default":true},"crapJumpCap":{"type":"number","minimum":0,"description":"Largest single-row CRAP jump the auto-refresh will absorb. A larger jump is reported as a regression rather than rewritten.","default":5},"scope":{"type":"string","enum":["diff","full"],"description":"Whether an auto-refresh rescores only the changed files (`diff`) or every file in the target dirs (`full`).","default":"diff"}},"additionalProperties":false},"baselineEpsilon":{"type":"object","description":"Per-kind epsilon for s-stability-epsilon (Story #1964). Sub-epsilon row deltas resolve to prior bytes so env variance does not rewrite the on-disk baseline.","properties":{"maintainability":{"type":"number","minimum":0,"default":0.5},"crap":{"type":"number","minimum":0,"default":0.5},"coverage":{"type":"number","minimum":0,"default":0.1},"mutation":{"type":"number","minimum":0,"default":0.5},"lint":{"type":"number","minimum":0,"default":0},"lighthouse":{"type":"number","minimum":0,"default":1},"bundle-size":{"type":"number","minimum":0,"default":1024},"duplication":{"type":"number","minimum":0,"default":0.5}},"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; defaults in `lib/orchestration/merge-poll.js`). `mode` (Story #4698) selects the close-time merge posture. `intervalSeconds` is the poll cadence between `gh pr view` probes after the arm. `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. `updateAttempts` caps the bounded update of a behind-the-base PR.","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."},"intervalSeconds":{"type":"integer","minimum":1,"description":"Seconds between merge-wait polls. Default 30.","default":30},"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},"updateAttempts":{"type":"integer","minimum":0,"description":"Maximum times the merge wait will bring a behind-the-base PR up to date before giving up on the branch. Default 3. Set 0 to disable the update."}},"additionalProperties":false},"codeReview":{"type":"object","description":"Review-provider chain plus bounded-retry knobs for the /mandrel-deliver code-review ceremony.","properties":{"providers":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","enum":["native","codex","security-review","ultrareview"],"description":"Registered provider key. Inline: native, 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, defaults to [{ name: \"native\" }]. 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":"security-review","scopes":["story"],"optional":true},{"name":"ultrareview","scopes":["story"],"manualPrompt":true,"when":{"label":"risk::high"}}]},"providerConfig":{"type":"object","additionalProperties":true,"description":"Optional escape hatch for adapter-specific configuration. No documented keys in Epic #2815; reserved so future adapters can be configured without another schema migration."},"maxFixAttempts":{"type":"integer","minimum":0,"description":"Maximum auto-fix retry attempts per finding in /mandrel-deliver Phase 5 (code-review). 0 disables auto-fix. Default 3.","default":3},"maxFixScopeFiles":{"type":"integer","minimum":1,"description":"Maximum file count a single auto-fix may modify before escalating to agent::blocked. Default 5.","default":5},"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},"review":{"type":"object","description":"Close-scope review tuning (Story #4699). Governs the Story-scope local-lens pass that runs inside the close subprocess; the maker-blind code-review pass and all hard gates are unaffected.","properties":{"lensDiffFloor":{"type":"integer","minimum":0,"description":"Changed-line floor for the close-scope lens walk (Story #4699). A diff strictly below this many changed lines (additions + deletions) with zero sensitive-path hits skips lens materialization and records the skip in the findings-yield ledger. Default 40; 0 disables the skip. Hard gates and the maker-blind code-review pass are unaffected."}},"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, then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the loop is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":1,"description":"Maximum number of redraft rounds before escalation. Default 2; clamped into [1, hard ceiling] by lib/config/acceptance-eval.js so the cap can never be disabled (maxRounds: 0 clamps up to 1).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-out toggles for the close-time auto-file graduators. All default to auto-filing on.","properties":{"auditResultsAutoFile":{"type":"boolean","description":"When true (default), the close-time audit-results graduator auto-files non-blocking audit-results findings as follow-up issues routed by source classification. Set to false to suppress auto-filing; findings remain accessible in the structured comments on the Story.","default":true},"retroProposals":{"type":"boolean","description":"When true (default), 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. Set to false to fall back to the command stanzas.","default":true},"frictionWindowDays":{"type":"integer","minimum":1,"description":"How many days back the run-scope friction recurrence window reaches (Story #4850). The window spans every surviving per-Story signal stream rather than the triggering run's own Stories, so that a defect firing once per Story can reach the actionable threshold; this bounds it by age so a defect fixed weeks ago stops re-routing. Rows older than the bound — and rows carrying no readable timestamp — are excluded and counted on the roll-up step result. Default 30."}},"additionalProperties":false},"auditToStories":{"type":"object","description":"Knobs for the `/audit-to-stories` unattended (`--auto`) sweep (Story #4626).","properties":{"severityFloor":{"type":"string","enum":["critical","high","medium","low","all"],"description":"Minimum severity a finding must meet to be proposed as a Story on an unattended `/audit-to-stories --auto` sweep (Story #4626). Default high."},"autoComment":{"type":"boolean","description":"When true (default), `/audit-to-stories --auto` posts a re-detected comment on an already-open matched Issue instead of silently skipping it."}},"additionalProperties":false},"ci":{"type":"object","description":"CI-aware delivery namespace (Story #4356, Epic #4355): the merge/CI watch poll loop and the merge posture.","properties":{"watch":{"type":"object","description":"Story #4356 (Epic #4355). Poll-loop tuning for the merge/CI watch. pollIntervalMs is the cadence between check probes; maxPolls caps total probes before the watcher gives up; maxResumes caps how many times the watcher may resume after a transient stall; attachWindowMs bounds the wait for a required context to attach at all.","properties":{"pollIntervalMs":{"type":"integer","minimum":1,"description":"Milliseconds between check probes.","default":10000},"maxPolls":{"type":"integer","minimum":1,"description":"Total probes before the watcher gives up on one invocation.","default":180},"maxResumes":{"type":"integer","minimum":0,"description":"How many times the watcher may resume after a transient stall. 0 disables resuming.","default":3},"attachWindowMs":{"type":"integer","minimum":1,"description":"Story #4890. How long (ms) the watch keeps re-resolving an EMPTY `gh pr checks --required` set before it stops waiting for a required context to attach. A ruleset attaches its contexts asynchronously and the arrival latency is set by the slowest one, so a required context that is an aggregator job gated on every other tier is the last to appear — measured at 16m52s on this repository. Default 1200000 (20 minutes). Raise it for a repository whose contexts arrive later still; exhausting the window is never reported as a red check (the watch exits 2, not-yet-started).","default":1200000}},"additionalProperties":false},"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":[]}},"additionalProperties":false},"routing":{"type":"object","description":"v2 delivery-spawn routing: role-scoped boot contexts and maker-checker sampling. The v1 singleDelivery epic-route kill-switch was removed in Stage 6.","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 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},"freshCriticSampleRate":{"type":"number","minimum":0,"maximum":1,"description":"Epic #4478 (M7-B, Part 2). Maker-checker sampling floor. Under the standard profile, a change set touching no sensitive path routes its acceptance clusters down the contract-identical inline critic path, but this fraction of them is still forced through a fresh-context critic so a low derived level never means zero independent checking. Clamped to [0, 1]; 0 disables the floor, 1 forces every cluster fresh. Consumed by resolveCeremonyForRisk (lib/orchestration/ceremony-routing.js).","default":0.2},"ceremonyProfile":{"type":"string","enum":["minimal","standard","strict"],"description":"Acceptance-ceremony depth. minimal = always inline critic; strict = always fresh-context critic; standard (default) = routed off the change level derived from the Story diff, with the maker-checker sampling floor.","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}},"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 pattern8 = new RegExp("^@.+", "u");const func2 = require("ajv/dist/runtime/ucs2length").default;const func9 = 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 === "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.formatCheck !== undefined){let data12 = data9.formatCheck;const _errs44 = errors;const _errs45 = errors;if(typeof data12 === "string"){if(!pattern0.test(data12)){const err37 = {};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}}var valid12 = _errs45 === errors;if(valid12){const err38 = {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 = [err38];}else {vErrors.push(err38);}errors++;}else {errors = _errs44;if(vErrors !== null){if(_errs44){vErrors.length = _errs44;}else {vErrors = null;}}}if(typeof data12 === "string"){if(func2(data12) < 1){const err39 = {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 = [err39];}else {vErrors.push(err39);}errors++;}}else {const err40 = {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 = [err40];}else {vErrors.push(err40);}errors++;}}if(data9.formatWrite !== undefined){let data13 = data9.formatWrite;const _errs48 = errors;const _errs49 = errors;if(typeof data13 === "string"){if(!pattern0.test(data13)){const err41 = {};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}var valid13 = _errs49 === errors;if(valid13){const err42 = {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 = [err42];}else {vErrors.push(err42);}errors++;}else {errors = _errs48;if(vErrors !== null){if(_errs48){vErrors.length = _errs48;}else {vErrors = null;}}}if(typeof data13 === "string"){if(func2(data13) < 1){const err43 = {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 = [err43];}else {vErrors.push(err43);}errors++;}}else {const err44 = {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 = [err44];}else {vErrors.push(err44);}errors++;}}}else {const err45 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}}else {const err46 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}if(data.github !== undefined){let data14 = data.github;if(data14 && typeof data14 == "object" && !Array.isArray(data14)){if(data14.owner === undefined){const err47 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "owner"},message:"must have required property '"+"owner"+"'"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}if(data14.repo === undefined){const err48 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "repo"},message:"must have required property '"+"repo"+"'"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}if(data14.operatorHandle === undefined){const err49 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "operatorHandle"},message:"must have required property '"+"operatorHandle"+"'"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}for(const key4 in data14){if(!(func9.call(schema11.properties.github.properties, key4))){const err50 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key4},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}if(data14.owner !== undefined){let data15 = data14.owner;if(typeof data15 === "string"){if(func2(data15) < 1){const err51 = {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 = [err51];}else {vErrors.push(err51);}errors++;}}else {const err52 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}}if(data14.repo !== undefined){let data16 = data14.repo;if(typeof data16 === "string"){if(func2(data16) < 1){const err53 = {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 = [err53];}else {vErrors.push(err53);}errors++;}}else {const err54 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}}if(data14.projectNumber !== undefined){let data17 = data14.projectNumber;if((!(((typeof data17 == "number") && (!(data17 % 1) && !isNaN(data17))) && (isFinite(data17)))) && (data17 !== null)){const err55 = {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 = [err55];}else {vErrors.push(err55);}errors++;}if((typeof data17 == "number") && (isFinite(data17))){if(data17 < 1 || isNaN(data17)){const err56 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}}}if(data14.projectOwner !== undefined){let data18 = data14.projectOwner;if((typeof data18 !== "string") && (data18 !== null)){const err57 = {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 = [err57];}else {vErrors.push(err57);}errors++;}if(typeof data18 === "string"){if(func2(data18) < 1){const err58 = {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 = [err58];}else {vErrors.push(err58);}errors++;}}}if(data14.operatorHandle !== undefined){let data19 = data14.operatorHandle;if(typeof data19 === "string"){if(!pattern8.test(data19)){const err59 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/pattern",keyword:"pattern",params:{pattern: "^@.+"},message:"must match pattern \""+"^@.+"+"\""};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}else {const err60 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}}if(data14.defaultTimeoutMs !== undefined){let data20 = data14.defaultTimeoutMs;if(!(((typeof data20 == "number") && (!(data20 % 1) && !isNaN(data20))) && (isFinite(data20)))){const err61 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}if((typeof data20 == "number") && (isFinite(data20))){if(data20 < 1000 || isNaN(data20)){const err62 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1000},message:"must be >= 1000"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}}}if(data14.branchProtection !== undefined){let data21 = data14.branchProtection;if(data21 && typeof data21 == "object" && !Array.isArray(data21)){for(const key5 in data21){if(!((key5 === "enforce") || (key5 === "requiredChecks"))){const err63 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}if(data21.enforce !== undefined){if(typeof data21.enforce !== "boolean"){const err64 = {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 = [err64];}else {vErrors.push(err64);}errors++;}}if(data21.requiredChecks !== undefined){let data23 = data21.requiredChecks;if(Array.isArray(data23)){const len1 = data23.length;for(let i1=0; i1<len1; i1++){let data24 = data23[i1];if(data24 && typeof data24 == "object" && !Array.isArray(data24)){if(data24.name === undefined){const err65 = {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 = [err65];}else {vErrors.push(err65);}errors++;}if(data24.cmd === undefined){const err66 = {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 = [err66];}else {vErrors.push(err66);}errors++;}for(const key6 in data24){if(!((key6 === "name") || (key6 === "cmd"))){const err67 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}if(data24.name !== undefined){let data25 = data24.name;if(typeof data25 === "string"){if(func2(data25) < 1){const err68 = {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 = [err68];}else {vErrors.push(err68);}errors++;}}else {const err69 = {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 = [err69];}else {vErrors.push(err69);}errors++;}}if(data24.cmd !== undefined){let data26 = data24.cmd;if(Array.isArray(data26)){if(data26.length < 1){const err70 = {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 = [err70];}else {vErrors.push(err70);}errors++;}const len2 = data26.length;for(let i2=0; i2<len2; i2++){let data27 = data26[i2];if(typeof data27 === "string"){if(func2(data27) < 1){const err71 = {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 = [err71];}else {vErrors.push(err71);}errors++;}}else {const err72 = {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 = [err72];}else {vErrors.push(err72);}errors++;}}}else {const err73 = {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 = [err73];}else {vErrors.push(err73);}errors++;}}}else {const err74 = {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 = [err74];}else {vErrors.push(err74);}errors++;}}}else {const err75 = {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 = [err75];}else {vErrors.push(err75);}errors++;}}}else {const err76 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err76];}else {vErrors.push(err76);}errors++;}}if(data14.mergeMethods !== undefined){let data28 = data14.mergeMethods;if(data28 && typeof data28 == "object" && !Array.isArray(data28)){for(const key7 in data28){if(!(((((key7 === "allow_squash_merge") || (key7 === "allow_rebase_merge")) || (key7 === "allow_merge_commit")) || (key7 === "allow_auto_merge")) || (key7 === "delete_branch_on_merge"))){const err77 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err77];}else {vErrors.push(err77);}errors++;}}if(data28.allow_squash_merge !== undefined){if(typeof data28.allow_squash_merge !== "boolean"){const err78 = {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 = [err78];}else {vErrors.push(err78);}errors++;}}if(data28.allow_rebase_merge !== undefined){if(typeof data28.allow_rebase_merge !== "boolean"){const err79 = {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 = [err79];}else {vErrors.push(err79);}errors++;}}if(data28.allow_merge_commit !== undefined){if(typeof data28.allow_merge_commit !== "boolean"){const err80 = {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 = [err80];}else {vErrors.push(err80);}errors++;}}if(data28.allow_auto_merge !== undefined){if(typeof data28.allow_auto_merge !== "boolean"){const err81 = {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 = [err81];}else {vErrors.push(err81);}errors++;}}if(data28.delete_branch_on_merge !== undefined){if(typeof data28.delete_branch_on_merge !== "boolean"){const err82 = {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 = [err82];}else {vErrors.push(err82);}errors++;}}}else {const err83 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err83];}else {vErrors.push(err83);}errors++;}}if(data14.notifications !== undefined){let data34 = data14.notifications;if(data34 && typeof data34 == "object" && !Array.isArray(data34)){for(const key8 in data34){if(!(((key8 === "mentionOperator") || (key8 === "commentEvents")) || (key8 === "webhookEvents"))){const err84 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err84];}else {vErrors.push(err84);}errors++;}}if(data34.mentionOperator !== undefined){if(typeof data34.mentionOperator !== "boolean"){const err85 = {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 = [err85];}else {vErrors.push(err85);}errors++;}}if(data34.commentEvents !== undefined){let data36 = data34.commentEvents;if(Array.isArray(data36)){const len3 = data36.length;for(let i3=0; i3<len3; i3++){let data37 = data36[i3];if(typeof data37 !== "string"){const err86 = {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 = [err86];}else {vErrors.push(err86);}errors++;}if(!((((data37 === "state-transition") || (data37 === "story-merged")) || (data37 === "story-closing")) || (data37 === "operator-message"))){const err87 = {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 = [err87];}else {vErrors.push(err87);}errors++;}}let i4 = data36.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data36[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err88 = {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 = [err88];}else {vErrors.push(err88);}errors++;break;}indices0[item0] = i4;}}}else {const err89 = {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 = [err89];}else {vErrors.push(err89);}errors++;}}if(data34.webhookEvents !== undefined){let data38 = data34.webhookEvents;if(Array.isArray(data38)){const len4 = data38.length;for(let i5=0; i5<len4; i5++){let data39 = data38[i5];if(typeof data39 !== "string"){const err90 = {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 = [err90];}else {vErrors.push(err90);}errors++;}if(!((((((data39 === "state-transition") || (data39 === "story-merged")) || (data39 === "story-closing")) || (data39 === "operator-message")) || (data39 === "merge.unlanded")) || (data39 === "merge.flip-failed"))){const err91 = {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 = [err91];}else {vErrors.push(err91);}errors++;}}let i6 = data38.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data38[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err92 = {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 = [err92];}else {vErrors.push(err92);}errors++;break;}indices1[item1] = i6;}}}else {const err93 = {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 = [err93];}else {vErrors.push(err93);}errors++;}}}else {const err94 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}}}else {const err95 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}}if(data.planning !== undefined){let data40 = data.planning;if(data40 && typeof data40 == "object" && !Array.isArray(data40)){for(const key9 in data40){if(!(func9.call(schema11.properties.planning.properties, key9))){const err96 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err96];}else {vErrors.push(err96);}errors++;}}if(data40.riskHeuristics !== undefined){let data41 = data40.riskHeuristics;const _errs111 = errors;let valid30 = false;let passing0 = null;const _errs112 = errors;if(Array.isArray(data41)){const len5 = data41.length;for(let i7=0; i7<len5; i7++){if(typeof data41[i7] !== "string"){const err97 = {instancePath:instancePath+"/planning/riskHeuristics/" + i7,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err97];}else {vErrors.push(err97);}errors++;}}}else {const err98 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err98];}else {vErrors.push(err98);}errors++;}var _valid0 = _errs112 === errors;if(_valid0){valid30 = true;passing0 = 0;}const _errs116 = errors;if(data41 && typeof data41 == "object" && !Array.isArray(data41)){for(const key10 in data41){if(!((key10 === "append") || (key10 === "prepend"))){const err99 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}}if(data41.append !== undefined){let data43 = data41.append;if(Array.isArray(data43)){const len6 = data43.length;for(let i8=0; i8<len6; i8++){if(typeof data43[i8] !== "string"){const err100 = {instancePath:instancePath+"/planning/riskHeuristics/append/" + i8,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}}}else {const err101 = {instancePath:instancePath+"/planning/riskHeuristics/append",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err101];}else {vErrors.push(err101);}errors++;}}if(data41.prepend !== undefined){let data45 = data41.prepend;if(Array.isArray(data45)){const len7 = data45.length;for(let i9=0; i9<len7; i9++){if(typeof data45[i9] !== "string"){const err102 = {instancePath:instancePath+"/planning/riskHeuristics/prepend/" + i9,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err102];}else {vErrors.push(err102);}errors++;}}}else {const err103 = {instancePath:instancePath+"/planning/riskHeuristics/prepend",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err103];}else {vErrors.push(err103);}errors++;}}}else {const err104 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err104];}else {vErrors.push(err104);}errors++;}var _valid0 = _errs116 === errors;if(_valid0 && valid30){valid30 = false;passing0 = [passing0, 1];}else {if(_valid0){valid30 = true;passing0 = 1;}}if(!valid30){const err105 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}else {errors = _errs111;if(vErrors !== null){if(_errs111){vErrors.length = _errs111;}else {vErrors = null;}}}}if(data40.complexityGate !== undefined){let data47 = data40.complexityGate;if(data47 && typeof data47 == "object" && !Array.isArray(data47)){for(const key11 in data47){if(!((key11 === "enabled") || (key11 === "maxArtifacts"))){const err106 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data47.enabled !== undefined){if(typeof data47.enabled !== "boolean"){const err107 = {instancePath:instancePath+"/planning/complexityGate/enabled",schemaPath:"#/properties/planning/properties/complexityGate/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}if(data47.maxArtifacts !== undefined){let data49 = data47.maxArtifacts;if(!(((typeof data49 == "number") && (!(data49 % 1) && !isNaN(data49))) && (isFinite(data49)))){const err108 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}if((typeof data49 == "number") && (isFinite(data49))){if(data49 < 0 || isNaN(data49)){const err109 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}}}}else {const err110 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}}if(data40.failOnSharedEditors !== undefined){if(typeof data40.failOnSharedEditors !== "boolean"){const err111 = {instancePath:instancePath+"/planning/failOnSharedEditors",schemaPath:"#/properties/planning/properties/failOnSharedEditors/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}if(data40.requireExplicitCrossStoryDeps !== undefined){if(typeof data40.requireExplicitCrossStoryDeps !== "boolean"){const err112 = {instancePath:instancePath+"/planning/requireExplicitCrossStoryDeps",schemaPath:"#/properties/planning/properties/requireExplicitCrossStoryDeps/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data40.crossCuttingRegistries !== undefined){let data52 = data40.crossCuttingRegistries;const _errs139 = errors;let valid39 = false;let passing1 = null;const _errs140 = errors;if(Array.isArray(data52)){const len8 = data52.length;for(let i10=0; i10<len8; i10++){if(typeof data52[i10] !== "string"){const err113 = {instancePath:instancePath+"/planning/crossCuttingRegistries/" + i10,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}}}else {const err114 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err114];}else {vErrors.push(err114);}errors++;}var _valid1 = _errs140 === errors;if(_valid1){valid39 = true;passing1 = 0;}const _errs144 = errors;if(data52 && typeof data52 == "object" && !Array.isArray(data52)){for(const key12 in data52){if(!((key12 === "append") || (key12 === "prepend"))){const err115 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}if(data52.append !== undefined){let data54 = data52.append;if(Array.isArray(data54)){const len9 = data54.length;for(let i11=0; i11<len9; i11++){if(typeof data54[i11] !== "string"){const err116 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append/" + i11,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err116];}else {vErrors.push(err116);}errors++;}}}else {const err117 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}}if(data52.prepend !== undefined){let data56 = data52.prepend;if(Array.isArray(data56)){const len10 = data56.length;for(let i12=0; i12<len10; i12++){if(typeof data56[i12] !== "string"){const err118 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend/" + i12,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}}else {const err119 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}}}else {const err120 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}var _valid1 = _errs144 === errors;if(_valid1 && valid39){valid39 = false;passing1 = [passing1, 1];}else {if(_valid1){valid39 = true;passing1 = 1;}}if(!valid39){const err121 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err121];}else {vErrors.push(err121);}errors++;}else {errors = _errs139;if(vErrors !== null){if(_errs139){vErrors.length = _errs139;}else {vErrors = null;}}}}if(data40.failOnRegistryConflicts !== undefined){if(typeof data40.failOnRegistryConflicts !== "boolean"){const err122 = {instancePath:instancePath+"/planning/failOnRegistryConflicts",schemaPath:"#/properties/planning/properties/failOnRegistryConflicts/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err122];}else {vErrors.push(err122);}errors++;}}if(data40.failOnLargeFanOut !== undefined){if(typeof data40.failOnLargeFanOut !== "boolean"){const err123 = {instancePath:instancePath+"/planning/failOnLargeFanOut",schemaPath:"#/properties/planning/properties/failOnLargeFanOut/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err123];}else {vErrors.push(err123);}errors++;}}if(data40.largeFanOutThreshold !== undefined){let data60 = data40.largeFanOutThreshold;if(!(((typeof data60 == "number") && (!(data60 % 1) && !isNaN(data60))) && (isFinite(data60)))){const err124 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}if((typeof data60 == "number") && (isFinite(data60))){if(data60 < 0 || isNaN(data60)){const err125 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}}}if(data40.navigation !== undefined){let data61 = data40.navigation;if(data61 && typeof data61 == "object" && !Array.isArray(data61)){for(const key13 in data61){if(!((key13 === "routeGlobs") || (key13 === "navRegistry"))){const err126 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}if(data61.routeGlobs !== undefined){let data62 = data61.routeGlobs;if(Array.isArray(data62)){const len11 = data62.length;for(let i13=0; i13<len11; i13++){if(typeof data62[i13] !== "string"){const err127 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i13,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}}}else {const err128 = {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 = [err128];}else {vErrors.push(err128);}errors++;}}if(data61.navRegistry !== undefined){let data64 = data61.navRegistry;if(Array.isArray(data64)){const len12 = data64.length;for(let i14=0; i14<len12; i14++){if(typeof data64[i14] !== "string"){const err129 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i14,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}}else {const err130 = {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 = [err130];}else {vErrors.push(err130);}errors++;}}}else {const err131 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/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+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}}if(data.delivery !== undefined){let data66 = data.delivery;if(data66 && typeof data66 == "object" && !Array.isArray(data66)){for(const key14 in data66){if(!(func9.call(schema11.properties.delivery.properties, key14))){const err133 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}}if(data66.execution !== undefined){let data67 = data66.execution;if(data67 && typeof data67 == "object" && !Array.isArray(data67)){for(const key15 in data67){if(!(key15 === "timeoutMs")){const err134 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err134];}else {vErrors.push(err134);}errors++;}}if(data67.timeoutMs !== undefined){let data68 = data67.timeoutMs;if(!(((typeof data68 == "number") && (!(data68 % 1) && !isNaN(data68))) && (isFinite(data68)))){const err135 = {instancePath:instancePath+"/delivery/execution/timeoutMs",schemaPath:"#/properties/delivery/properties/execution/properties/timeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err135];}else {vErrors.push(err135);}errors++;}if((typeof data68 == "number") && (isFinite(data68))){if(data68 < 1 || isNaN(data68)){const err136 = {instancePath:instancePath+"/delivery/execution/timeoutMs",schemaPath:"#/properties/delivery/properties/execution/properties/timeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err136];}else {vErrors.push(err136);}errors++;}}}}else {const err137 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err137];}else {vErrors.push(err137);}errors++;}}if(data66.docsFreshness !== undefined){let data69 = data66.docsFreshness;if(data69 && typeof data69 == "object" && !Array.isArray(data69)){for(const key16 in data69){if(!(key16 === "paths")){const err138 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err138];}else {vErrors.push(err138);}errors++;}}if(data69.paths !== undefined){let data70 = data69.paths;if(Array.isArray(data70)){const len13 = data70.length;for(let i15=0; i15<len13; i15++){let data71 = data70[i15];const _errs187 = errors;const _errs188 = errors;if(typeof data71 === "string"){if(!pattern0.test(data71)){const err139 = {};if(vErrors === null){vErrors = [err139];}else {vErrors.push(err139);}errors++;}}var valid57 = _errs188 === errors;if(valid57){const err140 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err140];}else {vErrors.push(err140);}errors++;}else {errors = _errs187;if(vErrors !== null){if(_errs187){vErrors.length = _errs187;}else {vErrors = null;}}}if(typeof data71 === "string"){if(func2(data71) < 1){const err141 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,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 = [err141];}else {vErrors.push(err141);}errors++;}}else {const err142 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err142];}else {vErrors.push(err142);}errors++;}}}else {const err143 = {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 = [err143];}else {vErrors.push(err143);}errors++;}}}else {const err144 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err144];}else {vErrors.push(err144);}errors++;}}if(data66.tempRetention !== undefined){let data72 = data66.tempRetention;if(data72 && typeof data72 == "object" && !Array.isArray(data72)){for(const key17 in data72){if(!(((key17 === "enabled") || (key17 === "staleDays")) || (key17 === "classes"))){const err145 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err145];}else {vErrors.push(err145);}errors++;}}if(data72.enabled !== undefined){if(typeof data72.enabled !== "boolean"){const err146 = {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 = [err146];}else {vErrors.push(err146);}errors++;}}if(data72.staleDays !== undefined){let data74 = data72.staleDays;if(!(((typeof data74 == "number") && (!(data74 % 1) && !isNaN(data74))) && (isFinite(data74)))){const err147 = {instancePath:instancePath+"/delivery/tempRetention/staleDays",schemaPath:"#/properties/delivery/properties/tempRetention/properties/staleDays/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err147];}else {vErrors.push(err147);}errors++;}if((typeof data74 == "number") && (isFinite(data74))){if(data74 < 1 || isNaN(data74)){const err148 = {instancePath:instancePath+"/delivery/tempRetention/staleDays",schemaPath:"#/properties/delivery/properties/tempRetention/properties/staleDays/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err148];}else {vErrors.push(err148);}errors++;}}}if(data72.classes !== undefined){let data75 = data72.classes;if(data75 && typeof data75 == "object" && !Array.isArray(data75)){for(const key18 in data75){if(!((((key18 === "orchestrationLogs") || (key18 === "validationEvidence")) || (key18 === "auditResults")) || (key18 === "planDirs"))){const err149 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err149];}else {vErrors.push(err149);}errors++;}}if(data75.orchestrationLogs !== undefined){if(typeof data75.orchestrationLogs !== "boolean"){const err150 = {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 = [err150];}else {vErrors.push(err150);}errors++;}}if(data75.validationEvidence !== undefined){if(typeof data75.validationEvidence !== "boolean"){const err151 = {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 = [err151];}else {vErrors.push(err151);}errors++;}}if(data75.auditResults !== undefined){if(typeof data75.auditResults !== "boolean"){const err152 = {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 = [err152];}else {vErrors.push(err152);}errors++;}}if(data75.planDirs !== undefined){if(typeof data75.planDirs !== "boolean"){const err153 = {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 = [err153];}else {vErrors.push(err153);}errors++;}}}else {const err154 = {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 = [err154];}else {vErrors.push(err154);}errors++;}}}else {const err155 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err155];}else {vErrors.push(err155);}errors++;}}if(data66.deliverRunner !== undefined){let data80 = data66.deliverRunner;if(data80 && typeof data80 == "object" && !Array.isArray(data80)){for(const key19 in data80){if(!((key19 === "concurrencyCap") || (key19 === "footprintGuard"))){const err156 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err156];}else {vErrors.push(err156);}errors++;}}if(data80.concurrencyCap !== undefined){let data81 = data80.concurrencyCap;if(!(((typeof data81 == "number") && (!(data81 % 1) && !isNaN(data81))) && (isFinite(data81)))){const err157 = {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 = [err157];}else {vErrors.push(err157);}errors++;}if((typeof data81 == "number") && (isFinite(data81))){if(data81 < 1 || isNaN(data81)){const err158 = {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 = [err158];}else {vErrors.push(err158);}errors++;}}}if(data80.footprintGuard !== undefined){let data82 = data80.footprintGuard;if(typeof data82 !== "string"){const err159 = {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 = [err159];}else {vErrors.push(err159);}errors++;}if(!((data82 === "enforce") || (data82 === "advisory"))){const err160 = {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 = [err160];}else {vErrors.push(err160);}errors++;}}}else {const err161 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err161];}else {vErrors.push(err161);}errors++;}}if(data66.worktreeIsolation !== undefined){let data83 = data66.worktreeIsolation;const _errs217 = errors;let valid62 = true;const _errs218 = errors;if(data83 && typeof data83 == "object" && !Array.isArray(data83)){let missing0;if((data83.enabled === undefined) && (missing0 = "enabled")){const err162 = {};if(vErrors === null){vErrors = [err162];}else {vErrors.push(err162);}errors++;}else {if(data83.enabled !== undefined){if(true !== data83.enabled){const err163 = {};if(vErrors === null){vErrors = [err163];}else {vErrors.push(err163);}errors++;}}}}var _valid2 = _errs218 === errors;errors = _errs217;if(vErrors !== null){if(_errs217){vErrors.length = _errs217;}else {vErrors = null;}}if(_valid2){const _errs220 = errors;if(data83 && typeof data83 == "object" && !Array.isArray(data83)){if(data83.root === undefined){const err164 = {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 = [err164];}else {vErrors.push(err164);}errors++;}}var _valid2 = _errs220 === errors;valid62 = _valid2;}if(!valid62){const err165 = {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 = [err165];}else {vErrors.push(err165);}errors++;}if(data83 && typeof data83 == "object" && !Array.isArray(data83)){for(const key20 in data83){if(!(((((((key20 === "enabled") || (key20 === "root")) || (key20 === "nodeModulesStrategy")) || (key20 === "primeFromPath")) || (key20 === "allowSymlinkOnWindows")) || (key20 === "reapOnSuccess")) || (key20 === "bootstrapFiles"))){const err166 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err166];}else {vErrors.push(err166);}errors++;}}if(data83.enabled !== undefined){if(typeof data83.enabled !== "boolean"){const err167 = {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 = [err167];}else {vErrors.push(err167);}errors++;}}if(data83.root !== undefined){let data86 = data83.root;if(typeof data86 === "string"){if(func2(data86) < 1){const err168 = {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 = [err168];}else {vErrors.push(err168);}errors++;}}else {const err169 = {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 = [err169];}else {vErrors.push(err169);}errors++;}}if(data83.nodeModulesStrategy !== undefined){let data87 = data83.nodeModulesStrategy;if(typeof data87 !== "string"){const err170 = {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 = [err170];}else {vErrors.push(err170);}errors++;}if(!((((data87 === "per-worktree") || (data87 === "clone")) || (data87 === "symlink")) || (data87 === "pnpm-store"))){const err171 = {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 = [err171];}else {vErrors.push(err171);}errors++;}}if(data83.primeFromPath !== undefined){let data88 = data83.primeFromPath;if((typeof data88 !== "string") && (data88 !== null)){const err172 = {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 = [err172];}else {vErrors.push(err172);}errors++;}if(typeof data88 === "string"){if(func2(data88) < 1){const err173 = {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 = [err173];}else {vErrors.push(err173);}errors++;}}}if(data83.allowSymlinkOnWindows !== undefined){if(typeof data83.allowSymlinkOnWindows !== "boolean"){const err174 = {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 = [err174];}else {vErrors.push(err174);}errors++;}}if(data83.reapOnSuccess !== undefined){if(typeof data83.reapOnSuccess !== "boolean"){const err175 = {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 = [err175];}else {vErrors.push(err175);}errors++;}}if(data83.bootstrapFiles !== undefined){let data91 = data83.bootstrapFiles;if(Array.isArray(data91)){const len14 = data91.length;for(let i16=0; i16<len14; i16++){let data92 = data91[i16];if(typeof data92 === "string"){if(func2(data92) < 1){const err176 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,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 = [err176];}else {vErrors.push(err176);}errors++;}}else {const err177 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/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/worktreeIsolation/bootstrapFiles",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/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/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err179];}else {vErrors.push(err179);}errors++;}}if(data66.signals !== undefined){let data93 = data66.signals;if(data93 && typeof data93 == "object" && !Array.isArray(data93)){for(const key21 in data93){if(!((key21 === "rework") || (key21 === "retry"))){const err180 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err180];}else {vErrors.push(err180);}errors++;}}if(data93.rework !== undefined){let data94 = data93.rework;if(data94 && typeof data94 == "object" && !Array.isArray(data94)){for(const key22 in data94){if(!(key22 === "editsPerFile")){const err181 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err181];}else {vErrors.push(err181);}errors++;}}if(data94.editsPerFile !== undefined){let data95 = data94.editsPerFile;if(!(((typeof data95 == "number") && (!(data95 % 1) && !isNaN(data95))) && (isFinite(data95)))){const err182 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err182];}else {vErrors.push(err182);}errors++;}if((typeof data95 == "number") && (isFinite(data95))){if(data95 < 1 || isNaN(data95)){const err183 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err183];}else {vErrors.push(err183);}errors++;}}}}else {const err184 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err184];}else {vErrors.push(err184);}errors++;}}if(data93.retry !== undefined){let data96 = data93.retry;if(data96 && typeof data96 == "object" && !Array.isArray(data96)){for(const key23 in data96){if(!(key23 === "repeatCount")){const err185 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key23},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err185];}else {vErrors.push(err185);}errors++;}}if(data96.repeatCount !== undefined){let data97 = data96.repeatCount;if(!(((typeof data97 == "number") && (!(data97 % 1) && !isNaN(data97))) && (isFinite(data97)))){const err186 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err186];}else {vErrors.push(err186);}errors++;}if((typeof data97 == "number") && (isFinite(data97))){if(data97 < 1 || isNaN(data97)){const err187 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err187];}else {vErrors.push(err187);}errors++;}}}}else {const err188 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err188];}else {vErrors.push(err188);}errors++;}}}else {const err189 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err189];}else {vErrors.push(err189);}errors++;}}if(data66.quality !== undefined){let data98 = data66.quality;if(data98 && typeof data98 == "object" && !Array.isArray(data98)){for(const key24 in data98){if(!((((((((key24 === "gateScoping") || (key24 === "gates")) || (key24 === "formatAutofix")) || (key24 === "codingGuardrails")) || (key24 === "autoRefresh")) || (key24 === "baselineEpsilon")) || (key24 === "requireBaselines")) || (key24 === "navigability"))){const err190 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key24},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err190];}else {vErrors.push(err190);}errors++;}}if(data98.gateScoping !== undefined){let data99 = data98.gateScoping;if(data99 && typeof data99 == "object" && !Array.isArray(data99)){for(const key25 in data99){if(!((key25 === "scope") || (key25 === "diffRef"))){const err191 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key25},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err191];}else {vErrors.push(err191);}errors++;}}if(data99.scope !== undefined){let data100 = data99.scope;if(typeof data100 !== "string"){const err192 = {instancePath:instancePath+"/delivery/quality/gateScoping/scope",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/scope/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err192];}else {vErrors.push(err192);}errors++;}if(!((data100 === "diff") || (data100 === "full"))){const err193 = {instancePath:instancePath+"/delivery/quality/gateScoping/scope",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/scope/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gateScoping.properties.scope.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err193];}else {vErrors.push(err193);}errors++;}}if(data99.diffRef !== undefined){let data101 = data99.diffRef;if(typeof data101 === "string"){if(func2(data101) < 1){const err194 = {instancePath:instancePath+"/delivery/quality/gateScoping/diffRef",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/diffRef/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err194];}else {vErrors.push(err194);}errors++;}}else {const err195 = {instancePath:instancePath+"/delivery/quality/gateScoping/diffRef",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/diffRef/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err195];}else {vErrors.push(err195);}errors++;}}}else {const err196 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err196];}else {vErrors.push(err196);}errors++;}}if(data98.gates !== undefined){let data102 = data98.gates;if(data102 && typeof data102 == "object" && !Array.isArray(data102)){for(const key26 in data102){if(!((((((((key26 === "lint") || (key26 === "coverage")) || (key26 === "crap")) || (key26 === "maintainability")) || (key26 === "mutation")) || (key26 === "lighthouse")) || (key26 === "bundle-size")) || (key26 === "duplication"))){const err197 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key26},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err197];}else {vErrors.push(err197);}errors++;}}if(data102.lint !== undefined){let data103 = data102.lint;if(data103 && typeof data103 == "object" && !Array.isArray(data103)){for(const key27 in data103){if(!(((((key27 === "enabled") || (key27 === "baselinePath")) || (key27 === "tolerance")) || (key27 === "floors")) || (key27 === "components"))){const err198 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key27},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}}if(data103.enabled !== undefined){if(typeof data103.enabled !== "boolean"){const err199 = {instancePath:instancePath+"/delivery/quality/gates/lint/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err199];}else {vErrors.push(err199);}errors++;}}if(data103.baselinePath !== undefined){let data105 = data103.baselinePath;const _errs271 = errors;const _errs272 = errors;if(typeof data105 === "string"){if(!pattern0.test(data105)){const err200 = {};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}}var valid74 = _errs272 === errors;if(valid74){const err201 = {instancePath:instancePath+"/delivery/quality/gates/lint/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err201];}else {vErrors.push(err201);}errors++;}else {errors = _errs271;if(vErrors !== null){if(_errs271){vErrors.length = _errs271;}else {vErrors = null;}}}if(typeof data105 === "string"){if(func2(data105) < 1){const err202 = {instancePath:instancePath+"/delivery/quality/gates/lint/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/baselinePath/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/lint/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err203];}else {vErrors.push(err203);}errors++;}}if(data103.tolerance !== undefined){let data106 = data103.tolerance;if(data106 && typeof data106 == "object" && !Array.isArray(data106)){if(data106.kind === undefined){const err204 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err204];}else {vErrors.push(err204);}errors++;}if(data106.value === undefined){const err205 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err205];}else {vErrors.push(err205);}errors++;}for(const key28 in data106){if(!((key28 === "kind") || (key28 === "value"))){const err206 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key28},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err206];}else {vErrors.push(err206);}errors++;}}if(data106.kind !== undefined){let data107 = data106.kind;if(typeof data107 !== "string"){const err207 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err207];}else {vErrors.push(err207);}errors++;}if(!((data107 === "absolute") || (data107 === "percent"))){const err208 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lint.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err208];}else {vErrors.push(err208);}errors++;}}if(data106.value !== undefined){let data108 = data106.value;if((typeof data108 == "number") && (isFinite(data108))){if(data108 < 0 || isNaN(data108)){const err209 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err209];}else {vErrors.push(err209);}errors++;}}else {const err210 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err210];}else {vErrors.push(err210);}errors++;}}}else {const err211 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err211];}else {vErrors.push(err211);}errors++;}}if(data103.floors !== undefined){let data109 = data103.floors;if(data109 && typeof data109 == "object" && !Array.isArray(data109)){for(const key29 in data109){let data110 = data109[key29];if(data110 && typeof data110 == "object" && !Array.isArray(data110)){for(const key30 in data110){let data111 = data110[key30];if(!((typeof data111 == "number") && (isFinite(data111)))){const err212 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key29.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key30.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err212];}else {vErrors.push(err212);}errors++;}}}else {const err213 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key29.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err213];}else {vErrors.push(err213);}errors++;}}}else {const err214 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err214];}else {vErrors.push(err214);}errors++;}}if(data103.components !== undefined){let data112 = data103.components;if(data112 && typeof data112 == "object" && !Array.isArray(data112)){for(const key31 in data112){let data113 = data112[key31];if(Array.isArray(data113)){const len15 = data113.length;for(let i17=0; i17<len15; i17++){let data114 = data113[i17];if(typeof data114 === "string"){if(func2(data114) < 1){const err215 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key31.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err215];}else {vErrors.push(err215);}errors++;}}else {const err216 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key31.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err216];}else {vErrors.push(err216);}errors++;}}}else {const err217 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key31.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err217];}else {vErrors.push(err217);}errors++;}}}else {const err218 = {instancePath:instancePath+"/delivery/quality/gates/lint/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err218];}else {vErrors.push(err218);}errors++;}}}else {const err219 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err219];}else {vErrors.push(err219);}errors++;}}if(data102.coverage !== undefined){let data115 = data102.coverage;if(data115 && typeof data115 == "object" && !Array.isArray(data115)){for(const key32 in data115){if(!(((((((key32 === "enabled") || (key32 === "baselinePath")) || (key32 === "tolerance")) || (key32 === "floors")) || (key32 === "components")) || (key32 === "coveragePath")) || (key32 === "timeoutMs"))){const err220 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key32},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err220];}else {vErrors.push(err220);}errors++;}}if(data115.enabled !== undefined){if(typeof data115.enabled !== "boolean"){const err221 = {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 = [err221];}else {vErrors.push(err221);}errors++;}}if(data115.baselinePath !== undefined){let data117 = data115.baselinePath;const _errs302 = errors;const _errs303 = errors;if(typeof data117 === "string"){if(!pattern0.test(data117)){const err222 = {};if(vErrors === null){vErrors = [err222];}else {vErrors.push(err222);}errors++;}}var valid82 = _errs303 === errors;if(valid82){const err223 = {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 = [err223];}else {vErrors.push(err223);}errors++;}else {errors = _errs302;if(vErrors !== null){if(_errs302){vErrors.length = _errs302;}else {vErrors = null;}}}if(typeof data117 === "string"){if(func2(data117) < 1){const err224 = {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 = [err224];}else {vErrors.push(err224);}errors++;}}else {const err225 = {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 = [err225];}else {vErrors.push(err225);}errors++;}}if(data115.tolerance !== undefined){let data118 = data115.tolerance;if(data118 && typeof data118 == "object" && !Array.isArray(data118)){if(data118.kind === undefined){const err226 = {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 = [err226];}else {vErrors.push(err226);}errors++;}if(data118.value === undefined){const err227 = {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 = [err227];}else {vErrors.push(err227);}errors++;}for(const key33 in data118){if(!((key33 === "kind") || (key33 === "value"))){const err228 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err228];}else {vErrors.push(err228);}errors++;}}if(data118.kind !== undefined){let data119 = data118.kind;if(typeof data119 !== "string"){const err229 = {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 = [err229];}else {vErrors.push(err229);}errors++;}if(!((data119 === "absolute") || (data119 === "percent"))){const err230 = {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 = [err230];}else {vErrors.push(err230);}errors++;}}if(data118.value !== undefined){let data120 = data118.value;if((typeof data120 == "number") && (isFinite(data120))){if(data120 < 0 || isNaN(data120)){const err231 = {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 = [err231];}else {vErrors.push(err231);}errors++;}}else {const err232 = {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 = [err232];}else {vErrors.push(err232);}errors++;}}}else {const err233 = {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 = [err233];}else {vErrors.push(err233);}errors++;}}if(data115.floors !== undefined){let data121 = data115.floors;if(data121 && typeof data121 == "object" && !Array.isArray(data121)){for(const key34 in data121){let data122 = data121[key34];if(data122 && typeof data122 == "object" && !Array.isArray(data122)){for(const key35 in data122){let data123 = data122[key35];if(!((typeof data123 == "number") && (isFinite(data123)))){const err234 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key34.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key35.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 = [err234];}else {vErrors.push(err234);}errors++;}}}else {const err235 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key34.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 = [err235];}else {vErrors.push(err235);}errors++;}}}else {const err236 = {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 = [err236];}else {vErrors.push(err236);}errors++;}}if(data115.components !== undefined){let data124 = data115.components;if(data124 && typeof data124 == "object" && !Array.isArray(data124)){for(const key36 in data124){let data125 = data124[key36];if(Array.isArray(data125)){const len16 = data125.length;for(let i18=0; i18<len16; i18++){let data126 = data125[i18];if(typeof data126 === "string"){if(func2(data126) < 1){const err237 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key36.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err237];}else {vErrors.push(err237);}errors++;}}else {const err238 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key36.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err238];}else {vErrors.push(err238);}errors++;}}}else {const err239 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key36.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 = [err239];}else {vErrors.push(err239);}errors++;}}}else {const err240 = {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 = [err240];}else {vErrors.push(err240);}errors++;}}if(data115.coveragePath !== undefined){let data127 = data115.coveragePath;const _errs328 = errors;const _errs329 = errors;if(typeof data127 === "string"){if(!pattern0.test(data127)){const err241 = {};if(vErrors === null){vErrors = [err241];}else {vErrors.push(err241);}errors++;}}var valid89 = _errs329 === errors;if(valid89){const err242 = {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 = [err242];}else {vErrors.push(err242);}errors++;}else {errors = _errs328;if(vErrors !== null){if(_errs328){vErrors.length = _errs328;}else {vErrors = null;}}}if(typeof data127 === "string"){if(func2(data127) < 1){const err243 = {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 = [err243];}else {vErrors.push(err243);}errors++;}}else {const err244 = {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 = [err244];}else {vErrors.push(err244);}errors++;}}if(data115.timeoutMs !== undefined){let data128 = data115.timeoutMs;if(!(((typeof data128 == "number") && (!(data128 % 1) && !isNaN(data128))) && (isFinite(data128)))){const err245 = {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 = [err245];}else {vErrors.push(err245);}errors++;}if((typeof data128 == "number") && (isFinite(data128))){if(data128 < 1 || isNaN(data128)){const err246 = {instancePath:instancePath+"/delivery/quality/gates/coverage/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/timeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err246];}else {vErrors.push(err246);}errors++;}}}}else {const err247 = {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 = [err247];}else {vErrors.push(err247);}errors++;}}if(data102.crap !== undefined){let data129 = data102.crap;if(data129 && typeof data129 == "object" && !Array.isArray(data129)){for(const key37 in data129){if(!(func9.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key37))){const err248 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key37},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err248];}else {vErrors.push(err248);}errors++;}}if(data129.enabled !== undefined){if(typeof data129.enabled !== "boolean"){const err249 = {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 = [err249];}else {vErrors.push(err249);}errors++;}}if(data129.baselinePath !== undefined){let data131 = data129.baselinePath;const _errs339 = errors;const _errs340 = errors;if(typeof data131 === "string"){if(!pattern0.test(data131)){const err250 = {};if(vErrors === null){vErrors = [err250];}else {vErrors.push(err250);}errors++;}}var valid91 = _errs340 === errors;if(valid91){const err251 = {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 = [err251];}else {vErrors.push(err251);}errors++;}else {errors = _errs339;if(vErrors !== null){if(_errs339){vErrors.length = _errs339;}else {vErrors = null;}}}if(typeof data131 === "string"){if(func2(data131) < 1){const err252 = {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 = [err252];}else {vErrors.push(err252);}errors++;}}else {const err253 = {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 = [err253];}else {vErrors.push(err253);}errors++;}}if(data129.tolerance !== undefined){let data132 = data129.tolerance;if(data132 && typeof data132 == "object" && !Array.isArray(data132)){if(data132.kind === undefined){const err254 = {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 = [err254];}else {vErrors.push(err254);}errors++;}if(data132.value === undefined){const err255 = {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 = [err255];}else {vErrors.push(err255);}errors++;}for(const key38 in data132){if(!((key38 === "kind") || (key38 === "value"))){const err256 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err256];}else {vErrors.push(err256);}errors++;}}if(data132.kind !== undefined){let data133 = data132.kind;if(typeof data133 !== "string"){const err257 = {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 = [err257];}else {vErrors.push(err257);}errors++;}if(!((data133 === "absolute") || (data133 === "percent"))){const err258 = {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 = [err258];}else {vErrors.push(err258);}errors++;}}if(data132.value !== undefined){let data134 = data132.value;if((typeof data134 == "number") && (isFinite(data134))){if(data134 < 0 || isNaN(data134)){const err259 = {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 = [err259];}else {vErrors.push(err259);}errors++;}}else {const err260 = {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 = [err260];}else {vErrors.push(err260);}errors++;}}}else {const err261 = {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 = [err261];}else {vErrors.push(err261);}errors++;}}if(data129.floors !== undefined){let data135 = data129.floors;if(data135 && typeof data135 == "object" && !Array.isArray(data135)){for(const key39 in data135){let data136 = data135[key39];if(data136 && typeof data136 == "object" && !Array.isArray(data136)){for(const key40 in data136){let data137 = data136[key40];if(!((typeof data137 == "number") && (isFinite(data137)))){const err262 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key39.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key40.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 = [err262];}else {vErrors.push(err262);}errors++;}}}else {const err263 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key39.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 = [err263];}else {vErrors.push(err263);}errors++;}}}else {const err264 = {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 = [err264];}else {vErrors.push(err264);}errors++;}}if(data129.components !== undefined){let data138 = data129.components;if(data138 && typeof data138 == "object" && !Array.isArray(data138)){for(const key41 in data138){let data139 = data138[key41];if(Array.isArray(data139)){const len17 = data139.length;for(let i19=0; i19<len17; i19++){let data140 = data139[i19];if(typeof data140 === "string"){if(func2(data140) < 1){const err265 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key41.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,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 = [err265];}else {vErrors.push(err265);}errors++;}}else {const err266 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key41.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,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 = [err266];}else {vErrors.push(err266);}errors++;}}}else {const err267 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key41.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 = [err267];}else {vErrors.push(err267);}errors++;}}}else {const err268 = {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 = [err268];}else {vErrors.push(err268);}errors++;}}if(data129.targetDirs !== undefined){let data141 = data129.targetDirs;const _errs364 = errors;let valid98 = false;let passing2 = null;const _errs365 = errors;if(Array.isArray(data141)){const len18 = data141.length;for(let i20=0; i20<len18; i20++){if(typeof data141[i20] !== "string"){const err269 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i20,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 = [err269];}else {vErrors.push(err269);}errors++;}}}else {const err270 = {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 = [err270];}else {vErrors.push(err270);}errors++;}var _valid3 = _errs365 === errors;if(_valid3){valid98 = true;passing2 = 0;}const _errs369 = errors;if(data141 && typeof data141 == "object" && !Array.isArray(data141)){for(const key42 in data141){if(!((key42 === "append") || (key42 === "prepend"))){const err271 = {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: key42},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err271];}else {vErrors.push(err271);}errors++;}}if(data141.append !== undefined){let data143 = data141.append;if(Array.isArray(data143)){const len19 = data143.length;for(let i21=0; i21<len19; i21++){if(typeof data143[i21] !== "string"){const err272 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i21,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 = [err272];}else {vErrors.push(err272);}errors++;}}}else {const err273 = {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 = [err273];}else {vErrors.push(err273);}errors++;}}if(data141.prepend !== undefined){let data145 = data141.prepend;if(Array.isArray(data145)){const len20 = data145.length;for(let i22=0; i22<len20; i22++){if(typeof data145[i22] !== "string"){const err274 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i22,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 = [err274];}else {vErrors.push(err274);}errors++;}}}else {const err275 = {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 = [err275];}else {vErrors.push(err275);}errors++;}}}else {const err276 = {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 = [err276];}else {vErrors.push(err276);}errors++;}var _valid3 = _errs369 === errors;if(_valid3 && valid98){valid98 = false;passing2 = [passing2, 1];}else {if(_valid3){valid98 = true;passing2 = 1;}}if(!valid98){const err277 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err277];}else {vErrors.push(err277);}errors++;}else {errors = _errs364;if(vErrors !== null){if(_errs364){vErrors.length = _errs364;}else {vErrors = null;}}}}if(data129.newMethodCeiling !== undefined){let data147 = data129.newMethodCeiling;if(!(((typeof data147 == "number") && (!(data147 % 1) && !isNaN(data147))) && (isFinite(data147)))){const err278 = {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 = [err278];}else {vErrors.push(err278);}errors++;}if((typeof data147 == "number") && (isFinite(data147))){if(data147 < 1 || isNaN(data147)){const err279 = {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 = [err279];}else {vErrors.push(err279);}errors++;}}}if(data129.requireCoverage !== undefined){if(typeof data129.requireCoverage !== "boolean"){const err280 = {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 = [err280];}else {vErrors.push(err280);}errors++;}}if(data129.minMethodResolutionRate !== undefined){let data149 = data129.minMethodResolutionRate;if((typeof data149 == "number") && (isFinite(data149))){if(data149 > 1 || isNaN(data149)){const err281 = {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 = [err281];}else {vErrors.push(err281);}errors++;}if(data149 < 0 || isNaN(data149)){const err282 = {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 = [err282];}else {vErrors.push(err282);}errors++;}}else {const err283 = {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 = [err283];}else {vErrors.push(err283);}errors++;}}if(data129.friction !== undefined){let data150 = data129.friction;if(data150 && typeof data150 == "object" && !Array.isArray(data150)){for(const key43 in data150){if(!(key43 === "markerKey")){const err284 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key43},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err284];}else {vErrors.push(err284);}errors++;}}if(data150.markerKey !== undefined){let data151 = data150.markerKey;if(typeof data151 === "string"){if(func2(data151) < 1){const err285 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction/markerKey",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/properties/markerKey/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err285];}else {vErrors.push(err285);}errors++;}}else {const err286 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction/markerKey",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/properties/markerKey/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err286];}else {vErrors.push(err286);}errors++;}}}else {const err287 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err287];}else {vErrors.push(err287);}errors++;}}if(data129.refreshTag !== undefined){let data152 = data129.refreshTag;const _errs393 = errors;const _errs394 = errors;if(typeof data152 === "string"){if(!pattern0.test(data152)){const err288 = {};if(vErrors === null){vErrors = [err288];}else {vErrors.push(err288);}errors++;}}var valid107 = _errs394 === errors;if(valid107){const err289 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTag/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err289];}else {vErrors.push(err289);}errors++;}else {errors = _errs393;if(vErrors !== null){if(_errs393){vErrors.length = _errs393;}else {vErrors = null;}}}if(typeof data152 === "string"){if(func2(data152) < 1){const err290 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTag/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err290];}else {vErrors.push(err290);}errors++;}}else {const err291 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTag/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err291];}else {vErrors.push(err291);}errors++;}}if(data129.refreshTimeoutMs !== undefined){let data153 = data129.refreshTimeoutMs;if(!(((typeof data153 == "number") && (!(data153 % 1) && !isNaN(data153))) && (isFinite(data153)))){const err292 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err292];}else {vErrors.push(err292);}errors++;}if((typeof data153 == "number") && (isFinite(data153))){if(data153 < 1 || isNaN(data153)){const err293 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err293];}else {vErrors.push(err293);}errors++;}}}if(data129.ignoreGlobs !== undefined){let data154 = data129.ignoreGlobs;if(Array.isArray(data154)){const len21 = data154.length;for(let i23=0; i23<len21; i23++){let data155 = data154[i23];if(typeof data155 === "string"){if(func2(data155) < 1){const err294 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,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 = [err294];}else {vErrors.push(err294);}errors++;}}else {const err295 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,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 = [err295];}else {vErrors.push(err295);}errors++;}}}else {const err296 = {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 = [err296];}else {vErrors.push(err296);}errors++;}}if(data129.incrementalCoverage !== undefined){let data156 = data129.incrementalCoverage;if(data156 && typeof data156 == "object" && !Array.isArray(data156)){for(const key44 in data156){if(!((key44 === "enabled") || (key44 === "baseRef"))){const err297 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key44},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err297];}else {vErrors.push(err297);}errors++;}}if(data156.enabled !== undefined){if(typeof data156.enabled !== "boolean"){const err298 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err298];}else {vErrors.push(err298);}errors++;}}if(data156.baseRef !== undefined){let data158 = data156.baseRef;if(typeof data158 === "string"){if(func2(data158) < 1){const err299 = {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 = [err299];}else {vErrors.push(err299);}errors++;}}else {const err300 = {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 = [err300];}else {vErrors.push(err300);}errors++;}}}else {const err301 = {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 = [err301];}else {vErrors.push(err301);}errors++;}}}else {const err302 = {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 = [err302];}else {vErrors.push(err302);}errors++;}}if(data102.maintainability !== undefined){let data159 = data102.maintainability;if(data159 && typeof data159 == "object" && !Array.isArray(data159)){for(const key45 in data159){if(!(func9.call(schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties, key45))){const err303 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key45},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err303];}else {vErrors.push(err303);}errors++;}}if(data159.enabled !== undefined){if(typeof data159.enabled !== "boolean"){const err304 = {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 = [err304];}else {vErrors.push(err304);}errors++;}}if(data159.baselinePath !== undefined){let data161 = data159.baselinePath;const _errs415 = errors;const _errs416 = errors;if(typeof data161 === "string"){if(!pattern0.test(data161)){const err305 = {};if(vErrors === null){vErrors = [err305];}else {vErrors.push(err305);}errors++;}}var valid112 = _errs416 === errors;if(valid112){const err306 = {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 = [err306];}else {vErrors.push(err306);}errors++;}else {errors = _errs415;if(vErrors !== null){if(_errs415){vErrors.length = _errs415;}else {vErrors = null;}}}if(typeof data161 === "string"){if(func2(data161) < 1){const err307 = {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 = [err307];}else {vErrors.push(err307);}errors++;}}else {const err308 = {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 = [err308];}else {vErrors.push(err308);}errors++;}}if(data159.tolerance !== undefined){let data162 = data159.tolerance;if(data162 && typeof data162 == "object" && !Array.isArray(data162)){if(data162.kind === undefined){const err309 = {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 = [err309];}else {vErrors.push(err309);}errors++;}if(data162.value === undefined){const err310 = {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 = [err310];}else {vErrors.push(err310);}errors++;}for(const key46 in data162){if(!((key46 === "kind") || (key46 === "value"))){const err311 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key46},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err311];}else {vErrors.push(err311);}errors++;}}if(data162.kind !== undefined){let data163 = data162.kind;if(typeof data163 !== "string"){const err312 = {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 = [err312];}else {vErrors.push(err312);}errors++;}if(!((data163 === "absolute") || (data163 === "percent"))){const err313 = {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 = [err313];}else {vErrors.push(err313);}errors++;}}if(data162.value !== undefined){let data164 = data162.value;if((typeof data164 == "number") && (isFinite(data164))){if(data164 < 0 || isNaN(data164)){const err314 = {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 = [err314];}else {vErrors.push(err314);}errors++;}}else {const err315 = {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 = [err315];}else {vErrors.push(err315);}errors++;}}}else {const err316 = {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 = [err316];}else {vErrors.push(err316);}errors++;}}if(data159.floors !== undefined){let data165 = data159.floors;if(data165 && typeof data165 == "object" && !Array.isArray(data165)){for(const key47 in data165){let data166 = data165[key47];if(data166 && typeof data166 == "object" && !Array.isArray(data166)){for(const key48 in data166){let data167 = data166[key48];if(!((typeof data167 == "number") && (isFinite(data167)))){const err317 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key47.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key48.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 = [err317];}else {vErrors.push(err317);}errors++;}}}else {const err318 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key47.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 = [err318];}else {vErrors.push(err318);}errors++;}}}else {const err319 = {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 = [err319];}else {vErrors.push(err319);}errors++;}}if(data159.components !== undefined){let data168 = data159.components;if(data168 && typeof data168 == "object" && !Array.isArray(data168)){for(const key49 in data168){let data169 = data168[key49];if(Array.isArray(data169)){const len22 = data169.length;for(let i24=0; i24<len22; i24++){let data170 = data169[i24];if(typeof data170 === "string"){if(func2(data170) < 1){const err320 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key49.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err320];}else {vErrors.push(err320);}errors++;}}else {const err321 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key49.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err321];}else {vErrors.push(err321);}errors++;}}}else {const err322 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key49.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 = [err322];}else {vErrors.push(err322);}errors++;}}}else {const err323 = {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 = [err323];}else {vErrors.push(err323);}errors++;}}if(data159.targetDirs !== undefined){let data171 = data159.targetDirs;const _errs440 = errors;let valid119 = false;let passing3 = null;const _errs441 = errors;if(Array.isArray(data171)){const len23 = data171.length;for(let i25=0; i25<len23; i25++){if(typeof data171[i25] !== "string"){const err324 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i25,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 = [err324];}else {vErrors.push(err324);}errors++;}}}else {const err325 = {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 = [err325];}else {vErrors.push(err325);}errors++;}var _valid4 = _errs441 === errors;if(_valid4){valid119 = true;passing3 = 0;}const _errs445 = errors;if(data171 && typeof data171 == "object" && !Array.isArray(data171)){for(const key50 in data171){if(!((key50 === "append") || (key50 === "prepend"))){const err326 = {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: key50},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err326];}else {vErrors.push(err326);}errors++;}}if(data171.append !== undefined){let data173 = data171.append;if(Array.isArray(data173)){const len24 = data173.length;for(let i26=0; i26<len24; i26++){if(typeof data173[i26] !== "string"){const err327 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i26,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 = [err327];}else {vErrors.push(err327);}errors++;}}}else {const err328 = {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 = [err328];}else {vErrors.push(err328);}errors++;}}if(data171.prepend !== undefined){let data175 = data171.prepend;if(Array.isArray(data175)){const len25 = data175.length;for(let i27=0; i27<len25; i27++){if(typeof data175[i27] !== "string"){const err329 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i27,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 = [err329];}else {vErrors.push(err329);}errors++;}}}else {const err330 = {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 = [err330];}else {vErrors.push(err330);}errors++;}}}else {const err331 = {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 = [err331];}else {vErrors.push(err331);}errors++;}var _valid4 = _errs445 === errors;if(_valid4 && valid119){valid119 = false;passing3 = [passing3, 1];}else {if(_valid4){valid119 = true;passing3 = 1;}}if(!valid119){const err332 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err332];}else {vErrors.push(err332);}errors++;}else {errors = _errs440;if(vErrors !== null){if(_errs440){vErrors.length = _errs440;}else {vErrors = null;}}}}if(data159.refreshTag !== undefined){let data177 = data159.refreshTag;const _errs458 = errors;const _errs459 = errors;if(typeof data177 === "string"){if(!pattern0.test(data177)){const err333 = {};if(vErrors === null){vErrors = [err333];}else {vErrors.push(err333);}errors++;}}var valid127 = _errs459 === errors;if(valid127){const err334 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTag/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err334];}else {vErrors.push(err334);}errors++;}else {errors = _errs458;if(vErrors !== null){if(_errs458){vErrors.length = _errs458;}else {vErrors = null;}}}if(typeof data177 === "string"){if(func2(data177) < 1){const err335 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTag/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err335];}else {vErrors.push(err335);}errors++;}}else {const err336 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTag/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err336];}else {vErrors.push(err336);}errors++;}}if(data159.refreshTimeoutMs !== undefined){let data178 = data159.refreshTimeoutMs;if(!(((typeof data178 == "number") && (!(data178 % 1) && !isNaN(data178))) && (isFinite(data178)))){const err337 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err337];}else {vErrors.push(err337);}errors++;}if((typeof data178 == "number") && (isFinite(data178))){if(data178 < 1 || isNaN(data178)){const err338 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err338];}else {vErrors.push(err338);}errors++;}}}if(data159.ignoreGlobs !== undefined){let data179 = data159.ignoreGlobs;if(Array.isArray(data179)){const len26 = data179.length;for(let i28=0; i28<len26; i28++){let data180 = data179[i28];if(typeof data180 === "string"){if(func2(data180) < 1){const err339 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,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 = [err339];}else {vErrors.push(err339);}errors++;}}else {const err340 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,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 = [err340];}else {vErrors.push(err340);}errors++;}}}else {const err341 = {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 = [err341];}else {vErrors.push(err341);}errors++;}}}else {const err342 = {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 = [err342];}else {vErrors.push(err342);}errors++;}}if(data102.mutation !== undefined){let data181 = data102.mutation;if(data181 && typeof data181 == "object" && !Array.isArray(data181)){for(const key51 in data181){if(!((((((key51 === "enabled") || (key51 === "baselinePath")) || (key51 === "tolerance")) || (key51 === "floors")) || (key51 === "components")) || (key51 === "strykerConfigPath"))){const err343 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key51},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err343];}else {vErrors.push(err343);}errors++;}}if(data181.enabled !== undefined){if(typeof data181.enabled !== "boolean"){const err344 = {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 = [err344];}else {vErrors.push(err344);}errors++;}}if(data181.baselinePath !== undefined){let data183 = data181.baselinePath;const _errs473 = errors;const _errs474 = errors;if(typeof data183 === "string"){if(!pattern0.test(data183)){const err345 = {};if(vErrors === null){vErrors = [err345];}else {vErrors.push(err345);}errors++;}}var valid131 = _errs474 === errors;if(valid131){const err346 = {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 = [err346];}else {vErrors.push(err346);}errors++;}else {errors = _errs473;if(vErrors !== null){if(_errs473){vErrors.length = _errs473;}else {vErrors = null;}}}if(typeof data183 === "string"){if(func2(data183) < 1){const err347 = {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 = [err347];}else {vErrors.push(err347);}errors++;}}else {const err348 = {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 = [err348];}else {vErrors.push(err348);}errors++;}}if(data181.tolerance !== undefined){let data184 = data181.tolerance;if(data184 && typeof data184 == "object" && !Array.isArray(data184)){if(data184.kind === undefined){const err349 = {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 = [err349];}else {vErrors.push(err349);}errors++;}if(data184.value === undefined){const err350 = {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 = [err350];}else {vErrors.push(err350);}errors++;}for(const key52 in data184){if(!((key52 === "kind") || (key52 === "value"))){const err351 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key52},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err351];}else {vErrors.push(err351);}errors++;}}if(data184.kind !== undefined){let data185 = data184.kind;if(typeof data185 !== "string"){const err352 = {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 = [err352];}else {vErrors.push(err352);}errors++;}if(!((data185 === "absolute") || (data185 === "percent"))){const err353 = {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 = [err353];}else {vErrors.push(err353);}errors++;}}if(data184.value !== undefined){let data186 = data184.value;if((typeof data186 == "number") && (isFinite(data186))){if(data186 < 0 || isNaN(data186)){const err354 = {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 = [err354];}else {vErrors.push(err354);}errors++;}}else {const err355 = {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 = [err355];}else {vErrors.push(err355);}errors++;}}}else {const err356 = {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 = [err356];}else {vErrors.push(err356);}errors++;}}if(data181.floors !== undefined){let data187 = data181.floors;if(data187 && typeof data187 == "object" && !Array.isArray(data187)){for(const key53 in data187){let data188 = data187[key53];if(data188 && typeof data188 == "object" && !Array.isArray(data188)){for(const key54 in data188){let data189 = data188[key54];if(!((typeof data189 == "number") && (isFinite(data189)))){const err357 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key53.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key54.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 = [err357];}else {vErrors.push(err357);}errors++;}}}else {const err358 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key53.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 = [err358];}else {vErrors.push(err358);}errors++;}}}else {const err359 = {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 = [err359];}else {vErrors.push(err359);}errors++;}}if(data181.components !== undefined){let data190 = data181.components;if(data190 && typeof data190 == "object" && !Array.isArray(data190)){for(const key55 in data190){let data191 = data190[key55];if(Array.isArray(data191)){const len27 = data191.length;for(let i29=0; i29<len27; i29++){let data192 = data191[i29];if(typeof data192 === "string"){if(func2(data192) < 1){const err360 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key55.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,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 = [err360];}else {vErrors.push(err360);}errors++;}}else {const err361 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key55.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,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 = [err361];}else {vErrors.push(err361);}errors++;}}}else {const err362 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key55.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 = [err362];}else {vErrors.push(err362);}errors++;}}}else {const err363 = {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 = [err363];}else {vErrors.push(err363);}errors++;}}if(data181.strykerConfigPath !== undefined){let data193 = data181.strykerConfigPath;if((typeof data193 !== "string") && (data193 !== null)){const err364 = {instancePath:instancePath+"/delivery/quality/gates/mutation/strykerConfigPath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/strykerConfigPath/type",keyword:"type",params:{type: schema11.properties.delivery.properties.quality.properties.gates.properties.mutation.properties.strykerConfigPath.type},message:"must be string,null"};if(vErrors === null){vErrors = [err364];}else {vErrors.push(err364);}errors++;}const _errs499 = errors;const _errs500 = errors;if(errors === _errs500){if(typeof data193 === "string"){if(!pattern0.test(data193)){const err365 = {};if(vErrors === null){vErrors = [err365];}else {vErrors.push(err365);}errors++;}}else {const err366 = {};if(vErrors === null){vErrors = [err366];}else {vErrors.push(err366);}errors++;}}var valid138 = _errs500 === errors;if(valid138){const err367 = {instancePath:instancePath+"/delivery/quality/gates/mutation/strykerConfigPath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/strykerConfigPath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err367];}else {vErrors.push(err367);}errors++;}else {errors = _errs499;if(vErrors !== null){if(_errs499){vErrors.length = _errs499;}else {vErrors = null;}}}if(typeof data193 === "string"){if(func2(data193) < 1){const err368 = {instancePath:instancePath+"/delivery/quality/gates/mutation/strykerConfigPath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/strykerConfigPath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err368];}else {vErrors.push(err368);}errors++;}}}}else {const err369 = {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 = [err369];}else {vErrors.push(err369);}errors++;}}if(data102.lighthouse !== undefined){let data194 = data102.lighthouse;if(data194 && typeof data194 == "object" && !Array.isArray(data194)){for(const key56 in data194){if(!(((((((key56 === "enabled") || (key56 === "baselinePath")) || (key56 === "tolerance")) || (key56 === "floors")) || (key56 === "components")) || (key56 === "baseUrl")) || (key56 === "routes"))){const err370 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key56},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err370];}else {vErrors.push(err370);}errors++;}}if(data194.enabled !== undefined){if(typeof data194.enabled !== "boolean"){const err371 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err371];}else {vErrors.push(err371);}errors++;}}if(data194.baselinePath !== undefined){let data196 = data194.baselinePath;const _errs509 = errors;const _errs510 = errors;if(typeof data196 === "string"){if(!pattern0.test(data196)){const err372 = {};if(vErrors === null){vErrors = [err372];}else {vErrors.push(err372);}errors++;}}var valid140 = _errs510 === errors;if(valid140){const err373 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err373];}else {vErrors.push(err373);}errors++;}else {errors = _errs509;if(vErrors !== null){if(_errs509){vErrors.length = _errs509;}else {vErrors = null;}}}if(typeof data196 === "string"){if(func2(data196) < 1){const err374 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err374];}else {vErrors.push(err374);}errors++;}}else {const err375 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err375];}else {vErrors.push(err375);}errors++;}}if(data194.tolerance !== undefined){let data197 = data194.tolerance;if(data197 && typeof data197 == "object" && !Array.isArray(data197)){if(data197.kind === undefined){const err376 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err376];}else {vErrors.push(err376);}errors++;}if(data197.value === undefined){const err377 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err377];}else {vErrors.push(err377);}errors++;}for(const key57 in data197){if(!((key57 === "kind") || (key57 === "value"))){const err378 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err378];}else {vErrors.push(err378);}errors++;}}if(data197.kind !== undefined){let data198 = data197.kind;if(typeof data198 !== "string"){const err379 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err379];}else {vErrors.push(err379);}errors++;}if(!((data198 === "absolute") || (data198 === "percent"))){const err380 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err380];}else {vErrors.push(err380);}errors++;}}if(data197.value !== undefined){let data199 = data197.value;if((typeof data199 == "number") && (isFinite(data199))){if(data199 < 0 || isNaN(data199)){const err381 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err381];}else {vErrors.push(err381);}errors++;}}else {const err382 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err382];}else {vErrors.push(err382);}errors++;}}}else {const err383 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err383];}else {vErrors.push(err383);}errors++;}}if(data194.floors !== undefined){let data200 = data194.floors;if(data200 && typeof data200 == "object" && !Array.isArray(data200)){for(const key58 in data200){let data201 = data200[key58];if(data201 && typeof data201 == "object" && !Array.isArray(data201)){for(const key59 in data201){let data202 = data201[key59];if(!((typeof data202 == "number") && (isFinite(data202)))){const err384 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key58.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key59.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err384];}else {vErrors.push(err384);}errors++;}}}else {const err385 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key58.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err385];}else {vErrors.push(err385);}errors++;}}}else {const err386 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err386];}else {vErrors.push(err386);}errors++;}}if(data194.components !== undefined){let data203 = data194.components;if(data203 && typeof data203 == "object" && !Array.isArray(data203)){for(const key60 in data203){let data204 = data203[key60];if(Array.isArray(data204)){const len28 = data204.length;for(let i30=0; i30<len28; i30++){let data205 = data204[i30];if(typeof data205 === "string"){if(func2(data205) < 1){const err387 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key60.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/items/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/quality/gates/lighthouse/components/" + key60.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err388];}else {vErrors.push(err388);}errors++;}}}else {const err389 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key60.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err389];}else {vErrors.push(err389);}errors++;}}}else {const err390 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err390];}else {vErrors.push(err390);}errors++;}}if(data194.baseUrl !== undefined){let data206 = data194.baseUrl;if((typeof data206 !== "string") && (data206 !== null)){const err391 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baseUrl",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baseUrl/type",keyword:"type",params:{type: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.baseUrl.type},message:"must be string,null"};if(vErrors === null){vErrors = [err391];}else {vErrors.push(err391);}errors++;}const _errs535 = errors;const _errs536 = errors;if(errors === _errs536){if(typeof data206 === "string"){if(!pattern0.test(data206)){const err392 = {};if(vErrors === null){vErrors = [err392];}else {vErrors.push(err392);}errors++;}}else {const err393 = {};if(vErrors === null){vErrors = [err393];}else {vErrors.push(err393);}errors++;}}var valid147 = _errs536 === errors;if(valid147){const err394 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baseUrl",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baseUrl/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err394];}else {vErrors.push(err394);}errors++;}else {errors = _errs535;if(vErrors !== null){if(_errs535){vErrors.length = _errs535;}else {vErrors = null;}}}if(typeof data206 === "string"){if(func2(data206) < 1){const err395 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baseUrl",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baseUrl/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err395];}else {vErrors.push(err395);}errors++;}}}if(data194.routes !== undefined){let data207 = data194.routes;if(Array.isArray(data207)){const len29 = data207.length;for(let i31=0; i31<len29; i31++){let data208 = data207[i31];if(data208 && typeof data208 == "object" && !Array.isArray(data208)){if(data208.path === undefined){const err396 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err396];}else {vErrors.push(err396);}errors++;}for(const key61 in data208){if(!((key61 === "path") || (key61 === "formFactor"))){const err397 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key61},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err397];}else {vErrors.push(err397);}errors++;}}if(data208.path !== undefined){let data209 = data208.path;if(typeof data209 === "string"){if(func2(data209) < 1){const err398 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err398];}else {vErrors.push(err398);}errors++;}}else {const err399 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err399];}else {vErrors.push(err399);}errors++;}}if(data208.formFactor !== undefined){let data210 = data208.formFactor;if(typeof data210 !== "string"){const err400 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err400];}else {vErrors.push(err400);}errors++;}if(!((data210 === "mobile") || (data210 === "desktop"))){const err401 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.routes.items.properties.formFactor.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err401];}else {vErrors.push(err401);}errors++;}}}else {const err402 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err402];}else {vErrors.push(err402);}errors++;}}}else {const err403 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err403];}else {vErrors.push(err403);}errors++;}}}else {const err404 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err404];}else {vErrors.push(err404);}errors++;}}if(data102["bundle-size"] !== undefined){let data211 = data102["bundle-size"];if(data211 && typeof data211 == "object" && !Array.isArray(data211)){for(const key62 in data211){if(!((((((key62 === "enabled") || (key62 === "baselinePath")) || (key62 === "tolerance")) || (key62 === "floors")) || (key62 === "components")) || (key62 === "bundles"))){const err405 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key62},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err405];}else {vErrors.push(err405);}errors++;}}if(data211.enabled !== undefined){if(typeof data211.enabled !== "boolean"){const err406 = {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 = [err406];}else {vErrors.push(err406);}errors++;}}if(data211.baselinePath !== undefined){let data213 = data211.baselinePath;const _errs554 = errors;const _errs555 = errors;if(typeof data213 === "string"){if(!pattern0.test(data213)){const err407 = {};if(vErrors === null){vErrors = [err407];}else {vErrors.push(err407);}errors++;}}var valid152 = _errs555 === errors;if(valid152){const err408 = {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 = [err408];}else {vErrors.push(err408);}errors++;}else {errors = _errs554;if(vErrors !== null){if(_errs554){vErrors.length = _errs554;}else {vErrors = null;}}}if(typeof data213 === "string"){if(func2(data213) < 1){const err409 = {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 = [err409];}else {vErrors.push(err409);}errors++;}}else {const err410 = {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 = [err410];}else {vErrors.push(err410);}errors++;}}if(data211.tolerance !== undefined){let data214 = data211.tolerance;if(data214 && typeof data214 == "object" && !Array.isArray(data214)){if(data214.kind === undefined){const err411 = {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 = [err411];}else {vErrors.push(err411);}errors++;}if(data214.value === undefined){const err412 = {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 = [err412];}else {vErrors.push(err412);}errors++;}for(const key63 in data214){if(!((key63 === "kind") || (key63 === "value"))){const err413 = {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: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err413];}else {vErrors.push(err413);}errors++;}}if(data214.kind !== undefined){let data215 = data214.kind;if(typeof data215 !== "string"){const err414 = {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 = [err414];}else {vErrors.push(err414);}errors++;}if(!((data215 === "absolute") || (data215 === "percent"))){const err415 = {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 = [err415];}else {vErrors.push(err415);}errors++;}}if(data214.value !== undefined){let data216 = data214.value;if((typeof data216 == "number") && (isFinite(data216))){if(data216 < 0 || isNaN(data216)){const err416 = {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 = [err416];}else {vErrors.push(err416);}errors++;}}else {const err417 = {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 = [err417];}else {vErrors.push(err417);}errors++;}}}else {const err418 = {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 = [err418];}else {vErrors.push(err418);}errors++;}}if(data211.floors !== undefined){let data217 = data211.floors;if(data217 && typeof data217 == "object" && !Array.isArray(data217)){for(const key64 in data217){let data218 = data217[key64];if(data218 && typeof data218 == "object" && !Array.isArray(data218)){for(const key65 in data218){let data219 = data218[key65];if(!((typeof data219 == "number") && (isFinite(data219)))){const err419 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key64.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key65.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 = [err419];}else {vErrors.push(err419);}errors++;}}}else {const err420 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key64.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 = [err420];}else {vErrors.push(err420);}errors++;}}}else {const err421 = {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 = [err421];}else {vErrors.push(err421);}errors++;}}if(data211.components !== undefined){let data220 = data211.components;if(data220 && typeof data220 == "object" && !Array.isArray(data220)){for(const key66 in data220){let data221 = data220[key66];if(Array.isArray(data221)){const len30 = data221.length;for(let i32=0; i32<len30; i32++){let data222 = data221[i32];if(typeof data222 === "string"){if(func2(data222) < 1){const err422 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key66.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,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 = [err422];}else {vErrors.push(err422);}errors++;}}else {const err423 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key66.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,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 = [err423];}else {vErrors.push(err423);}errors++;}}}else {const err424 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key66.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 = [err424];}else {vErrors.push(err424);}errors++;}}}else {const err425 = {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 = [err425];}else {vErrors.push(err425);}errors++;}}if(data211.bundles !== undefined){let data223 = data211.bundles;if(Array.isArray(data223)){const len31 = data223.length;for(let i33=0; i33<len31; i33++){let data224 = data223[i33];if(data224 && typeof data224 == "object" && !Array.isArray(data224)){if(data224.name === undefined){const err426 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err426];}else {vErrors.push(err426);}errors++;}if(data224.path === undefined){const err427 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err427];}else {vErrors.push(err427);}errors++;}if(data224.limit === undefined){const err428 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err428];}else {vErrors.push(err428);}errors++;}for(const key67 in data224){if(!(((key67 === "name") || (key67 === "path")) || (key67 === "limit"))){const err429 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key67},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err429];}else {vErrors.push(err429);}errors++;}}if(data224.name !== undefined){let data225 = data224.name;if(typeof data225 === "string"){if(func2(data225) < 1){const err430 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err430];}else {vErrors.push(err430);}errors++;}}else {const err431 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err431];}else {vErrors.push(err431);}errors++;}}if(data224.path !== undefined){let data226 = data224.path;if(typeof data226 === "string"){if(func2(data226) < 1){const err432 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err432];}else {vErrors.push(err432);}errors++;}}else {const err433 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err433];}else {vErrors.push(err433);}errors++;}}if(data224.limit !== undefined){let data227 = data224.limit;if(typeof data227 === "string"){if(func2(data227) < 1){const err434 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err434];}else {vErrors.push(err434);}errors++;}}else {const err435 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err435];}else {vErrors.push(err435);}errors++;}}}else {const err436 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err436];}else {vErrors.push(err436);}errors++;}}}else {const err437 = {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 = [err437];}else {vErrors.push(err437);}errors++;}}}else {const err438 = {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 = [err438];}else {vErrors.push(err438);}errors++;}}if(data102.duplication !== undefined){let data228 = data102.duplication;if(data228 && typeof data228 == "object" && !Array.isArray(data228)){for(const key68 in data228){if(!((((((((key68 === "enabled") || (key68 === "baselinePath")) || (key68 === "tolerance")) || (key68 === "floors")) || (key68 === "components")) || (key68 === "targetDirs")) || (key68 === "refreshTimeoutMs")) || (key68 === "ignoreGlobs"))){const err439 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key68},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err439];}else {vErrors.push(err439);}errors++;}}if(data228.enabled !== undefined){if(typeof data228.enabled !== "boolean"){const err440 = {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 = [err440];}else {vErrors.push(err440);}errors++;}}if(data228.baselinePath !== undefined){let data230 = data228.baselinePath;const _errs596 = errors;const _errs597 = errors;if(typeof data230 === "string"){if(!pattern0.test(data230)){const err441 = {};if(vErrors === null){vErrors = [err441];}else {vErrors.push(err441);}errors++;}}var valid163 = _errs597 === errors;if(valid163){const err442 = {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 = [err442];}else {vErrors.push(err442);}errors++;}else {errors = _errs596;if(vErrors !== null){if(_errs596){vErrors.length = _errs596;}else {vErrors = null;}}}if(typeof data230 === "string"){if(func2(data230) < 1){const err443 = {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 = [err443];}else {vErrors.push(err443);}errors++;}}else {const err444 = {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 = [err444];}else {vErrors.push(err444);}errors++;}}if(data228.tolerance !== undefined){let data231 = data228.tolerance;if(data231 && typeof data231 == "object" && !Array.isArray(data231)){if(data231.kind === undefined){const err445 = {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 = [err445];}else {vErrors.push(err445);}errors++;}if(data231.value === undefined){const err446 = {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 = [err446];}else {vErrors.push(err446);}errors++;}for(const key69 in data231){if(!((key69 === "kind") || (key69 === "value"))){const err447 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err447];}else {vErrors.push(err447);}errors++;}}if(data231.kind !== undefined){let data232 = data231.kind;if(typeof data232 !== "string"){const err448 = {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 = [err448];}else {vErrors.push(err448);}errors++;}if(!((data232 === "absolute") || (data232 === "percent"))){const err449 = {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 = [err449];}else {vErrors.push(err449);}errors++;}}if(data231.value !== undefined){let data233 = data231.value;if((typeof data233 == "number") && (isFinite(data233))){if(data233 < 0 || isNaN(data233)){const err450 = {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 = [err450];}else {vErrors.push(err450);}errors++;}}else {const err451 = {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 = [err451];}else {vErrors.push(err451);}errors++;}}}else {const err452 = {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 = [err452];}else {vErrors.push(err452);}errors++;}}if(data228.floors !== undefined){let data234 = data228.floors;if(data234 && typeof data234 == "object" && !Array.isArray(data234)){for(const key70 in data234){let data235 = data234[key70];if(data235 && typeof data235 == "object" && !Array.isArray(data235)){for(const key71 in data235){let data236 = data235[key71];if(!((typeof data236 == "number") && (isFinite(data236)))){const err453 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key70.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key71.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 = [err453];}else {vErrors.push(err453);}errors++;}}}else {const err454 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key70.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 = [err454];}else {vErrors.push(err454);}errors++;}}}else {const err455 = {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 = [err455];}else {vErrors.push(err455);}errors++;}}if(data228.components !== undefined){let data237 = data228.components;if(data237 && typeof data237 == "object" && !Array.isArray(data237)){for(const key72 in data237){let data238 = data237[key72];if(Array.isArray(data238)){const len32 = data238.length;for(let i34=0; i34<len32; i34++){let data239 = data238[i34];if(typeof data239 === "string"){if(func2(data239) < 1){const err456 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,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 = [err456];}else {vErrors.push(err456);}errors++;}}else {const err457 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,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 = [err457];}else {vErrors.push(err457);}errors++;}}}else {const err458 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key72.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 = [err458];}else {vErrors.push(err458);}errors++;}}}else {const err459 = {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 = [err459];}else {vErrors.push(err459);}errors++;}}if(data228.targetDirs !== undefined){let data240 = data228.targetDirs;const _errs621 = errors;let valid170 = false;let passing4 = null;const _errs622 = errors;if(Array.isArray(data240)){const len33 = data240.length;for(let i35=0; i35<len33; i35++){if(typeof data240[i35] !== "string"){const err460 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i35,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 = [err460];}else {vErrors.push(err460);}errors++;}}}else {const err461 = {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 = [err461];}else {vErrors.push(err461);}errors++;}var _valid5 = _errs622 === errors;if(_valid5){valid170 = true;passing4 = 0;}const _errs626 = errors;if(data240 && typeof data240 == "object" && !Array.isArray(data240)){for(const key73 in data240){if(!((key73 === "append") || (key73 === "prepend"))){const err462 = {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: key73},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err462];}else {vErrors.push(err462);}errors++;}}if(data240.append !== undefined){let data242 = data240.append;if(Array.isArray(data242)){const len34 = data242.length;for(let i36=0; i36<len34; i36++){if(typeof data242[i36] !== "string"){const err463 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i36,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 = [err463];}else {vErrors.push(err463);}errors++;}}}else {const err464 = {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 = [err464];}else {vErrors.push(err464);}errors++;}}if(data240.prepend !== undefined){let data244 = data240.prepend;if(Array.isArray(data244)){const len35 = data244.length;for(let i37=0; i37<len35; i37++){if(typeof data244[i37] !== "string"){const err465 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i37,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 = [err465];}else {vErrors.push(err465);}errors++;}}}else {const err466 = {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 = [err466];}else {vErrors.push(err466);}errors++;}}}else {const err467 = {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 = [err467];}else {vErrors.push(err467);}errors++;}var _valid5 = _errs626 === errors;if(_valid5 && valid170){valid170 = false;passing4 = [passing4, 1];}else {if(_valid5){valid170 = true;passing4 = 1;}}if(!valid170){const err468 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err468];}else {vErrors.push(err468);}errors++;}else {errors = _errs621;if(vErrors !== null){if(_errs621){vErrors.length = _errs621;}else {vErrors = null;}}}}if(data228.refreshTimeoutMs !== undefined){let data246 = data228.refreshTimeoutMs;if(!(((typeof data246 == "number") && (!(data246 % 1) && !isNaN(data246))) && (isFinite(data246)))){const err469 = {instancePath:instancePath+"/delivery/quality/gates/duplication/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/refreshTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err469];}else {vErrors.push(err469);}errors++;}if((typeof data246 == "number") && (isFinite(data246))){if(data246 < 1 || isNaN(data246)){const err470 = {instancePath:instancePath+"/delivery/quality/gates/duplication/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/refreshTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err470];}else {vErrors.push(err470);}errors++;}}}if(data228.ignoreGlobs !== undefined){let data247 = data228.ignoreGlobs;if(Array.isArray(data247)){const len36 = data247.length;for(let i38=0; i38<len36; i38++){let data248 = data247[i38];if(typeof data248 === "string"){if(func2(data248) < 1){const err471 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,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 = [err471];}else {vErrors.push(err471);}errors++;}}else {const err472 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,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 = [err472];}else {vErrors.push(err472);}errors++;}}}else {const err473 = {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 = [err473];}else {vErrors.push(err473);}errors++;}}}else {const err474 = {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 = [err474];}else {vErrors.push(err474);}errors++;}}}else {const err475 = {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 = [err475];}else {vErrors.push(err475);}errors++;}}if(data98.formatAutofix !== undefined){let data249 = data98.formatAutofix;if(data249 && typeof data249 == "object" && !Array.isArray(data249)){for(const key74 in data249){if(!(key74 === "timeoutMs")){const err476 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err476];}else {vErrors.push(err476);}errors++;}}if(data249.timeoutMs !== undefined){let data250 = data249.timeoutMs;if(!(((typeof data250 == "number") && (!(data250 % 1) && !isNaN(data250))) && (isFinite(data250)))){const err477 = {instancePath:instancePath+"/delivery/quality/formatAutofix/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/properties/timeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err477];}else {vErrors.push(err477);}errors++;}if((typeof data250 == "number") && (isFinite(data250))){if(data250 < 1 || isNaN(data250)){const err478 = {instancePath:instancePath+"/delivery/quality/formatAutofix/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/properties/timeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err478];}else {vErrors.push(err478);}errors++;}}}}else {const err479 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err479];}else {vErrors.push(err479);}errors++;}}if(data98.codingGuardrails !== undefined){let data251 = data98.codingGuardrails;if(data251 && typeof data251 == "object" && !Array.isArray(data251)){for(const key75 in data251){if(!(((key75 === "cyclomaticFlag") || (key75 === "cyclomaticMustFix")) || (key75 === "requireSiblingTest"))){const err480 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err480];}else {vErrors.push(err480);}errors++;}}if(data251.cyclomaticFlag !== undefined){let data252 = data251.cyclomaticFlag;if(!(((typeof data252 == "number") && (!(data252 % 1) && !isNaN(data252))) && (isFinite(data252)))){const err481 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticFlag",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticFlag/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err481];}else {vErrors.push(err481);}errors++;}if((typeof data252 == "number") && (isFinite(data252))){if(data252 < 1 || isNaN(data252)){const err482 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticFlag",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticFlag/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err482];}else {vErrors.push(err482);}errors++;}}}if(data251.cyclomaticMustFix !== undefined){let data253 = data251.cyclomaticMustFix;if(!(((typeof data253 == "number") && (!(data253 % 1) && !isNaN(data253))) && (isFinite(data253)))){const err483 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err483];}else {vErrors.push(err483);}errors++;}if((typeof data253 == "number") && (isFinite(data253))){if(data253 < 1 || isNaN(data253)){const err484 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err484];}else {vErrors.push(err484);}errors++;}}}if(data251.requireSiblingTest !== undefined){if(typeof data251.requireSiblingTest !== "boolean"){const err485 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/requireSiblingTest",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/requireSiblingTest/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err485];}else {vErrors.push(err485);}errors++;}}}else {const err486 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err486];}else {vErrors.push(err486);}errors++;}}if(data98.autoRefresh !== undefined){let data255 = data98.autoRefresh;if(data255 && typeof data255 == "object" && !Array.isArray(data255)){for(const key76 in data255){if(!(((key76 === "enabled") || (key76 === "crapJumpCap")) || (key76 === "scope"))){const err487 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key76},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err487];}else {vErrors.push(err487);}errors++;}}if(data255.enabled !== undefined){if(typeof data255.enabled !== "boolean"){const err488 = {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 = [err488];}else {vErrors.push(err488);}errors++;}}if(data255.crapJumpCap !== undefined){let data257 = data255.crapJumpCap;if((typeof data257 == "number") && (isFinite(data257))){if(data257 < 0 || isNaN(data257)){const err489 = {instancePath:instancePath+"/delivery/quality/autoRefresh/crapJumpCap",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/crapJumpCap/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err489];}else {vErrors.push(err489);}errors++;}}else {const err490 = {instancePath:instancePath+"/delivery/quality/autoRefresh/crapJumpCap",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/crapJumpCap/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err490];}else {vErrors.push(err490);}errors++;}}if(data255.scope !== undefined){let data258 = data255.scope;if(typeof data258 !== "string"){const err491 = {instancePath:instancePath+"/delivery/quality/autoRefresh/scope",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/scope/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err491];}else {vErrors.push(err491);}errors++;}if(!((data258 === "diff") || (data258 === "full"))){const err492 = {instancePath:instancePath+"/delivery/quality/autoRefresh/scope",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/scope/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.autoRefresh.properties.scope.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err492];}else {vErrors.push(err492);}errors++;}}}else {const err493 = {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 = [err493];}else {vErrors.push(err493);}errors++;}}if(data98.baselineEpsilon !== undefined){let data259 = data98.baselineEpsilon;if(data259 && typeof data259 == "object" && !Array.isArray(data259)){for(const key77 in data259){if(!((((((((key77 === "maintainability") || (key77 === "crap")) || (key77 === "coverage")) || (key77 === "mutation")) || (key77 === "lint")) || (key77 === "lighthouse")) || (key77 === "bundle-size")) || (key77 === "duplication"))){const err494 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err494];}else {vErrors.push(err494);}errors++;}}if(data259.maintainability !== undefined){let data260 = data259.maintainability;if((typeof data260 == "number") && (isFinite(data260))){if(data260 < 0 || isNaN(data260)){const err495 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/maintainability/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err495];}else {vErrors.push(err495);}errors++;}}else {const err496 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/maintainability/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err496];}else {vErrors.push(err496);}errors++;}}if(data259.crap !== undefined){let data261 = data259.crap;if((typeof data261 == "number") && (isFinite(data261))){if(data261 < 0 || isNaN(data261)){const err497 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/crap",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/crap/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err497];}else {vErrors.push(err497);}errors++;}}else {const err498 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/crap",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/crap/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err498];}else {vErrors.push(err498);}errors++;}}if(data259.coverage !== undefined){let data262 = data259.coverage;if((typeof data262 == "number") && (isFinite(data262))){if(data262 < 0 || isNaN(data262)){const err499 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/coverage/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err499];}else {vErrors.push(err499);}errors++;}}else {const err500 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/coverage/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err500];}else {vErrors.push(err500);}errors++;}}if(data259.mutation !== undefined){let data263 = data259.mutation;if((typeof data263 == "number") && (isFinite(data263))){if(data263 < 0 || isNaN(data263)){const err501 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/mutation/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err501];}else {vErrors.push(err501);}errors++;}}else {const err502 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/mutation/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err502];}else {vErrors.push(err502);}errors++;}}if(data259.lint !== undefined){let data264 = data259.lint;if((typeof data264 == "number") && (isFinite(data264))){if(data264 < 0 || isNaN(data264)){const err503 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lint",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lint/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err503];}else {vErrors.push(err503);}errors++;}}else {const err504 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lint",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lint/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err504];}else {vErrors.push(err504);}errors++;}}if(data259.lighthouse !== undefined){let data265 = data259.lighthouse;if((typeof data265 == "number") && (isFinite(data265))){if(data265 < 0 || isNaN(data265)){const err505 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lighthouse/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err505];}else {vErrors.push(err505);}errors++;}}else {const err506 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lighthouse/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err506];}else {vErrors.push(err506);}errors++;}}if(data259["bundle-size"] !== undefined){let data266 = data259["bundle-size"];if((typeof data266 == "number") && (isFinite(data266))){if(data266 < 0 || isNaN(data266)){const err507 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/bundle-size/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err507];}else {vErrors.push(err507);}errors++;}}else {const err508 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/bundle-size/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err508];}else {vErrors.push(err508);}errors++;}}if(data259.duplication !== undefined){let data267 = data259.duplication;if((typeof data267 == "number") && (isFinite(data267))){if(data267 < 0 || isNaN(data267)){const err509 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/duplication/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err509];}else {vErrors.push(err509);}errors++;}}else {const err510 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/duplication/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err510];}else {vErrors.push(err510);}errors++;}}}else {const err511 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err511];}else {vErrors.push(err511);}errors++;}}if(data98.requireBaselines !== undefined){if(typeof data98.requireBaselines !== "boolean"){const err512 = {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 = [err512];}else {vErrors.push(err512);}errors++;}}if(data98.navigability !== undefined){let data269 = data98.navigability;if(data269 && typeof data269 == "object" && !Array.isArray(data269)){for(const key78 in data269){if(!(((key78 === "routeGlobs") || (key78 === "navRegistry")) || (key78 === "journeySuite"))){const err513 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key78},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err513];}else {vErrors.push(err513);}errors++;}}if(data269.routeGlobs !== undefined){let data270 = data269.routeGlobs;if(Array.isArray(data270)){const len37 = data270.length;for(let i39=0; i39<len37; i39++){if(typeof data270[i39] !== "string"){const err514 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i39,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err514];}else {vErrors.push(err514);}errors++;}}}else {const err515 = {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 = [err515];}else {vErrors.push(err515);}errors++;}}if(data269.navRegistry !== undefined){let data272 = data269.navRegistry;if(Array.isArray(data272)){const len38 = data272.length;for(let i40=0; i40<len38; i40++){if(typeof data272[i40] !== "string"){const err516 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i40,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/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+"/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 = [err517];}else {vErrors.push(err517);}errors++;}}if(data269.journeySuite !== undefined){if(typeof data269.journeySuite !== "string"){const err518 = {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 = [err518];}else {vErrors.push(err518);}errors++;}}}else {const err519 = {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 = [err519];}else {vErrors.push(err519);}errors++;}}}else {const err520 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err520];}else {vErrors.push(err520);}errors++;}}if(data66.mergeWatch !== undefined){let data275 = data66.mergeWatch;if(data275 && typeof data275 == "object" && !Array.isArray(data275)){for(const key79 in data275){if(!(((((key79 === "mode") || (key79 === "intervalSeconds")) || (key79 === "maxWaitSeconds")) || (key79 === "maxBudgetSeconds")) || (key79 === "updateAttempts"))){const err521 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key79},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err521];}else {vErrors.push(err521);}errors++;}}if(data275.mode !== undefined){let data276 = data275.mode;if(typeof data276 !== "string"){const err522 = {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 = [err522];}else {vErrors.push(err522);}errors++;}if(!((data276 === "sync") || (data276 === "async"))){const err523 = {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 = [err523];}else {vErrors.push(err523);}errors++;}}if(data275.intervalSeconds !== undefined){let data277 = data275.intervalSeconds;if(!(((typeof data277 == "number") && (!(data277 % 1) && !isNaN(data277))) && (isFinite(data277)))){const err524 = {instancePath:instancePath+"/delivery/mergeWatch/intervalSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/intervalSeconds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err524];}else {vErrors.push(err524);}errors++;}if((typeof data277 == "number") && (isFinite(data277))){if(data277 < 1 || isNaN(data277)){const err525 = {instancePath:instancePath+"/delivery/mergeWatch/intervalSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/intervalSeconds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err525];}else {vErrors.push(err525);}errors++;}}}if(data275.maxWaitSeconds !== undefined){let data278 = data275.maxWaitSeconds;if(!(((typeof data278 == "number") && (!(data278 % 1) && !isNaN(data278))) && (isFinite(data278)))){const err526 = {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 = [err526];}else {vErrors.push(err526);}errors++;}if((typeof data278 == "number") && (isFinite(data278))){if(data278 < 1 || isNaN(data278)){const err527 = {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 = [err527];}else {vErrors.push(err527);}errors++;}}}if(data275.maxBudgetSeconds !== undefined){let data279 = data275.maxBudgetSeconds;if(!(((typeof data279 == "number") && (!(data279 % 1) && !isNaN(data279))) && (isFinite(data279)))){const err528 = {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 = [err528];}else {vErrors.push(err528);}errors++;}if((typeof data279 == "number") && (isFinite(data279))){if(data279 < 1 || isNaN(data279)){const err529 = {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 = [err529];}else {vErrors.push(err529);}errors++;}}}if(data275.updateAttempts !== undefined){let data280 = data275.updateAttempts;if(!(((typeof data280 == "number") && (!(data280 % 1) && !isNaN(data280))) && (isFinite(data280)))){const err530 = {instancePath:instancePath+"/delivery/mergeWatch/updateAttempts",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/updateAttempts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err530];}else {vErrors.push(err530);}errors++;}if((typeof data280 == "number") && (isFinite(data280))){if(data280 < 0 || isNaN(data280)){const err531 = {instancePath:instancePath+"/delivery/mergeWatch/updateAttempts",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/updateAttempts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err531];}else {vErrors.push(err531);}errors++;}}}}else {const err532 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err532];}else {vErrors.push(err532);}errors++;}}if(data66.codeReview !== undefined){let data281 = data66.codeReview;if(data281 && typeof data281 == "object" && !Array.isArray(data281)){for(const key80 in data281){if(!(((((key80 === "providers") || (key80 === "providerConfig")) || (key80 === "maxFixAttempts")) || (key80 === "maxFixScopeFiles")) || (key80 === "autoFixSeverity"))){const err533 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key80},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err533];}else {vErrors.push(err533);}errors++;}}if(data281.providers !== undefined){let data282 = data281.providers;if(Array.isArray(data282)){const len39 = data282.length;for(let i41=0; i41<len39; i41++){let data283 = data282[i41];if(data283 && typeof data283 == "object" && !Array.isArray(data283)){if(data283.name === undefined){const err534 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err534];}else {vErrors.push(err534);}errors++;}for(const key81 in data283){if(!(((((key81 === "name") || (key81 === "scopes")) || (key81 === "optional")) || (key81 === "manualPrompt")) || (key81 === "when"))){const err535 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key81},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err535];}else {vErrors.push(err535);}errors++;}}if(data283.name !== undefined){let data284 = data283.name;if(typeof data284 !== "string"){const err536 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err536];}else {vErrors.push(err536);}errors++;}if(!((((data284 === "native") || (data284 === "codex")) || (data284 === "security-review")) || (data284 === "ultrareview"))){const err537 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err537];}else {vErrors.push(err537);}errors++;}}if(data283.scopes !== undefined){let data285 = data283.scopes;if(Array.isArray(data285)){const len40 = data285.length;for(let i42=0; i42<len40; i42++){let data286 = data285[i42];if(typeof data286 !== "string"){const err538 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,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 = [err538];}else {vErrors.push(err538);}errors++;}if(!((data286 === "story") || (data286 === "epic"))){const err539 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,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 = [err539];}else {vErrors.push(err539);}errors++;}}}else {const err540 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err540];}else {vErrors.push(err540);}errors++;}}if(data283.optional !== undefined){if(typeof data283.optional !== "boolean"){const err541 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err541];}else {vErrors.push(err541);}errors++;}}if(data283.manualPrompt !== undefined){if(typeof data283.manualPrompt !== "boolean"){const err542 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err542];}else {vErrors.push(err542);}errors++;}}if(data283.when !== undefined){let data289 = data283.when;if(data289 && typeof data289 == "object" && !Array.isArray(data289)){for(const key82 in data289){if(!((key82 === "label") || (key82 === "labelAny"))){const err543 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key82},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err543];}else {vErrors.push(err543);}errors++;}}if(data289.label !== undefined){let data290 = data289.label;if(typeof data290 === "string"){if(func2(data290) < 1){const err544 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err544];}else {vErrors.push(err544);}errors++;}}else {const err545 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err545];}else {vErrors.push(err545);}errors++;}}if(data289.labelAny !== undefined){let data291 = data289.labelAny;if(Array.isArray(data291)){if(data291.length < 1){const err546 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err546];}else {vErrors.push(err546);}errors++;}const len41 = data291.length;for(let i43=0; i43<len41; i43++){let data292 = data291[i43];if(typeof data292 === "string"){if(func2(data292) < 1){const err547 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,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 = [err547];}else {vErrors.push(err547);}errors++;}}else {const err548 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,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 = [err548];}else {vErrors.push(err548);}errors++;}}}else {const err549 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err549];}else {vErrors.push(err549);}errors++;}}}else {const err550 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err550];}else {vErrors.push(err550);}errors++;}}}else {const err551 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err551];}else {vErrors.push(err551);}errors++;}}}else {const err552 = {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 = [err552];}else {vErrors.push(err552);}errors++;}}if(data281.providerConfig !== undefined){let data293 = data281.providerConfig;if(data293 && typeof data293 == "object" && !Array.isArray(data293)){}else {const err553 = {instancePath:instancePath+"/delivery/codeReview/providerConfig",schemaPath:"#/properties/delivery/properties/codeReview/properties/providerConfig/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err553];}else {vErrors.push(err553);}errors++;}}if(data281.maxFixAttempts !== undefined){let data294 = data281.maxFixAttempts;if(!(((typeof data294 == "number") && (!(data294 % 1) && !isNaN(data294))) && (isFinite(data294)))){const err554 = {instancePath:instancePath+"/delivery/codeReview/maxFixAttempts",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixAttempts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err554];}else {vErrors.push(err554);}errors++;}if((typeof data294 == "number") && (isFinite(data294))){if(data294 < 0 || isNaN(data294)){const err555 = {instancePath:instancePath+"/delivery/codeReview/maxFixAttempts",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixAttempts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err555];}else {vErrors.push(err555);}errors++;}}}if(data281.maxFixScopeFiles !== undefined){let data295 = data281.maxFixScopeFiles;if(!(((typeof data295 == "number") && (!(data295 % 1) && !isNaN(data295))) && (isFinite(data295)))){const err556 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err556];}else {vErrors.push(err556);}errors++;}if((typeof data295 == "number") && (isFinite(data295))){if(data295 < 1 || isNaN(data295)){const err557 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err557];}else {vErrors.push(err557);}errors++;}}}if(data281.autoFixSeverity !== undefined){let data296 = data281.autoFixSeverity;if(typeof data296 !== "string"){const err558 = {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 = [err558];}else {vErrors.push(err558);}errors++;}if(!((data296 === "high") || (data296 === "medium"))){const err559 = {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 = [err559];}else {vErrors.push(err559);}errors++;}}}else {const err560 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err560];}else {vErrors.push(err560);}errors++;}}if(data66.review !== undefined){let data297 = data66.review;if(data297 && typeof data297 == "object" && !Array.isArray(data297)){for(const key83 in data297){if(!(key83 === "lensDiffFloor")){const err561 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key83},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err561];}else {vErrors.push(err561);}errors++;}}if(data297.lensDiffFloor !== undefined){let data298 = data297.lensDiffFloor;if(!(((typeof data298 == "number") && (!(data298 % 1) && !isNaN(data298))) && (isFinite(data298)))){const err562 = {instancePath:instancePath+"/delivery/review/lensDiffFloor",schemaPath:"#/properties/delivery/properties/review/properties/lensDiffFloor/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err562];}else {vErrors.push(err562);}errors++;}if((typeof data298 == "number") && (isFinite(data298))){if(data298 < 0 || isNaN(data298)){const err563 = {instancePath:instancePath+"/delivery/review/lensDiffFloor",schemaPath:"#/properties/delivery/properties/review/properties/lensDiffFloor/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err563];}else {vErrors.push(err563);}errors++;}}}}else {const err564 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err564];}else {vErrors.push(err564);}errors++;}}if(data66.refactorStage !== undefined){let data299 = data66.refactorStage;if(data299 && typeof data299 == "object" && !Array.isArray(data299)){for(const key84 in data299){if(!(key84 === "enabled")){const err565 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key84},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err565];}else {vErrors.push(err565);}errors++;}}if(data299.enabled !== undefined){if(typeof data299.enabled !== "boolean"){const err566 = {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 = [err566];}else {vErrors.push(err566);}errors++;}}}else {const err567 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err567];}else {vErrors.push(err567);}errors++;}}if(data66.acceptanceEval !== undefined){let data301 = data66.acceptanceEval;if(data301 && typeof data301 == "object" && !Array.isArray(data301)){for(const key85 in data301){if(!(key85 === "maxRounds")){const err568 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key85},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err568];}else {vErrors.push(err568);}errors++;}}if(data301.maxRounds !== undefined){let data302 = data301.maxRounds;if(!(((typeof data302 == "number") && (!(data302 % 1) && !isNaN(data302))) && (isFinite(data302)))){const err569 = {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 = [err569];}else {vErrors.push(err569);}errors++;}if((typeof data302 == "number") && (isFinite(data302))){if(data302 < 1 || isNaN(data302)){const err570 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err570];}else {vErrors.push(err570);}errors++;}}}}else {const err571 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err571];}else {vErrors.push(err571);}errors++;}}if(data66.feedbackLoop !== undefined){let data303 = data66.feedbackLoop;if(data303 && typeof data303 == "object" && !Array.isArray(data303)){for(const key86 in data303){if(!(((key86 === "auditResultsAutoFile") || (key86 === "retroProposals")) || (key86 === "frictionWindowDays"))){const err572 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key86},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err572];}else {vErrors.push(err572);}errors++;}}if(data303.auditResultsAutoFile !== undefined){if(typeof data303.auditResultsAutoFile !== "boolean"){const err573 = {instancePath:instancePath+"/delivery/feedbackLoop/auditResultsAutoFile",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/auditResultsAutoFile/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err573];}else {vErrors.push(err573);}errors++;}}if(data303.retroProposals !== undefined){if(typeof data303.retroProposals !== "boolean"){const err574 = {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 = [err574];}else {vErrors.push(err574);}errors++;}}if(data303.frictionWindowDays !== undefined){let data306 = data303.frictionWindowDays;if(!(((typeof data306 == "number") && (!(data306 % 1) && !isNaN(data306))) && (isFinite(data306)))){const err575 = {instancePath:instancePath+"/delivery/feedbackLoop/frictionWindowDays",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/frictionWindowDays/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err575];}else {vErrors.push(err575);}errors++;}if((typeof data306 == "number") && (isFinite(data306))){if(data306 < 1 || isNaN(data306)){const err576 = {instancePath:instancePath+"/delivery/feedbackLoop/frictionWindowDays",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/frictionWindowDays/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err576];}else {vErrors.push(err576);}errors++;}}}}else {const err577 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err577];}else {vErrors.push(err577);}errors++;}}if(data66.auditToStories !== undefined){let data307 = data66.auditToStories;if(data307 && typeof data307 == "object" && !Array.isArray(data307)){for(const key87 in data307){if(!((key87 === "severityFloor") || (key87 === "autoComment"))){const err578 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key87},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err578];}else {vErrors.push(err578);}errors++;}}if(data307.severityFloor !== undefined){let data308 = data307.severityFloor;if(typeof data308 !== "string"){const err579 = {instancePath:instancePath+"/delivery/auditToStories/severityFloor",schemaPath:"#/properties/delivery/properties/auditToStories/properties/severityFloor/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err579];}else {vErrors.push(err579);}errors++;}if(!(((((data308 === "critical") || (data308 === "high")) || (data308 === "medium")) || (data308 === "low")) || (data308 === "all"))){const err580 = {instancePath:instancePath+"/delivery/auditToStories/severityFloor",schemaPath:"#/properties/delivery/properties/auditToStories/properties/severityFloor/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.auditToStories.properties.severityFloor.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err580];}else {vErrors.push(err580);}errors++;}}if(data307.autoComment !== undefined){if(typeof data307.autoComment !== "boolean"){const err581 = {instancePath:instancePath+"/delivery/auditToStories/autoComment",schemaPath:"#/properties/delivery/properties/auditToStories/properties/autoComment/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err581];}else {vErrors.push(err581);}errors++;}}}else {const err582 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err582];}else {vErrors.push(err582);}errors++;}}if(data66.ci !== undefined){let data310 = data66.ci;if(data310 && typeof data310 == "object" && !Array.isArray(data310)){for(const key88 in data310){if(!((((key88 === "watch") || (key88 === "autoMerge")) || (key88 === "blockOnAdvisoryFailure")) || (key88 === "advisoryAllowlist"))){const err583 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key88},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err583];}else {vErrors.push(err583);}errors++;}}if(data310.watch !== undefined){let data311 = data310.watch;if(data311 && typeof data311 == "object" && !Array.isArray(data311)){for(const key89 in data311){if(!((((key89 === "pollIntervalMs") || (key89 === "maxPolls")) || (key89 === "maxResumes")) || (key89 === "attachWindowMs"))){const err584 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key89},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err584];}else {vErrors.push(err584);}errors++;}}if(data311.pollIntervalMs !== undefined){let data312 = data311.pollIntervalMs;if(!(((typeof data312 == "number") && (!(data312 % 1) && !isNaN(data312))) && (isFinite(data312)))){const err585 = {instancePath:instancePath+"/delivery/ci/watch/pollIntervalMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/pollIntervalMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err585];}else {vErrors.push(err585);}errors++;}if((typeof data312 == "number") && (isFinite(data312))){if(data312 < 1 || isNaN(data312)){const err586 = {instancePath:instancePath+"/delivery/ci/watch/pollIntervalMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/pollIntervalMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err586];}else {vErrors.push(err586);}errors++;}}}if(data311.maxPolls !== undefined){let data313 = data311.maxPolls;if(!(((typeof data313 == "number") && (!(data313 % 1) && !isNaN(data313))) && (isFinite(data313)))){const err587 = {instancePath:instancePath+"/delivery/ci/watch/maxPolls",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxPolls/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err587];}else {vErrors.push(err587);}errors++;}if((typeof data313 == "number") && (isFinite(data313))){if(data313 < 1 || isNaN(data313)){const err588 = {instancePath:instancePath+"/delivery/ci/watch/maxPolls",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxPolls/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err588];}else {vErrors.push(err588);}errors++;}}}if(data311.maxResumes !== undefined){let data314 = data311.maxResumes;if(!(((typeof data314 == "number") && (!(data314 % 1) && !isNaN(data314))) && (isFinite(data314)))){const err589 = {instancePath:instancePath+"/delivery/ci/watch/maxResumes",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxResumes/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err589];}else {vErrors.push(err589);}errors++;}if((typeof data314 == "number") && (isFinite(data314))){if(data314 < 0 || isNaN(data314)){const err590 = {instancePath:instancePath+"/delivery/ci/watch/maxResumes",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxResumes/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err590];}else {vErrors.push(err590);}errors++;}}}if(data311.attachWindowMs !== undefined){let data315 = data311.attachWindowMs;if(!(((typeof data315 == "number") && (!(data315 % 1) && !isNaN(data315))) && (isFinite(data315)))){const err591 = {instancePath:instancePath+"/delivery/ci/watch/attachWindowMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/attachWindowMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err591];}else {vErrors.push(err591);}errors++;}if((typeof data315 == "number") && (isFinite(data315))){if(data315 < 1 || isNaN(data315)){const err592 = {instancePath:instancePath+"/delivery/ci/watch/attachWindowMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/attachWindowMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err592];}else {vErrors.push(err592);}errors++;}}}}else {const err593 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err593];}else {vErrors.push(err593);}errors++;}}if(data310.autoMerge !== undefined){let data316 = data310.autoMerge;if(typeof data316 !== "string"){const err594 = {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 = [err594];}else {vErrors.push(err594);}errors++;}if(!((data316 === "trust-ci") || (data316 === "strict"))){const err595 = {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 = [err595];}else {vErrors.push(err595);}errors++;}}if(data310.blockOnAdvisoryFailure !== undefined){if(typeof data310.blockOnAdvisoryFailure !== "boolean"){const err596 = {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 = [err596];}else {vErrors.push(err596);}errors++;}}if(data310.advisoryAllowlist !== undefined){let data318 = data310.advisoryAllowlist;if(Array.isArray(data318)){const len42 = data318.length;for(let i44=0; i44<len42; i44++){if(typeof data318[i44] !== "string"){const err597 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i44,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err597];}else {vErrors.push(err597);}errors++;}}}else {const err598 = {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 = [err598];}else {vErrors.push(err598);}errors++;}}}else {const err599 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err599];}else {vErrors.push(err599);}errors++;}}if(data66.routing !== undefined){let data320 = data66.routing;if(data320 && typeof data320 == "object" && !Array.isArray(data320)){for(const key90 in data320){if(!((((key90 === "roleScopedAgents") || (key90 === "freshCriticSampleRate")) || (key90 === "ceremonyProfile")) || (key90 === "closeAndLand"))){const err600 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key90},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err600];}else {vErrors.push(err600);}errors++;}}if(data320.roleScopedAgents !== undefined){if(typeof data320.roleScopedAgents !== "boolean"){const err601 = {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 = [err601];}else {vErrors.push(err601);}errors++;}}if(data320.freshCriticSampleRate !== undefined){let data322 = data320.freshCriticSampleRate;if((typeof data322 == "number") && (isFinite(data322))){if(data322 > 1 || isNaN(data322)){const err602 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1"};if(vErrors === null){vErrors = [err602];}else {vErrors.push(err602);}errors++;}if(data322 < 0 || isNaN(data322)){const err603 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err603];}else {vErrors.push(err603);}errors++;}}else {const err604 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err604];}else {vErrors.push(err604);}errors++;}}if(data320.ceremonyProfile !== undefined){let data323 = data320.ceremonyProfile;if(typeof data323 !== "string"){const err605 = {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 = [err605];}else {vErrors.push(err605);}errors++;}if(!(((data323 === "minimal") || (data323 === "standard")) || (data323 === "strict"))){const err606 = {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 = [err606];}else {vErrors.push(err606);}errors++;}}if(data320.closeAndLand !== undefined){if(typeof data320.closeAndLand !== "boolean"){const err607 = {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 = [err607];}else {vErrors.push(err607);}errors++;}}}else {const err608 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err608];}else {vErrors.push(err608);}errors++;}}}else {const err609 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err609];}else {vErrors.push(err609);}errors++;}}if(data.qa !== undefined){let data325 = data.qa;if(data325 && typeof data325 == "object" && !Array.isArray(data325)){for(const key91 in data325){if(!(((((((key91 === "featureRoot") || (key91 === "fixturesManifest")) || (key91 === "environments")) || (key91 === "personas")) || (key91 === "gherkinLint")) || (key91 === "consoleAllowlist")) || (key91 === "designTokens"))){const err610 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key91},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err610];}else {vErrors.push(err610);}errors++;}}if(data325.featureRoot !== undefined){let data326 = data325.featureRoot;const _errs818 = errors;const _errs819 = errors;if(typeof data326 === "string"){if(!pattern0.test(data326)){const err611 = {};if(vErrors === null){vErrors = [err611];}else {vErrors.push(err611);}errors++;}}var valid210 = _errs819 === errors;if(valid210){const err612 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err612];}else {vErrors.push(err612);}errors++;}else {errors = _errs818;if(vErrors !== null){if(_errs818){vErrors.length = _errs818;}else {vErrors = null;}}}if(typeof data326 === "string"){if(func2(data326) < 1){const err613 = {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 = [err613];}else {vErrors.push(err613);}errors++;}}else {const err614 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err614];}else {vErrors.push(err614);}errors++;}}if(data325.fixturesManifest !== undefined){let data327 = data325.fixturesManifest;const _errs822 = errors;const _errs823 = errors;if(typeof data327 === "string"){if(!pattern0.test(data327)){const err615 = {};if(vErrors === null){vErrors = [err615];}else {vErrors.push(err615);}errors++;}}var valid211 = _errs823 === errors;if(valid211){const err616 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err616];}else {vErrors.push(err616);}errors++;}else {errors = _errs822;if(vErrors !== null){if(_errs822){vErrors.length = _errs822;}else {vErrors = null;}}}if(typeof data327 === "string"){if(func2(data327) < 1){const err617 = {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 = [err617];}else {vErrors.push(err617);}errors++;}}else {const err618 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err618];}else {vErrors.push(err618);}errors++;}}if(data325.environments !== undefined){let data328 = data325.environments;if(data328 && typeof data328 == "object" && !Array.isArray(data328)){if(Object.keys(data328).length < 1){const err619 = {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 = [err619];}else {vErrors.push(err619);}errors++;}for(const key92 in data328){let data329 = data328[key92];if(data329 && typeof data329 == "object" && !Array.isArray(data329)){if(data329.baseUrl === undefined){const err620 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err620];}else {vErrors.push(err620);}errors++;}for(const key93 in data329){if(!(((key93 === "baseUrl") || (key93 === "signInSeam")) || (key93 === "allowWrites"))){const err621 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key93},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err621];}else {vErrors.push(err621);}errors++;}}if(data329.baseUrl !== undefined){let data330 = data329.baseUrl;const _errs832 = errors;const _errs833 = errors;if(typeof data330 === "string"){if(!pattern0.test(data330)){const err622 = {};if(vErrors === null){vErrors = [err622];}else {vErrors.push(err622);}errors++;}}var valid214 = _errs833 === errors;if(valid214){const err623 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err623];}else {vErrors.push(err623);}errors++;}else {errors = _errs832;if(vErrors !== null){if(_errs832){vErrors.length = _errs832;}else {vErrors = null;}}}if(typeof data330 === "string"){if(func2(data330) < 1){const err624 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err624];}else {vErrors.push(err624);}errors++;}}else {const err625 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err625];}else {vErrors.push(err625);}errors++;}}if(data329.signInSeam !== undefined){let data331 = data329.signInSeam;const _errs835 = errors;let valid215 = false;let passing5 = null;const _errs836 = errors;if(data331 && typeof data331 == "object" && !Array.isArray(data331)){if(data331.urlTemplate === undefined){const err626 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err626];}else {vErrors.push(err626);}errors++;}for(const key94 in data331){if(!(key94 === "urlTemplate")){const err627 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key94},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err627];}else {vErrors.push(err627);}errors++;}}if(data331.urlTemplate !== undefined){let data332 = data331.urlTemplate;const _errs841 = errors;const _errs842 = errors;if(typeof data332 === "string"){if(!pattern0.test(data332)){const err628 = {};if(vErrors === null){vErrors = [err628];}else {vErrors.push(err628);}errors++;}}var valid217 = _errs842 === errors;if(valid217){const err629 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err629];}else {vErrors.push(err629);}errors++;}else {errors = _errs841;if(vErrors !== null){if(_errs841){vErrors.length = _errs841;}else {vErrors = null;}}}if(typeof data332 === "string"){if(func2(data332) < 1){const err630 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err630];}else {vErrors.push(err630);}errors++;}}else {const err631 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err631];}else {vErrors.push(err631);}errors++;}}}else {const err632 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err632];}else {vErrors.push(err632);}errors++;}var _valid6 = _errs836 === errors;if(_valid6){valid215 = true;passing5 = 0;}const _errs843 = errors;if(data331 && typeof data331 == "object" && !Array.isArray(data331)){if(data331.skill === undefined){const err633 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err633];}else {vErrors.push(err633);}errors++;}for(const key95 in data331){if(!(key95 === "skill")){const err634 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key95},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err634];}else {vErrors.push(err634);}errors++;}}if(data331.skill !== undefined){let data333 = data331.skill;const _errs848 = errors;const _errs849 = errors;if(typeof data333 === "string"){if(!pattern0.test(data333)){const err635 = {};if(vErrors === null){vErrors = [err635];}else {vErrors.push(err635);}errors++;}}var valid219 = _errs849 === errors;if(valid219){const err636 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err636];}else {vErrors.push(err636);}errors++;}else {errors = _errs848;if(vErrors !== null){if(_errs848){vErrors.length = _errs848;}else {vErrors = null;}}}if(typeof data333 === "string"){if(func2(data333) < 1){const err637 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err637];}else {vErrors.push(err637);}errors++;}}else {const err638 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err638];}else {vErrors.push(err638);}errors++;}}}else {const err639 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err639];}else {vErrors.push(err639);}errors++;}var _valid6 = _errs843 === errors;if(_valid6 && valid215){valid215 = false;passing5 = [passing5, 1];}else {if(_valid6){valid215 = true;passing5 = 1;}}if(!valid215){const err640 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err640];}else {vErrors.push(err640);}errors++;}else {errors = _errs835;if(vErrors !== null){if(_errs835){vErrors.length = _errs835;}else {vErrors = null;}}}}if(data329.allowWrites !== undefined){if(typeof data329.allowWrites !== "boolean"){const err641 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err641];}else {vErrors.push(err641);}errors++;}}}else {const err642 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err642];}else {vErrors.push(err642);}errors++;}}}else {const err643 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err643];}else {vErrors.push(err643);}errors++;}}if(data325.personas !== undefined){let data335 = data325.personas;const _errs853 = errors;let valid220 = false;let passing6 = null;const _errs854 = errors;if(Array.isArray(data335)){if(data335.length < 1){const err644 = {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 = [err644];}else {vErrors.push(err644);}errors++;}const len43 = data335.length;for(let i45=0; i45<len43; i45++){let data336 = data335[i45];const _errs858 = errors;const _errs859 = errors;if(typeof data336 === "string"){if(!pattern0.test(data336)){const err645 = {};if(vErrors === null){vErrors = [err645];}else {vErrors.push(err645);}errors++;}}var valid223 = _errs859 === errors;if(valid223){const err646 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err646];}else {vErrors.push(err646);}errors++;}else {errors = _errs858;if(vErrors !== null){if(_errs858){vErrors.length = _errs858;}else {vErrors = null;}}}if(typeof data336 === "string"){if(func2(data336) < 1){const err647 = {instancePath:instancePath+"/qa/personas/" + i45,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 = [err647];}else {vErrors.push(err647);}errors++;}}else {const err648 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err648];}else {vErrors.push(err648);}errors++;}}}else {const err649 = {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 = [err649];}else {vErrors.push(err649);}errors++;}var _valid7 = _errs854 === errors;if(_valid7){valid220 = true;passing6 = 0;}const _errs860 = errors;if(data335 && typeof data335 == "object" && !Array.isArray(data335)){if(Object.keys(data335).length < 1){const err650 = {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 = [err650];}else {vErrors.push(err650);}errors++;}for(const key96 in data335){let data337 = data335[key96];const _errs864 = errors;let valid225 = false;let passing7 = null;const _errs865 = errors;if(data337 && typeof data337 == "object" && !Array.isArray(data337)){if(data337.credentialRef === undefined){const err651 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err651];}else {vErrors.push(err651);}errors++;}for(const key97 in data337){if(!(key97 === "credentialRef")){const err652 = {instancePath:instancePath+"/qa/personas/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key97},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err652];}else {vErrors.push(err652);}errors++;}}if(data337.credentialRef !== undefined){let data338 = data337.credentialRef;const _errs870 = errors;const _errs871 = errors;if(typeof data338 === "string"){if(!pattern0.test(data338)){const err653 = {};if(vErrors === null){vErrors = [err653];}else {vErrors.push(err653);}errors++;}}var valid227 = _errs871 === errors;if(valid227){const err654 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err654];}else {vErrors.push(err654);}errors++;}else {errors = _errs870;if(vErrors !== null){if(_errs870){vErrors.length = _errs870;}else {vErrors = null;}}}if(typeof data338 === "string"){if(func2(data338) < 1){const err655 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err655];}else {vErrors.push(err655);}errors++;}}else {const err656 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err656];}else {vErrors.push(err656);}errors++;}}}else {const err657 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err657];}else {vErrors.push(err657);}errors++;}var _valid8 = _errs865 === errors;if(_valid8){valid225 = true;passing7 = 0;}const _errs872 = errors;if(data337 && typeof data337 == "object" && !Array.isArray(data337)){if(data337.signInSkill === undefined){const err658 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err658];}else {vErrors.push(err658);}errors++;}for(const key98 in data337){if(!(key98 === "signInSkill")){const err659 = {instancePath:instancePath+"/qa/personas/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key98},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err659];}else {vErrors.push(err659);}errors++;}}if(data337.signInSkill !== undefined){let data339 = data337.signInSkill;const _errs877 = errors;const _errs878 = errors;if(typeof data339 === "string"){if(!pattern0.test(data339)){const err660 = {};if(vErrors === null){vErrors = [err660];}else {vErrors.push(err660);}errors++;}}var valid229 = _errs878 === errors;if(valid229){const err661 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err661];}else {vErrors.push(err661);}errors++;}else {errors = _errs877;if(vErrors !== null){if(_errs877){vErrors.length = _errs877;}else {vErrors = null;}}}if(typeof data339 === "string"){if(func2(data339) < 1){const err662 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err662];}else {vErrors.push(err662);}errors++;}}else {const err663 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err663];}else {vErrors.push(err663);}errors++;}}}else {const err664 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err664];}else {vErrors.push(err664);}errors++;}var _valid8 = _errs872 === errors;if(_valid8 && valid225){valid225 = false;passing7 = [passing7, 1];}else {if(_valid8){valid225 = true;passing7 = 1;}}if(!valid225){const err665 = {instancePath:instancePath+"/qa/personas/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing7},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err665];}else {vErrors.push(err665);}errors++;}else {errors = _errs864;if(vErrors !== null){if(_errs864){vErrors.length = _errs864;}else {vErrors = null;}}}}}else {const err666 = {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 = [err666];}else {vErrors.push(err666);}errors++;}var _valid7 = _errs860 === errors;if(_valid7 && valid220){valid220 = false;passing6 = [passing6, 1];}else {if(_valid7){valid220 = true;passing6 = 1;}}if(!valid220){const err667 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing6},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err667];}else {vErrors.push(err667);}errors++;}else {errors = _errs853;if(vErrors !== null){if(_errs853){vErrors.length = _errs853;}else {vErrors = null;}}}}if(data325.gherkinLint !== undefined){let data340 = data325.gherkinLint;if(data340 && typeof data340 == "object" && !Array.isArray(data340)){if(data340.scopes === undefined){const err668 = {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 = [err668];}else {vErrors.push(err668);}errors++;}for(const key99 in data340){if(!(((key99 === "scopes") || (key99 === "exemptionTags")) || (key99 === "stepWaivers"))){const err669 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key99},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err669];}else {vErrors.push(err669);}errors++;}}if(data340.scopes !== undefined){let data341 = data340.scopes;if(data341 && typeof data341 == "object" && !Array.isArray(data341)){if(Object.keys(data341).length < 1){const err670 = {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 = [err670];}else {vErrors.push(err670);}errors++;}for(const key100 in data341){let data342 = data341[key100];if(data342 && typeof data342 == "object" && !Array.isArray(data342)){if(data342.featureRoots === undefined){const err671 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err671];}else {vErrors.push(err671);}errors++;}if(data342.stepRoots === undefined){const err672 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err672];}else {vErrors.push(err672);}errors++;}for(const key101 in data342){if(!((key101 === "featureRoots") || (key101 === "stepRoots"))){const err673 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key101},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err673];}else {vErrors.push(err673);}errors++;}}if(data342.featureRoots !== undefined){let data343 = data342.featureRoots;if(Array.isArray(data343)){if(data343.length < 1){const err674 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err674];}else {vErrors.push(err674);}errors++;}const len44 = data343.length;for(let i46=0; i46<len44; i46++){let data344 = data343[i46];const _errs892 = errors;const _errs893 = errors;if(typeof data344 === "string"){if(!pattern0.test(data344)){const err675 = {};if(vErrors === null){vErrors = [err675];}else {vErrors.push(err675);}errors++;}}var valid235 = _errs893 === errors;if(valid235){const err676 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err676];}else {vErrors.push(err676);}errors++;}else {errors = _errs892;if(vErrors !== null){if(_errs892){vErrors.length = _errs892;}else {vErrors = null;}}}if(typeof data344 === "string"){if(func2(data344) < 1){const err677 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,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 = [err677];}else {vErrors.push(err677);}errors++;}}else {const err678 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,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 = [err678];}else {vErrors.push(err678);}errors++;}}}else {const err679 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err679];}else {vErrors.push(err679);}errors++;}}if(data342.stepRoots !== undefined){let data345 = data342.stepRoots;if(Array.isArray(data345)){if(data345.length < 1){const err680 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err680];}else {vErrors.push(err680);}errors++;}const len45 = data345.length;for(let i47=0; i47<len45; i47++){let data346 = data345[i47];const _errs898 = errors;const _errs899 = errors;if(typeof data346 === "string"){if(!pattern0.test(data346)){const err681 = {};if(vErrors === null){vErrors = [err681];}else {vErrors.push(err681);}errors++;}}var valid238 = _errs899 === errors;if(valid238){const err682 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err682];}else {vErrors.push(err682);}errors++;}else {errors = _errs898;if(vErrors !== null){if(_errs898){vErrors.length = _errs898;}else {vErrors = null;}}}if(typeof data346 === "string"){if(func2(data346) < 1){const err683 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,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 = [err683];}else {vErrors.push(err683);}errors++;}}else {const err684 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,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 = [err684];}else {vErrors.push(err684);}errors++;}}}else {const err685 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err685];}else {vErrors.push(err685);}errors++;}}}else {const err686 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err686];}else {vErrors.push(err686);}errors++;}}}else {const err687 = {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 = [err687];}else {vErrors.push(err687);}errors++;}}if(data340.exemptionTags !== undefined){let data347 = data340.exemptionTags;if(Array.isArray(data347)){const len46 = data347.length;for(let i48=0; i48<len46; i48++){let data348 = data347[i48];const _errs904 = errors;const _errs905 = errors;if(typeof data348 === "string"){if(!pattern0.test(data348)){const err688 = {};if(vErrors === null){vErrors = [err688];}else {vErrors.push(err688);}errors++;}}var valid241 = _errs905 === errors;if(valid241){const err689 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err689];}else {vErrors.push(err689);}errors++;}else {errors = _errs904;if(vErrors !== null){if(_errs904){vErrors.length = _errs904;}else {vErrors = null;}}}if(typeof data348 === "string"){if(func2(data348) < 1){const err690 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,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 = [err690];}else {vErrors.push(err690);}errors++;}}else {const err691 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err691];}else {vErrors.push(err691);}errors++;}}}else {const err692 = {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 = [err692];}else {vErrors.push(err692);}errors++;}}if(data340.stepWaivers !== undefined){let data349 = data340.stepWaivers;if(Array.isArray(data349)){const len47 = data349.length;for(let i49=0; i49<len47; i49++){let data350 = data349[i49];if(typeof data350 === "string"){if(func2(data350) < 1){const err693 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,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 = [err693];}else {vErrors.push(err693);}errors++;}}else {const err694 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err694];}else {vErrors.push(err694);}errors++;}}}else {const err695 = {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 = [err695];}else {vErrors.push(err695);}errors++;}}}else {const err696 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err696];}else {vErrors.push(err696);}errors++;}}if(data325.consoleAllowlist !== undefined){let data351 = data325.consoleAllowlist;if(Array.isArray(data351)){const len48 = data351.length;for(let i50=0; i50<len48; i50++){let data352 = data351[i50];const _errs914 = errors;const _errs915 = errors;if(typeof data352 === "string"){if(!pattern0.test(data352)){const err697 = {};if(vErrors === null){vErrors = [err697];}else {vErrors.push(err697);}errors++;}}var valid246 = _errs915 === errors;if(valid246){const err698 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err698];}else {vErrors.push(err698);}errors++;}else {errors = _errs914;if(vErrors !== null){if(_errs914){vErrors.length = _errs914;}else {vErrors = null;}}}if(typeof data352 === "string"){if(func2(data352) < 1){const err699 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err699];}else {vErrors.push(err699);}errors++;}}else {const err700 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err700];}else {vErrors.push(err700);}errors++;}}}else {const err701 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err701];}else {vErrors.push(err701);}errors++;}}if(data325.designTokens !== undefined){let data353 = data325.designTokens;const _errs918 = errors;const _errs919 = errors;if(typeof data353 === "string"){if(!pattern0.test(data353)){const err702 = {};if(vErrors === null){vErrors = [err702];}else {vErrors.push(err702);}errors++;}}var valid247 = _errs919 === errors;if(valid247){const err703 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err703];}else {vErrors.push(err703);}errors++;}else {errors = _errs918;if(vErrors !== null){if(_errs918){vErrors.length = _errs918;}else {vErrors = null;}}}if(typeof data353 === "string"){if(func2(data353) < 1){const err704 = {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 = [err704];}else {vErrors.push(err704);}errors++;}}else {const err705 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err705];}else {vErrors.push(err705);}errors++;}}}else {const err706 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err706];}else {vErrors.push(err706);}errors++;}}}else {const err707 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err707];}else {vErrors.push(err707);}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},"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]"},"defaultTimeoutMs":{"type":"integer","minimum":1000,"description":"Default `timeoutMs` applied to every `gh` subprocess the provider facade spawns, so a stalled socket or long-poll cannot hang an orchestration indefinitely. A `GhExecTimeoutError` from a hit ceiling is classified `transient` and retried by `withTransientRetry`. Story #2860.","default":60000},"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`: risk escalation heuristics, ceremony-lite routing, and the cross-Story conflict-finding severity gates.","properties":{"riskHeuristics":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Prose heuristics the planner escalates a Story against. A plain array replaces the framework list; the `{ append, prepend }` extender form deep-merges with it.","default":["Destructive or irreversible data mutations (dropping tables, deleting rows without soft-delete or backup, truncating production state).","Modifications to shared security or auth infrastructure (IAM policies, auth middleware, session or token handling, secret rotation).","Changes to CI/CD, deployment pipelines, or release gating that could disable safety checks or ship unverified code to production.","Monorepo-wide AST or text replacements touching overlapping files in parallel (catastrophic merge-conflict risk across concurrent agents).","Schema migrations that rewrite existing rows or drop columns without a backfill or rollback plan."]},"complexityGate":{"type":"object","description":"Shape-derived ceremony-lite complexity routing. A lite claim is validated against the authored Story shape at persist and re-derived from the Story body at dispatch; conservative (full on any doubt). Never relaxes the Story-ticket / PR-to-main / repo-gates / security-baseline non-negotiables.","properties":{"enabled":{"type":"boolean","description":"Master switch. When false, lite routing is disabled everywhere: persist refuses lite claims and dispatch always takes the sub-agent path. Default true."},"maxArtifacts":{"type":"integer","minimum":0,"description":"Enumerated-artifact threshold reported by the plan-context complexity signals. An input signal for the planner verdict — carries no routing authority. Default 1."}},"additionalProperties":false},"failOnSharedEditors":{"type":"boolean","description":"When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).","default":false},"requireExplicitCrossStoryDeps":{"type":"boolean","description":"When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only).","default":false},"crossCuttingRegistries":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted.","default":["lib/orchestration/lifecycle/listeners/index.js","**/listeners/index.js","**/handlers/index.js"]},"failOnRegistryConflicts":{"type":"boolean","description":"When true, upgrade cross-cutting registry conflict findings to hard errors (default false).","default":false},"failOnLargeFanOut":{"type":"boolean","description":"When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory).","default":false},"largeFanOutThreshold":{"type":"integer","minimum":0,"description":"Call-site count above which a Story that deletes a module emits a fan-out-warning. Counts base-branch references to the deleted path basename. Soft by default; does not size or reject Stories. Default 10.","default":10},"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: execution timeouts, worktree isolation, runner concurrency, docs freshness, signals, quality gates, merge/CI watch, review ceremony, and the feedback loop.","properties":{"execution":{"type":"object","description":"Wall-clock bounds on the subprocesses delivery spawns.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Per-command timeout (ms) for the long-running spawns delivery drives — the close-validation chain and the gate CLIs.","default":600000},"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},"staleDays":{"type":"integer","minimum":1,"description":"Age floor (days, default 7) for the families no Story id can be recovered from — roster-level audit reports and abandoned plan-<slug>/ dirs. Story-keyed artifacts do not wait for it: they are purged as soon as their merge is confirmed.","default":7},"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"]}}]},"signals":{"type":"object","description":"Detector thresholds for the surviving performance-signal categories. Each block is shallow-merged by the resolver.","properties":{"rework":{"type":"object","description":"Rework detector — repeated edits to one file in a run.","properties":{"editsPerFile":{"type":"integer","minimum":1,"description":"Edits to a single file within one run that trip the rework signal.","default":5}},"additionalProperties":false},"retry":{"type":"object","description":"Retry detector — the same command failing repeatedly.","properties":{"repeatCount":{"type":"integer","minimum":1,"description":"Repeats of an identical failing command that trip the retry signal.","default":3}},"additionalProperties":false}},"additionalProperties":false},"quality":{"type":"object","description":"Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base; shared scoping lives at this block root.","properties":{"gateScoping":{"type":"object","description":"Shared scope applied to every gate that supports one, unless the gate overrides it.","properties":{"scope":{"type":"string","enum":["diff","full"],"description":"Score only the files changed against `diffRef` (`diff`) or every file in the gate target dirs (`full`).","default":"diff"},"diffRef":{"type":"string","minLength":1,"description":"Git ref the `diff` scope is computed against.","default":"main"}},"additionalProperties":false},"gates":{"type":"object","description":"The eight quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"lint":{"type":"object","description":"Lint-count ratchet. Floors are absolute error/warning counts; the baseline pins the current count so a regression is visible even while the floor is not yet met.","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/lint.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":{"*":{"errorCount":0}}},"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},"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"},"timeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for the `npm run test:coverage` capture spawn. A SIGKILL at the budget boundary maps to exit 124 so close-validation can tell a hang from a test 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%."},"friction":{"type":"object","description":"Friction-signal wiring for a CRAP baseline regression, so a recurring one can reach the actionable threshold.","properties":{"markerKey":{"type":"string","minLength":1,"description":"Signal marker key the regression is recorded under."}},"additionalProperties":false,"default":{"markerKey":"crap-baseline-regression"}},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate CRAP baseline refresh in the compared range. A range commit carrying it that also touches the baseline file demotes head-vs-base regressions; floors stay enforced.","default":"baseline-refresh:"},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run crap:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"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},"enabled":{"type":"boolean","description":"DEPRECATED alias for setting both `skipWhenUnchanged` and `baselineJoin`. Prefer the two switches: they are not equally safe, and bundling them is why the earlier default flip was reverted. Either explicit switch overrides this alias."},"baseRef":{"type":"string","minLength":1,"description":"Git ref the changed-file set is computed against. Omitted falls back to the gate’s own `--ref` (`main`)."}},"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":[]},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate maintainability baseline refresh in the compared range. Mirrors the CRAP gate's `refreshTag`; a range commit carrying it that touches the baseline file demotes head-vs-base regressions (floors still enforced)."},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run maintainability:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"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}}},"strykerConfigPath":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Repo-relative path to the Stryker config. `null` lets Stryker resolve its own default.","default":null}},"additionalProperties":false},"lighthouse":{"type":"object","description":"Lighthouse category-score ratchet for web targets. Off by default — it needs a running deployment.","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/lighthouse.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":{"*":{"performance":0,"accessibility":0,"bestPractices":0,"seo":0}}},"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}}},"baseUrl":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Origin the routes are resolved against. `null` leaves the gate unusable, which is why it ships disabled.","default":null},"routes":{"type":"array","items":{"type":"object","description":"One route the Lighthouse run scores.","required":["path"],"properties":{"path":{"type":"string","minLength":1,"description":"Route path appended to `baseUrl`."},"formFactor":{"type":"string","enum":["mobile","desktop"],"description":"Emulated form factor for this route."}},"additionalProperties":false},"description":"Routes to score on each run.","default":[]}},"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, a bounded refresh timeout mirroring crap/MI, 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"]},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run duplication:update` spawned by the baseline-attribution refresh path. Mirrors `crap.refreshTimeoutMs` / `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124. Default 60000 (Story #3664).","default":60000},"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},"formatAutofix":{"type":"object","description":"Bounded-timeout knob for the close-time `npx biome format --write` spawn (Story #2165). A SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked` with a friction comment.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Timeout (ms) for the format-write spawn.","default":60000}},"additionalProperties":false},"codingGuardrails":{"type":"object","description":"Authoring-time cyclomatic-complexity advisories surfaced by the quality-preview pre-commit gate.","properties":{"cyclomaticFlag":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method is flagged for a refactor look.","default":8},"cyclomaticMustFix":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method must be decomposed before the diff closes.","default":12},"requireSiblingTest":{"type":"boolean","description":"When true, a new source file with no colocated sibling test is reported by the guardrails pass.","default":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.","properties":{"enabled":{"type":"boolean","description":"Master switch for the auto-refresh path. When false, every baseline refresh is a deliberate operator action.","default":true},"crapJumpCap":{"type":"number","minimum":0,"description":"Largest single-row CRAP jump the auto-refresh will absorb. A larger jump is reported as a regression rather than rewritten.","default":5},"scope":{"type":"string","enum":["diff","full"],"description":"Whether an auto-refresh rescores only the changed files (`diff`) or every file in the target dirs (`full`).","default":"diff"}},"additionalProperties":false},"baselineEpsilon":{"type":"object","description":"Per-kind epsilon for s-stability-epsilon (Story #1964). Sub-epsilon row deltas resolve to prior bytes so env variance does not rewrite the on-disk baseline.","properties":{"maintainability":{"type":"number","minimum":0,"default":0.5},"crap":{"type":"number","minimum":0,"default":0.5},"coverage":{"type":"number","minimum":0,"default":0.1},"mutation":{"type":"number","minimum":0,"default":0.5},"lint":{"type":"number","minimum":0,"default":0},"lighthouse":{"type":"number","minimum":0,"default":1},"bundle-size":{"type":"number","minimum":0,"default":1024},"duplication":{"type":"number","minimum":0,"default":0.5}},"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; defaults in `lib/orchestration/merge-poll.js`). `mode` (Story #4698) selects the close-time merge posture. `intervalSeconds` is the poll cadence between `gh pr view` probes after the arm. `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. `updateAttempts` caps the bounded update of a behind-the-base PR.","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."},"intervalSeconds":{"type":"integer","minimum":1,"description":"Seconds between merge-wait polls. Default 30.","default":30},"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},"updateAttempts":{"type":"integer","minimum":0,"description":"Maximum times the merge wait will bring a behind-the-base PR up to date before giving up on the branch. Default 3. Set 0 to disable the update."}},"additionalProperties":false},"codeReview":{"type":"object","description":"Review-provider chain plus bounded-retry knobs for the /mandrel-deliver code-review ceremony.","properties":{"providers":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","enum":["native","codex","security-review","ultrareview"],"description":"Registered provider key. Inline: native, 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, defaults to [{ name: \"native\" }]. 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":"security-review","scopes":["story"],"optional":true},{"name":"ultrareview","scopes":["story"],"manualPrompt":true,"when":{"label":"risk::high"}}]},"providerConfig":{"type":"object","additionalProperties":true,"description":"Optional escape hatch for adapter-specific configuration. No documented keys in Epic #2815; reserved so future adapters can be configured without another schema migration."},"maxFixAttempts":{"type":"integer","minimum":0,"description":"Maximum auto-fix retry attempts per finding in /mandrel-deliver Phase 5 (code-review). 0 disables auto-fix. Default 3.","default":3},"maxFixScopeFiles":{"type":"integer","minimum":1,"description":"Maximum file count a single auto-fix may modify before escalating to agent::blocked. Default 5.","default":5},"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},"review":{"type":"object","description":"Close-scope review tuning (Story #4699). Governs the Story-scope local-lens pass that runs inside the close subprocess; the maker-blind code-review pass and all hard gates are unaffected.","properties":{"lensDiffFloor":{"type":"integer","minimum":0,"description":"Changed-line floor for the close-scope lens walk (Story #4699). A diff strictly below this many changed lines (additions + deletions) with zero sensitive-path hits skips lens materialization and records the skip in the findings-yield ledger. Default 40; 0 disables the skip. Hard gates and the maker-blind code-review pass are unaffected."}},"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, then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the loop is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":1,"description":"Maximum number of redraft rounds before escalation. Default 2; clamped into [1, hard ceiling] by lib/config/acceptance-eval.js so the cap can never be disabled (maxRounds: 0 clamps up to 1).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-out toggles for the close-time auto-file graduators. All default to auto-filing on.","properties":{"auditResultsAutoFile":{"type":"boolean","description":"When true (default), the close-time audit-results graduator auto-files non-blocking audit-results findings as follow-up issues routed by source classification. Set to false to suppress auto-filing; findings remain accessible in the structured comments on the Story.","default":true},"retroProposals":{"type":"boolean","description":"When true (default), 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. Set to false to fall back to the command stanzas.","default":true},"frictionWindowDays":{"type":"integer","minimum":1,"description":"How many days back the run-scope friction recurrence window reaches (Story #4850). The window spans every surviving per-Story signal stream rather than the triggering run's own Stories, so that a defect firing once per Story can reach the actionable threshold; this bounds it by age so a defect fixed weeks ago stops re-routing. Rows older than the bound — and rows carrying no readable timestamp — are excluded and counted on the roll-up step result. Default 30."}},"additionalProperties":false},"auditToStories":{"type":"object","description":"Knobs for the `/audit-to-stories` unattended (`--auto`) sweep (Story #4626).","properties":{"severityFloor":{"type":"string","enum":["critical","high","medium","low","all"],"description":"Minimum severity a finding must meet to be proposed as a Story on an unattended `/audit-to-stories --auto` sweep (Story #4626). Default high."},"autoComment":{"type":"boolean","description":"When true (default), `/audit-to-stories --auto` posts a re-detected comment on an already-open matched Issue instead of silently skipping it."}},"additionalProperties":false},"ci":{"type":"object","description":"CI-aware delivery namespace (Story #4356, Epic #4355): the merge/CI watch poll loop and the merge posture.","properties":{"watch":{"type":"object","description":"Story #4356 (Epic #4355). Poll-loop tuning for the merge/CI watch. pollIntervalMs is the cadence between check probes; maxPolls caps total probes before the watcher gives up; maxResumes caps how many times the watcher may resume after a transient stall; attachWindowMs bounds the wait for a required context to attach at all.","properties":{"pollIntervalMs":{"type":"integer","minimum":1,"description":"Milliseconds between check probes.","default":10000},"maxPolls":{"type":"integer","minimum":1,"description":"Total probes before the watcher gives up on one invocation.","default":180},"maxResumes":{"type":"integer","minimum":0,"description":"How many times the watcher may resume after a transient stall. 0 disables resuming.","default":3},"attachWindowMs":{"type":"integer","minimum":1,"description":"Story #4890. How long (ms) the watch keeps re-resolving an EMPTY `gh pr checks --required` set before it stops waiting for a required context to attach. A ruleset attaches its contexts asynchronously and the arrival latency is set by the slowest one, so a required context that is an aggregator job gated on every other tier is the last to appear — measured at 16m52s on this repository. Default 1200000 (20 minutes). Raise it for a repository whose contexts arrive later still; exhausting the window is never reported as a red check (the watch exits 2, not-yet-started).","default":1200000}},"additionalProperties":false},"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":[]}},"additionalProperties":false},"routing":{"type":"object","description":"v2 delivery-spawn routing: role-scoped boot contexts and maker-checker sampling. The v1 singleDelivery epic-route kill-switch was removed in Stage 6.","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 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},"freshCriticSampleRate":{"type":"number","minimum":0,"maximum":1,"description":"Epic #4478 (M7-B, Part 2). Maker-checker sampling floor. Under the standard profile, a change set touching no sensitive path routes its acceptance clusters down the contract-identical inline critic path, but this fraction of them is still forced through a fresh-context critic so a low derived level never means zero independent checking. Clamped to [0, 1]; 0 disables the floor, 1 forces every cluster fresh. Consumed by resolveCeremonyForRisk (lib/orchestration/ceremony-routing.js).","default":0.2},"ceremonyProfile":{"type":"string","enum":["minimal","standard","strict"],"description":"Acceptance-ceremony depth. minimal = always inline critic; strict = always fresh-context critic; standard (default) = routed off the change level derived from the Story diff, with the maker-checker sampling floor.","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}},"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 pattern8 = new RegExp("^@.+", "u");const func2 = require("ajv/dist/runtime/ucs2length").default;const func9 = 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 === "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.formatCheck !== undefined){let data12 = data9.formatCheck;const _errs44 = errors;const _errs45 = errors;if(typeof data12 === "string"){if(!pattern0.test(data12)){const err37 = {};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}}var valid12 = _errs45 === errors;if(valid12){const err38 = {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 = [err38];}else {vErrors.push(err38);}errors++;}else {errors = _errs44;if(vErrors !== null){if(_errs44){vErrors.length = _errs44;}else {vErrors = null;}}}if(typeof data12 === "string"){if(func2(data12) < 1){const err39 = {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 = [err39];}else {vErrors.push(err39);}errors++;}}else {const err40 = {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 = [err40];}else {vErrors.push(err40);}errors++;}}if(data9.formatWrite !== undefined){let data13 = data9.formatWrite;const _errs48 = errors;const _errs49 = errors;if(typeof data13 === "string"){if(!pattern0.test(data13)){const err41 = {};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}var valid13 = _errs49 === errors;if(valid13){const err42 = {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 = [err42];}else {vErrors.push(err42);}errors++;}else {errors = _errs48;if(vErrors !== null){if(_errs48){vErrors.length = _errs48;}else {vErrors = null;}}}if(typeof data13 === "string"){if(func2(data13) < 1){const err43 = {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 = [err43];}else {vErrors.push(err43);}errors++;}}else {const err44 = {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 = [err44];}else {vErrors.push(err44);}errors++;}}}else {const err45 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}}else {const err46 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}if(data.github !== undefined){let data14 = data.github;if(data14 && typeof data14 == "object" && !Array.isArray(data14)){if(data14.owner === undefined){const err47 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "owner"},message:"must have required property '"+"owner"+"'"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}if(data14.repo === undefined){const err48 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "repo"},message:"must have required property '"+"repo"+"'"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}if(data14.operatorHandle === undefined){const err49 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "operatorHandle"},message:"must have required property '"+"operatorHandle"+"'"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}for(const key4 in data14){if(!(func9.call(schema11.properties.github.properties, key4))){const err50 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key4},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}if(data14.owner !== undefined){let data15 = data14.owner;if(typeof data15 === "string"){if(func2(data15) < 1){const err51 = {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 = [err51];}else {vErrors.push(err51);}errors++;}}else {const err52 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}}if(data14.repo !== undefined){let data16 = data14.repo;if(typeof data16 === "string"){if(func2(data16) < 1){const err53 = {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 = [err53];}else {vErrors.push(err53);}errors++;}}else {const err54 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}}if(data14.projectNumber !== undefined){let data17 = data14.projectNumber;if((!(((typeof data17 == "number") && (!(data17 % 1) && !isNaN(data17))) && (isFinite(data17)))) && (data17 !== null)){const err55 = {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 = [err55];}else {vErrors.push(err55);}errors++;}if((typeof data17 == "number") && (isFinite(data17))){if(data17 < 1 || isNaN(data17)){const err56 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}}}if(data14.projectOwner !== undefined){let data18 = data14.projectOwner;if((typeof data18 !== "string") && (data18 !== null)){const err57 = {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 = [err57];}else {vErrors.push(err57);}errors++;}if(typeof data18 === "string"){if(func2(data18) < 1){const err58 = {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 = [err58];}else {vErrors.push(err58);}errors++;}}}if(data14.operatorHandle !== undefined){let data19 = data14.operatorHandle;if(typeof data19 === "string"){if(!pattern8.test(data19)){const err59 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/pattern",keyword:"pattern",params:{pattern: "^@.+"},message:"must match pattern \""+"^@.+"+"\""};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}else {const err60 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}}if(data14.defaultTimeoutMs !== undefined){let data20 = data14.defaultTimeoutMs;if(!(((typeof data20 == "number") && (!(data20 % 1) && !isNaN(data20))) && (isFinite(data20)))){const err61 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}if((typeof data20 == "number") && (isFinite(data20))){if(data20 < 1000 || isNaN(data20)){const err62 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1000},message:"must be >= 1000"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}}}if(data14.branchProtection !== undefined){let data21 = data14.branchProtection;if(data21 && typeof data21 == "object" && !Array.isArray(data21)){for(const key5 in data21){if(!((key5 === "enforce") || (key5 === "requiredChecks"))){const err63 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}if(data21.enforce !== undefined){if(typeof data21.enforce !== "boolean"){const err64 = {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 = [err64];}else {vErrors.push(err64);}errors++;}}if(data21.requiredChecks !== undefined){let data23 = data21.requiredChecks;if(Array.isArray(data23)){const len1 = data23.length;for(let i1=0; i1<len1; i1++){let data24 = data23[i1];if(data24 && typeof data24 == "object" && !Array.isArray(data24)){if(data24.name === undefined){const err65 = {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 = [err65];}else {vErrors.push(err65);}errors++;}if(data24.cmd === undefined){const err66 = {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 = [err66];}else {vErrors.push(err66);}errors++;}for(const key6 in data24){if(!((key6 === "name") || (key6 === "cmd"))){const err67 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}if(data24.name !== undefined){let data25 = data24.name;if(typeof data25 === "string"){if(func2(data25) < 1){const err68 = {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 = [err68];}else {vErrors.push(err68);}errors++;}}else {const err69 = {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 = [err69];}else {vErrors.push(err69);}errors++;}}if(data24.cmd !== undefined){let data26 = data24.cmd;if(Array.isArray(data26)){if(data26.length < 1){const err70 = {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 = [err70];}else {vErrors.push(err70);}errors++;}const len2 = data26.length;for(let i2=0; i2<len2; i2++){let data27 = data26[i2];if(typeof data27 === "string"){if(func2(data27) < 1){const err71 = {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 = [err71];}else {vErrors.push(err71);}errors++;}}else {const err72 = {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 = [err72];}else {vErrors.push(err72);}errors++;}}}else {const err73 = {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 = [err73];}else {vErrors.push(err73);}errors++;}}}else {const err74 = {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 = [err74];}else {vErrors.push(err74);}errors++;}}}else {const err75 = {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 = [err75];}else {vErrors.push(err75);}errors++;}}}else {const err76 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err76];}else {vErrors.push(err76);}errors++;}}if(data14.mergeMethods !== undefined){let data28 = data14.mergeMethods;if(data28 && typeof data28 == "object" && !Array.isArray(data28)){for(const key7 in data28){if(!(((((key7 === "allow_squash_merge") || (key7 === "allow_rebase_merge")) || (key7 === "allow_merge_commit")) || (key7 === "allow_auto_merge")) || (key7 === "delete_branch_on_merge"))){const err77 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err77];}else {vErrors.push(err77);}errors++;}}if(data28.allow_squash_merge !== undefined){if(typeof data28.allow_squash_merge !== "boolean"){const err78 = {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 = [err78];}else {vErrors.push(err78);}errors++;}}if(data28.allow_rebase_merge !== undefined){if(typeof data28.allow_rebase_merge !== "boolean"){const err79 = {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 = [err79];}else {vErrors.push(err79);}errors++;}}if(data28.allow_merge_commit !== undefined){if(typeof data28.allow_merge_commit !== "boolean"){const err80 = {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 = [err80];}else {vErrors.push(err80);}errors++;}}if(data28.allow_auto_merge !== undefined){if(typeof data28.allow_auto_merge !== "boolean"){const err81 = {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 = [err81];}else {vErrors.push(err81);}errors++;}}if(data28.delete_branch_on_merge !== undefined){if(typeof data28.delete_branch_on_merge !== "boolean"){const err82 = {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 = [err82];}else {vErrors.push(err82);}errors++;}}}else {const err83 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err83];}else {vErrors.push(err83);}errors++;}}if(data14.notifications !== undefined){let data34 = data14.notifications;if(data34 && typeof data34 == "object" && !Array.isArray(data34)){for(const key8 in data34){if(!(((key8 === "mentionOperator") || (key8 === "commentEvents")) || (key8 === "webhookEvents"))){const err84 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err84];}else {vErrors.push(err84);}errors++;}}if(data34.mentionOperator !== undefined){if(typeof data34.mentionOperator !== "boolean"){const err85 = {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 = [err85];}else {vErrors.push(err85);}errors++;}}if(data34.commentEvents !== undefined){let data36 = data34.commentEvents;if(Array.isArray(data36)){const len3 = data36.length;for(let i3=0; i3<len3; i3++){let data37 = data36[i3];if(typeof data37 !== "string"){const err86 = {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 = [err86];}else {vErrors.push(err86);}errors++;}if(!((((data37 === "state-transition") || (data37 === "story-merged")) || (data37 === "story-closing")) || (data37 === "operator-message"))){const err87 = {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 = [err87];}else {vErrors.push(err87);}errors++;}}let i4 = data36.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data36[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err88 = {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 = [err88];}else {vErrors.push(err88);}errors++;break;}indices0[item0] = i4;}}}else {const err89 = {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 = [err89];}else {vErrors.push(err89);}errors++;}}if(data34.webhookEvents !== undefined){let data38 = data34.webhookEvents;if(Array.isArray(data38)){const len4 = data38.length;for(let i5=0; i5<len4; i5++){let data39 = data38[i5];if(typeof data39 !== "string"){const err90 = {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 = [err90];}else {vErrors.push(err90);}errors++;}if(!((((((data39 === "state-transition") || (data39 === "story-merged")) || (data39 === "story-closing")) || (data39 === "operator-message")) || (data39 === "merge.unlanded")) || (data39 === "merge.flip-failed"))){const err91 = {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 = [err91];}else {vErrors.push(err91);}errors++;}}let i6 = data38.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data38[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err92 = {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 = [err92];}else {vErrors.push(err92);}errors++;break;}indices1[item1] = i6;}}}else {const err93 = {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 = [err93];}else {vErrors.push(err93);}errors++;}}}else {const err94 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}}}else {const err95 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}}if(data.planning !== undefined){let data40 = data.planning;if(data40 && typeof data40 == "object" && !Array.isArray(data40)){for(const key9 in data40){if(!(func9.call(schema11.properties.planning.properties, key9))){const err96 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err96];}else {vErrors.push(err96);}errors++;}}if(data40.riskHeuristics !== undefined){let data41 = data40.riskHeuristics;const _errs111 = errors;let valid30 = false;let passing0 = null;const _errs112 = errors;if(Array.isArray(data41)){const len5 = data41.length;for(let i7=0; i7<len5; i7++){if(typeof data41[i7] !== "string"){const err97 = {instancePath:instancePath+"/planning/riskHeuristics/" + i7,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err97];}else {vErrors.push(err97);}errors++;}}}else {const err98 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err98];}else {vErrors.push(err98);}errors++;}var _valid0 = _errs112 === errors;if(_valid0){valid30 = true;passing0 = 0;}const _errs116 = errors;if(data41 && typeof data41 == "object" && !Array.isArray(data41)){for(const key10 in data41){if(!((key10 === "append") || (key10 === "prepend"))){const err99 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}}if(data41.append !== undefined){let data43 = data41.append;if(Array.isArray(data43)){const len6 = data43.length;for(let i8=0; i8<len6; i8++){if(typeof data43[i8] !== "string"){const err100 = {instancePath:instancePath+"/planning/riskHeuristics/append/" + i8,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}}}else {const err101 = {instancePath:instancePath+"/planning/riskHeuristics/append",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err101];}else {vErrors.push(err101);}errors++;}}if(data41.prepend !== undefined){let data45 = data41.prepend;if(Array.isArray(data45)){const len7 = data45.length;for(let i9=0; i9<len7; i9++){if(typeof data45[i9] !== "string"){const err102 = {instancePath:instancePath+"/planning/riskHeuristics/prepend/" + i9,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err102];}else {vErrors.push(err102);}errors++;}}}else {const err103 = {instancePath:instancePath+"/planning/riskHeuristics/prepend",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err103];}else {vErrors.push(err103);}errors++;}}}else {const err104 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err104];}else {vErrors.push(err104);}errors++;}var _valid0 = _errs116 === errors;if(_valid0 && valid30){valid30 = false;passing0 = [passing0, 1];}else {if(_valid0){valid30 = true;passing0 = 1;}}if(!valid30){const err105 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}else {errors = _errs111;if(vErrors !== null){if(_errs111){vErrors.length = _errs111;}else {vErrors = null;}}}}if(data40.complexityGate !== undefined){let data47 = data40.complexityGate;if(data47 && typeof data47 == "object" && !Array.isArray(data47)){for(const key11 in data47){if(!((key11 === "enabled") || (key11 === "maxArtifacts"))){const err106 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data47.enabled !== undefined){if(typeof data47.enabled !== "boolean"){const err107 = {instancePath:instancePath+"/planning/complexityGate/enabled",schemaPath:"#/properties/planning/properties/complexityGate/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}if(data47.maxArtifacts !== undefined){let data49 = data47.maxArtifacts;if(!(((typeof data49 == "number") && (!(data49 % 1) && !isNaN(data49))) && (isFinite(data49)))){const err108 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}if((typeof data49 == "number") && (isFinite(data49))){if(data49 < 0 || isNaN(data49)){const err109 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}}}}else {const err110 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}}if(data40.failOnSharedEditors !== undefined){if(typeof data40.failOnSharedEditors !== "boolean"){const err111 = {instancePath:instancePath+"/planning/failOnSharedEditors",schemaPath:"#/properties/planning/properties/failOnSharedEditors/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}if(data40.requireExplicitCrossStoryDeps !== undefined){if(typeof data40.requireExplicitCrossStoryDeps !== "boolean"){const err112 = {instancePath:instancePath+"/planning/requireExplicitCrossStoryDeps",schemaPath:"#/properties/planning/properties/requireExplicitCrossStoryDeps/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data40.crossCuttingRegistries !== undefined){let data52 = data40.crossCuttingRegistries;const _errs139 = errors;let valid39 = false;let passing1 = null;const _errs140 = errors;if(Array.isArray(data52)){const len8 = data52.length;for(let i10=0; i10<len8; i10++){if(typeof data52[i10] !== "string"){const err113 = {instancePath:instancePath+"/planning/crossCuttingRegistries/" + i10,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}}}else {const err114 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err114];}else {vErrors.push(err114);}errors++;}var _valid1 = _errs140 === errors;if(_valid1){valid39 = true;passing1 = 0;}const _errs144 = errors;if(data52 && typeof data52 == "object" && !Array.isArray(data52)){for(const key12 in data52){if(!((key12 === "append") || (key12 === "prepend"))){const err115 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}if(data52.append !== undefined){let data54 = data52.append;if(Array.isArray(data54)){const len9 = data54.length;for(let i11=0; i11<len9; i11++){if(typeof data54[i11] !== "string"){const err116 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append/" + i11,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err116];}else {vErrors.push(err116);}errors++;}}}else {const err117 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}}if(data52.prepend !== undefined){let data56 = data52.prepend;if(Array.isArray(data56)){const len10 = data56.length;for(let i12=0; i12<len10; i12++){if(typeof data56[i12] !== "string"){const err118 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend/" + i12,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}}else {const err119 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}}}else {const err120 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}var _valid1 = _errs144 === errors;if(_valid1 && valid39){valid39 = false;passing1 = [passing1, 1];}else {if(_valid1){valid39 = true;passing1 = 1;}}if(!valid39){const err121 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err121];}else {vErrors.push(err121);}errors++;}else {errors = _errs139;if(vErrors !== null){if(_errs139){vErrors.length = _errs139;}else {vErrors = null;}}}}if(data40.failOnRegistryConflicts !== undefined){if(typeof data40.failOnRegistryConflicts !== "boolean"){const err122 = {instancePath:instancePath+"/planning/failOnRegistryConflicts",schemaPath:"#/properties/planning/properties/failOnRegistryConflicts/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err122];}else {vErrors.push(err122);}errors++;}}if(data40.failOnLargeFanOut !== undefined){if(typeof data40.failOnLargeFanOut !== "boolean"){const err123 = {instancePath:instancePath+"/planning/failOnLargeFanOut",schemaPath:"#/properties/planning/properties/failOnLargeFanOut/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err123];}else {vErrors.push(err123);}errors++;}}if(data40.largeFanOutThreshold !== undefined){let data60 = data40.largeFanOutThreshold;if(!(((typeof data60 == "number") && (!(data60 % 1) && !isNaN(data60))) && (isFinite(data60)))){const err124 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}if((typeof data60 == "number") && (isFinite(data60))){if(data60 < 0 || isNaN(data60)){const err125 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}}}if(data40.navigation !== undefined){let data61 = data40.navigation;if(data61 && typeof data61 == "object" && !Array.isArray(data61)){for(const key13 in data61){if(!((key13 === "routeGlobs") || (key13 === "navRegistry"))){const err126 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}if(data61.routeGlobs !== undefined){let data62 = data61.routeGlobs;if(Array.isArray(data62)){const len11 = data62.length;for(let i13=0; i13<len11; i13++){if(typeof data62[i13] !== "string"){const err127 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i13,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}}}else {const err128 = {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 = [err128];}else {vErrors.push(err128);}errors++;}}if(data61.navRegistry !== undefined){let data64 = data61.navRegistry;if(Array.isArray(data64)){const len12 = data64.length;for(let i14=0; i14<len12; i14++){if(typeof data64[i14] !== "string"){const err129 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i14,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}}else {const err130 = {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 = [err130];}else {vErrors.push(err130);}errors++;}}}else {const err131 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/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+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}}if(data.delivery !== undefined){let data66 = data.delivery;if(data66 && typeof data66 == "object" && !Array.isArray(data66)){for(const key14 in data66){if(!(func9.call(schema11.properties.delivery.properties, key14))){const err133 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}}if(data66.execution !== undefined){let data67 = data66.execution;if(data67 && typeof data67 == "object" && !Array.isArray(data67)){for(const key15 in data67){if(!((key15 === "timeoutMs") || (key15 === "fullSuiteLock"))){const err134 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err134];}else {vErrors.push(err134);}errors++;}}if(data67.timeoutMs !== undefined){let data68 = data67.timeoutMs;if(!(((typeof data68 == "number") && (!(data68 % 1) && !isNaN(data68))) && (isFinite(data68)))){const err135 = {instancePath:instancePath+"/delivery/execution/timeoutMs",schemaPath:"#/properties/delivery/properties/execution/properties/timeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err135];}else {vErrors.push(err135);}errors++;}if((typeof data68 == "number") && (isFinite(data68))){if(data68 < 1 || isNaN(data68)){const err136 = {instancePath:instancePath+"/delivery/execution/timeoutMs",schemaPath:"#/properties/delivery/properties/execution/properties/timeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err136];}else {vErrors.push(err136);}errors++;}}}if(data67.fullSuiteLock !== undefined){if(typeof data67.fullSuiteLock !== "boolean"){const err137 = {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 = [err137];}else {vErrors.push(err137);}errors++;}}}else {const err138 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err138];}else {vErrors.push(err138);}errors++;}}if(data66.docsFreshness !== undefined){let data70 = data66.docsFreshness;if(data70 && typeof data70 == "object" && !Array.isArray(data70)){for(const key16 in data70){if(!(key16 === "paths")){const err139 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err139];}else {vErrors.push(err139);}errors++;}}if(data70.paths !== undefined){let data71 = data70.paths;if(Array.isArray(data71)){const len13 = data71.length;for(let i15=0; i15<len13; i15++){let data72 = data71[i15];const _errs189 = errors;const _errs190 = errors;if(typeof data72 === "string"){if(!pattern0.test(data72)){const err140 = {};if(vErrors === null){vErrors = [err140];}else {vErrors.push(err140);}errors++;}}var valid57 = _errs190 === errors;if(valid57){const err141 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err141];}else {vErrors.push(err141);}errors++;}else {errors = _errs189;if(vErrors !== null){if(_errs189){vErrors.length = _errs189;}else {vErrors = null;}}}if(typeof data72 === "string"){if(func2(data72) < 1){const err142 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,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 = [err142];}else {vErrors.push(err142);}errors++;}}else {const err143 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err143];}else {vErrors.push(err143);}errors++;}}}else {const err144 = {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 = [err144];}else {vErrors.push(err144);}errors++;}}}else {const err145 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err145];}else {vErrors.push(err145);}errors++;}}if(data66.tempRetention !== undefined){let data73 = data66.tempRetention;if(data73 && typeof data73 == "object" && !Array.isArray(data73)){for(const key17 in data73){if(!(((key17 === "enabled") || (key17 === "staleDays")) || (key17 === "classes"))){const err146 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err146];}else {vErrors.push(err146);}errors++;}}if(data73.enabled !== undefined){if(typeof data73.enabled !== "boolean"){const err147 = {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 = [err147];}else {vErrors.push(err147);}errors++;}}if(data73.staleDays !== undefined){let data75 = data73.staleDays;if(!(((typeof data75 == "number") && (!(data75 % 1) && !isNaN(data75))) && (isFinite(data75)))){const err148 = {instancePath:instancePath+"/delivery/tempRetention/staleDays",schemaPath:"#/properties/delivery/properties/tempRetention/properties/staleDays/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err148];}else {vErrors.push(err148);}errors++;}if((typeof data75 == "number") && (isFinite(data75))){if(data75 < 1 || isNaN(data75)){const err149 = {instancePath:instancePath+"/delivery/tempRetention/staleDays",schemaPath:"#/properties/delivery/properties/tempRetention/properties/staleDays/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err149];}else {vErrors.push(err149);}errors++;}}}if(data73.classes !== undefined){let data76 = data73.classes;if(data76 && typeof data76 == "object" && !Array.isArray(data76)){for(const key18 in data76){if(!((((key18 === "orchestrationLogs") || (key18 === "validationEvidence")) || (key18 === "auditResults")) || (key18 === "planDirs"))){const err150 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err150];}else {vErrors.push(err150);}errors++;}}if(data76.orchestrationLogs !== undefined){if(typeof data76.orchestrationLogs !== "boolean"){const err151 = {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 = [err151];}else {vErrors.push(err151);}errors++;}}if(data76.validationEvidence !== undefined){if(typeof data76.validationEvidence !== "boolean"){const err152 = {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 = [err152];}else {vErrors.push(err152);}errors++;}}if(data76.auditResults !== undefined){if(typeof data76.auditResults !== "boolean"){const err153 = {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 = [err153];}else {vErrors.push(err153);}errors++;}}if(data76.planDirs !== undefined){if(typeof data76.planDirs !== "boolean"){const err154 = {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 = [err154];}else {vErrors.push(err154);}errors++;}}}else {const err155 = {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 = [err155];}else {vErrors.push(err155);}errors++;}}}else {const err156 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err156];}else {vErrors.push(err156);}errors++;}}if(data66.deliverRunner !== undefined){let data81 = data66.deliverRunner;if(data81 && typeof data81 == "object" && !Array.isArray(data81)){for(const key19 in data81){if(!((key19 === "concurrencyCap") || (key19 === "footprintGuard"))){const err157 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err157];}else {vErrors.push(err157);}errors++;}}if(data81.concurrencyCap !== undefined){let data82 = data81.concurrencyCap;if(!(((typeof data82 == "number") && (!(data82 % 1) && !isNaN(data82))) && (isFinite(data82)))){const err158 = {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 = [err158];}else {vErrors.push(err158);}errors++;}if((typeof data82 == "number") && (isFinite(data82))){if(data82 < 1 || isNaN(data82)){const err159 = {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 = [err159];}else {vErrors.push(err159);}errors++;}}}if(data81.footprintGuard !== undefined){let data83 = data81.footprintGuard;if(typeof data83 !== "string"){const err160 = {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 = [err160];}else {vErrors.push(err160);}errors++;}if(!((data83 === "enforce") || (data83 === "advisory"))){const err161 = {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 = [err161];}else {vErrors.push(err161);}errors++;}}}else {const err162 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err162];}else {vErrors.push(err162);}errors++;}}if(data66.worktreeIsolation !== undefined){let data84 = data66.worktreeIsolation;const _errs219 = errors;let valid62 = true;const _errs220 = errors;if(data84 && typeof data84 == "object" && !Array.isArray(data84)){let missing0;if((data84.enabled === undefined) && (missing0 = "enabled")){const err163 = {};if(vErrors === null){vErrors = [err163];}else {vErrors.push(err163);}errors++;}else {if(data84.enabled !== undefined){if(true !== data84.enabled){const err164 = {};if(vErrors === null){vErrors = [err164];}else {vErrors.push(err164);}errors++;}}}}var _valid2 = _errs220 === errors;errors = _errs219;if(vErrors !== null){if(_errs219){vErrors.length = _errs219;}else {vErrors = null;}}if(_valid2){const _errs222 = errors;if(data84 && typeof data84 == "object" && !Array.isArray(data84)){if(data84.root === undefined){const err165 = {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 = [err165];}else {vErrors.push(err165);}errors++;}}var _valid2 = _errs222 === errors;valid62 = _valid2;}if(!valid62){const err166 = {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 = [err166];}else {vErrors.push(err166);}errors++;}if(data84 && typeof data84 == "object" && !Array.isArray(data84)){for(const key20 in data84){if(!(((((((key20 === "enabled") || (key20 === "root")) || (key20 === "nodeModulesStrategy")) || (key20 === "primeFromPath")) || (key20 === "allowSymlinkOnWindows")) || (key20 === "reapOnSuccess")) || (key20 === "bootstrapFiles"))){const err167 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err167];}else {vErrors.push(err167);}errors++;}}if(data84.enabled !== undefined){if(typeof data84.enabled !== "boolean"){const err168 = {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 = [err168];}else {vErrors.push(err168);}errors++;}}if(data84.root !== undefined){let data87 = data84.root;if(typeof data87 === "string"){if(func2(data87) < 1){const err169 = {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 = [err169];}else {vErrors.push(err169);}errors++;}}else {const err170 = {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 = [err170];}else {vErrors.push(err170);}errors++;}}if(data84.nodeModulesStrategy !== undefined){let data88 = data84.nodeModulesStrategy;if(typeof data88 !== "string"){const err171 = {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 = [err171];}else {vErrors.push(err171);}errors++;}if(!((((data88 === "per-worktree") || (data88 === "clone")) || (data88 === "symlink")) || (data88 === "pnpm-store"))){const err172 = {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 = [err172];}else {vErrors.push(err172);}errors++;}}if(data84.primeFromPath !== undefined){let data89 = data84.primeFromPath;if((typeof data89 !== "string") && (data89 !== null)){const err173 = {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 = [err173];}else {vErrors.push(err173);}errors++;}if(typeof data89 === "string"){if(func2(data89) < 1){const err174 = {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 = [err174];}else {vErrors.push(err174);}errors++;}}}if(data84.allowSymlinkOnWindows !== undefined){if(typeof data84.allowSymlinkOnWindows !== "boolean"){const err175 = {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 = [err175];}else {vErrors.push(err175);}errors++;}}if(data84.reapOnSuccess !== undefined){if(typeof data84.reapOnSuccess !== "boolean"){const err176 = {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 = [err176];}else {vErrors.push(err176);}errors++;}}if(data84.bootstrapFiles !== undefined){let data92 = data84.bootstrapFiles;if(Array.isArray(data92)){const len14 = data92.length;for(let i16=0; i16<len14; i16++){let data93 = data92[i16];if(typeof data93 === "string"){if(func2(data93) < 1){const err177 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,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 = [err177];}else {vErrors.push(err177);}errors++;}}else {const err178 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/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/worktreeIsolation/bootstrapFiles",schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/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/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err180];}else {vErrors.push(err180);}errors++;}}if(data66.signals !== undefined){let data94 = data66.signals;if(data94 && typeof data94 == "object" && !Array.isArray(data94)){for(const key21 in data94){if(!((key21 === "rework") || (key21 === "retry"))){const err181 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err181];}else {vErrors.push(err181);}errors++;}}if(data94.rework !== undefined){let data95 = data94.rework;if(data95 && typeof data95 == "object" && !Array.isArray(data95)){for(const key22 in data95){if(!(key22 === "editsPerFile")){const err182 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err182];}else {vErrors.push(err182);}errors++;}}if(data95.editsPerFile !== undefined){let data96 = data95.editsPerFile;if(!(((typeof data96 == "number") && (!(data96 % 1) && !isNaN(data96))) && (isFinite(data96)))){const err183 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err183];}else {vErrors.push(err183);}errors++;}if((typeof data96 == "number") && (isFinite(data96))){if(data96 < 1 || isNaN(data96)){const err184 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err184];}else {vErrors.push(err184);}errors++;}}}}else {const err185 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err185];}else {vErrors.push(err185);}errors++;}}if(data94.retry !== undefined){let data97 = data94.retry;if(data97 && typeof data97 == "object" && !Array.isArray(data97)){for(const key23 in data97){if(!(key23 === "repeatCount")){const err186 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key23},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err186];}else {vErrors.push(err186);}errors++;}}if(data97.repeatCount !== undefined){let data98 = data97.repeatCount;if(!(((typeof data98 == "number") && (!(data98 % 1) && !isNaN(data98))) && (isFinite(data98)))){const err187 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err187];}else {vErrors.push(err187);}errors++;}if((typeof data98 == "number") && (isFinite(data98))){if(data98 < 1 || isNaN(data98)){const err188 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err188];}else {vErrors.push(err188);}errors++;}}}}else {const err189 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err189];}else {vErrors.push(err189);}errors++;}}}else {const err190 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err190];}else {vErrors.push(err190);}errors++;}}if(data66.quality !== undefined){let data99 = data66.quality;if(data99 && typeof data99 == "object" && !Array.isArray(data99)){for(const key24 in data99){if(!((((((((key24 === "gateScoping") || (key24 === "gates")) || (key24 === "formatAutofix")) || (key24 === "codingGuardrails")) || (key24 === "autoRefresh")) || (key24 === "baselineEpsilon")) || (key24 === "requireBaselines")) || (key24 === "navigability"))){const err191 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key24},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err191];}else {vErrors.push(err191);}errors++;}}if(data99.gateScoping !== undefined){let data100 = data99.gateScoping;if(data100 && typeof data100 == "object" && !Array.isArray(data100)){for(const key25 in data100){if(!((key25 === "scope") || (key25 === "diffRef"))){const err192 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key25},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err192];}else {vErrors.push(err192);}errors++;}}if(data100.scope !== undefined){let data101 = data100.scope;if(typeof data101 !== "string"){const err193 = {instancePath:instancePath+"/delivery/quality/gateScoping/scope",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/scope/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err193];}else {vErrors.push(err193);}errors++;}if(!((data101 === "diff") || (data101 === "full"))){const err194 = {instancePath:instancePath+"/delivery/quality/gateScoping/scope",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/scope/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gateScoping.properties.scope.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err194];}else {vErrors.push(err194);}errors++;}}if(data100.diffRef !== undefined){let data102 = data100.diffRef;if(typeof data102 === "string"){if(func2(data102) < 1){const err195 = {instancePath:instancePath+"/delivery/quality/gateScoping/diffRef",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/diffRef/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/gateScoping/diffRef",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/properties/diffRef/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err196];}else {vErrors.push(err196);}errors++;}}}else {const err197 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err197];}else {vErrors.push(err197);}errors++;}}if(data99.gates !== undefined){let data103 = data99.gates;if(data103 && typeof data103 == "object" && !Array.isArray(data103)){for(const key26 in data103){if(!((((((((key26 === "lint") || (key26 === "coverage")) || (key26 === "crap")) || (key26 === "maintainability")) || (key26 === "mutation")) || (key26 === "lighthouse")) || (key26 === "bundle-size")) || (key26 === "duplication"))){const err198 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key26},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}}if(data103.lint !== undefined){let data104 = data103.lint;if(data104 && typeof data104 == "object" && !Array.isArray(data104)){for(const key27 in data104){if(!(((((key27 === "enabled") || (key27 === "baselinePath")) || (key27 === "tolerance")) || (key27 === "floors")) || (key27 === "components"))){const err199 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key27},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err199];}else {vErrors.push(err199);}errors++;}}if(data104.enabled !== undefined){if(typeof data104.enabled !== "boolean"){const err200 = {instancePath:instancePath+"/delivery/quality/gates/lint/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}}if(data104.baselinePath !== undefined){let data106 = data104.baselinePath;const _errs273 = errors;const _errs274 = errors;if(typeof data106 === "string"){if(!pattern0.test(data106)){const err201 = {};if(vErrors === null){vErrors = [err201];}else {vErrors.push(err201);}errors++;}}var valid74 = _errs274 === errors;if(valid74){const err202 = {instancePath:instancePath+"/delivery/quality/gates/lint/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err202];}else {vErrors.push(err202);}errors++;}else {errors = _errs273;if(vErrors !== null){if(_errs273){vErrors.length = _errs273;}else {vErrors = null;}}}if(typeof data106 === "string"){if(func2(data106) < 1){const err203 = {instancePath:instancePath+"/delivery/quality/gates/lint/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err203];}else {vErrors.push(err203);}errors++;}}else {const err204 = {instancePath:instancePath+"/delivery/quality/gates/lint/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err204];}else {vErrors.push(err204);}errors++;}}if(data104.tolerance !== undefined){let data107 = data104.tolerance;if(data107 && typeof data107 == "object" && !Array.isArray(data107)){if(data107.kind === undefined){const err205 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err205];}else {vErrors.push(err205);}errors++;}if(data107.value === undefined){const err206 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err206];}else {vErrors.push(err206);}errors++;}for(const key28 in data107){if(!((key28 === "kind") || (key28 === "value"))){const err207 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key28},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err207];}else {vErrors.push(err207);}errors++;}}if(data107.kind !== undefined){let data108 = data107.kind;if(typeof data108 !== "string"){const err208 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err208];}else {vErrors.push(err208);}errors++;}if(!((data108 === "absolute") || (data108 === "percent"))){const err209 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lint.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err209];}else {vErrors.push(err209);}errors++;}}if(data107.value !== undefined){let data109 = data107.value;if((typeof data109 == "number") && (isFinite(data109))){if(data109 < 0 || isNaN(data109)){const err210 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err210];}else {vErrors.push(err210);}errors++;}}else {const err211 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err211];}else {vErrors.push(err211);}errors++;}}}else {const err212 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err212];}else {vErrors.push(err212);}errors++;}}if(data104.floors !== undefined){let data110 = data104.floors;if(data110 && typeof data110 == "object" && !Array.isArray(data110)){for(const key29 in data110){let data111 = data110[key29];if(data111 && typeof data111 == "object" && !Array.isArray(data111)){for(const key30 in data111){let data112 = data111[key30];if(!((typeof data112 == "number") && (isFinite(data112)))){const err213 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key29.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key30.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err213];}else {vErrors.push(err213);}errors++;}}}else {const err214 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key29.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err214];}else {vErrors.push(err214);}errors++;}}}else {const err215 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err215];}else {vErrors.push(err215);}errors++;}}if(data104.components !== undefined){let data113 = data104.components;if(data113 && typeof data113 == "object" && !Array.isArray(data113)){for(const key31 in data113){let data114 = data113[key31];if(Array.isArray(data114)){const len15 = data114.length;for(let i17=0; i17<len15; i17++){let data115 = data114[i17];if(typeof data115 === "string"){if(func2(data115) < 1){const err216 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key31.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err216];}else {vErrors.push(err216);}errors++;}}else {const err217 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key31.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/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/lint/components/" + key31.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/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/lint/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err219];}else {vErrors.push(err219);}errors++;}}}else {const err220 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err220];}else {vErrors.push(err220);}errors++;}}if(data103.coverage !== undefined){let data116 = data103.coverage;if(data116 && typeof data116 == "object" && !Array.isArray(data116)){for(const key32 in data116){if(!(((((((key32 === "enabled") || (key32 === "baselinePath")) || (key32 === "tolerance")) || (key32 === "floors")) || (key32 === "components")) || (key32 === "coveragePath")) || (key32 === "timeoutMs"))){const err221 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key32},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err221];}else {vErrors.push(err221);}errors++;}}if(data116.enabled !== undefined){if(typeof data116.enabled !== "boolean"){const err222 = {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 = [err222];}else {vErrors.push(err222);}errors++;}}if(data116.baselinePath !== undefined){let data118 = data116.baselinePath;const _errs304 = errors;const _errs305 = errors;if(typeof data118 === "string"){if(!pattern0.test(data118)){const err223 = {};if(vErrors === null){vErrors = [err223];}else {vErrors.push(err223);}errors++;}}var valid82 = _errs305 === errors;if(valid82){const err224 = {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 = [err224];}else {vErrors.push(err224);}errors++;}else {errors = _errs304;if(vErrors !== null){if(_errs304){vErrors.length = _errs304;}else {vErrors = null;}}}if(typeof data118 === "string"){if(func2(data118) < 1){const err225 = {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 = [err225];}else {vErrors.push(err225);}errors++;}}else {const err226 = {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 = [err226];}else {vErrors.push(err226);}errors++;}}if(data116.tolerance !== undefined){let data119 = data116.tolerance;if(data119 && typeof data119 == "object" && !Array.isArray(data119)){if(data119.kind === undefined){const err227 = {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 = [err227];}else {vErrors.push(err227);}errors++;}if(data119.value === undefined){const err228 = {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 = [err228];}else {vErrors.push(err228);}errors++;}for(const key33 in data119){if(!((key33 === "kind") || (key33 === "value"))){const err229 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err229];}else {vErrors.push(err229);}errors++;}}if(data119.kind !== undefined){let data120 = data119.kind;if(typeof data120 !== "string"){const err230 = {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 = [err230];}else {vErrors.push(err230);}errors++;}if(!((data120 === "absolute") || (data120 === "percent"))){const err231 = {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 = [err231];}else {vErrors.push(err231);}errors++;}}if(data119.value !== undefined){let data121 = data119.value;if((typeof data121 == "number") && (isFinite(data121))){if(data121 < 0 || isNaN(data121)){const err232 = {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 = [err232];}else {vErrors.push(err232);}errors++;}}else {const err233 = {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 = [err233];}else {vErrors.push(err233);}errors++;}}}else {const err234 = {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 = [err234];}else {vErrors.push(err234);}errors++;}}if(data116.floors !== undefined){let data122 = data116.floors;if(data122 && typeof data122 == "object" && !Array.isArray(data122)){for(const key34 in data122){let data123 = data122[key34];if(data123 && typeof data123 == "object" && !Array.isArray(data123)){for(const key35 in data123){let data124 = data123[key35];if(!((typeof data124 == "number") && (isFinite(data124)))){const err235 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key34.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key35.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 = [err235];}else {vErrors.push(err235);}errors++;}}}else {const err236 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key34.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 = [err236];}else {vErrors.push(err236);}errors++;}}}else {const err237 = {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 = [err237];}else {vErrors.push(err237);}errors++;}}if(data116.components !== undefined){let data125 = data116.components;if(data125 && typeof data125 == "object" && !Array.isArray(data125)){for(const key36 in data125){let data126 = data125[key36];if(Array.isArray(data126)){const len16 = data126.length;for(let i18=0; i18<len16; i18++){let data127 = data126[i18];if(typeof data127 === "string"){if(func2(data127) < 1){const err238 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key36.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err238];}else {vErrors.push(err238);}errors++;}}else {const err239 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key36.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err239];}else {vErrors.push(err239);}errors++;}}}else {const err240 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key36.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 = [err240];}else {vErrors.push(err240);}errors++;}}}else {const err241 = {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 = [err241];}else {vErrors.push(err241);}errors++;}}if(data116.coveragePath !== undefined){let data128 = data116.coveragePath;const _errs330 = errors;const _errs331 = errors;if(typeof data128 === "string"){if(!pattern0.test(data128)){const err242 = {};if(vErrors === null){vErrors = [err242];}else {vErrors.push(err242);}errors++;}}var valid89 = _errs331 === errors;if(valid89){const err243 = {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 = [err243];}else {vErrors.push(err243);}errors++;}else {errors = _errs330;if(vErrors !== null){if(_errs330){vErrors.length = _errs330;}else {vErrors = null;}}}if(typeof data128 === "string"){if(func2(data128) < 1){const err244 = {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 = [err244];}else {vErrors.push(err244);}errors++;}}else {const err245 = {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 = [err245];}else {vErrors.push(err245);}errors++;}}if(data116.timeoutMs !== undefined){let data129 = data116.timeoutMs;if(!(((typeof data129 == "number") && (!(data129 % 1) && !isNaN(data129))) && (isFinite(data129)))){const err246 = {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 = [err246];}else {vErrors.push(err246);}errors++;}if((typeof data129 == "number") && (isFinite(data129))){if(data129 < 1 || isNaN(data129)){const err247 = {instancePath:instancePath+"/delivery/quality/gates/coverage/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/timeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err247];}else {vErrors.push(err247);}errors++;}}}}else {const err248 = {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 = [err248];}else {vErrors.push(err248);}errors++;}}if(data103.crap !== undefined){let data130 = data103.crap;if(data130 && typeof data130 == "object" && !Array.isArray(data130)){for(const key37 in data130){if(!(func9.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key37))){const err249 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key37},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err249];}else {vErrors.push(err249);}errors++;}}if(data130.enabled !== undefined){if(typeof data130.enabled !== "boolean"){const err250 = {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 = [err250];}else {vErrors.push(err250);}errors++;}}if(data130.baselinePath !== undefined){let data132 = data130.baselinePath;const _errs341 = errors;const _errs342 = errors;if(typeof data132 === "string"){if(!pattern0.test(data132)){const err251 = {};if(vErrors === null){vErrors = [err251];}else {vErrors.push(err251);}errors++;}}var valid91 = _errs342 === errors;if(valid91){const err252 = {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 = [err252];}else {vErrors.push(err252);}errors++;}else {errors = _errs341;if(vErrors !== null){if(_errs341){vErrors.length = _errs341;}else {vErrors = null;}}}if(typeof data132 === "string"){if(func2(data132) < 1){const err253 = {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 = [err253];}else {vErrors.push(err253);}errors++;}}else {const err254 = {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 = [err254];}else {vErrors.push(err254);}errors++;}}if(data130.tolerance !== undefined){let data133 = data130.tolerance;if(data133 && typeof data133 == "object" && !Array.isArray(data133)){if(data133.kind === undefined){const err255 = {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 = [err255];}else {vErrors.push(err255);}errors++;}if(data133.value === undefined){const err256 = {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 = [err256];}else {vErrors.push(err256);}errors++;}for(const key38 in data133){if(!((key38 === "kind") || (key38 === "value"))){const err257 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err257];}else {vErrors.push(err257);}errors++;}}if(data133.kind !== undefined){let data134 = data133.kind;if(typeof data134 !== "string"){const err258 = {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 = [err258];}else {vErrors.push(err258);}errors++;}if(!((data134 === "absolute") || (data134 === "percent"))){const err259 = {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 = [err259];}else {vErrors.push(err259);}errors++;}}if(data133.value !== undefined){let data135 = data133.value;if((typeof data135 == "number") && (isFinite(data135))){if(data135 < 0 || isNaN(data135)){const err260 = {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 = [err260];}else {vErrors.push(err260);}errors++;}}else {const err261 = {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 = [err261];}else {vErrors.push(err261);}errors++;}}}else {const err262 = {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 = [err262];}else {vErrors.push(err262);}errors++;}}if(data130.floors !== undefined){let data136 = data130.floors;if(data136 && typeof data136 == "object" && !Array.isArray(data136)){for(const key39 in data136){let data137 = data136[key39];if(data137 && typeof data137 == "object" && !Array.isArray(data137)){for(const key40 in data137){let data138 = data137[key40];if(!((typeof data138 == "number") && (isFinite(data138)))){const err263 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key39.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key40.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 = [err263];}else {vErrors.push(err263);}errors++;}}}else {const err264 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key39.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 = [err264];}else {vErrors.push(err264);}errors++;}}}else {const err265 = {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 = [err265];}else {vErrors.push(err265);}errors++;}}if(data130.components !== undefined){let data139 = data130.components;if(data139 && typeof data139 == "object" && !Array.isArray(data139)){for(const key41 in data139){let data140 = data139[key41];if(Array.isArray(data140)){const len17 = data140.length;for(let i19=0; i19<len17; i19++){let data141 = data140[i19];if(typeof data141 === "string"){if(func2(data141) < 1){const err266 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key41.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,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 = [err266];}else {vErrors.push(err266);}errors++;}}else {const err267 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key41.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,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 = [err267];}else {vErrors.push(err267);}errors++;}}}else {const err268 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key41.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 = [err268];}else {vErrors.push(err268);}errors++;}}}else {const err269 = {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 = [err269];}else {vErrors.push(err269);}errors++;}}if(data130.targetDirs !== undefined){let data142 = data130.targetDirs;const _errs366 = errors;let valid98 = false;let passing2 = null;const _errs367 = errors;if(Array.isArray(data142)){const len18 = data142.length;for(let i20=0; i20<len18; i20++){if(typeof data142[i20] !== "string"){const err270 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i20,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 = [err270];}else {vErrors.push(err270);}errors++;}}}else {const err271 = {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 = [err271];}else {vErrors.push(err271);}errors++;}var _valid3 = _errs367 === errors;if(_valid3){valid98 = true;passing2 = 0;}const _errs371 = errors;if(data142 && typeof data142 == "object" && !Array.isArray(data142)){for(const key42 in data142){if(!((key42 === "append") || (key42 === "prepend"))){const err272 = {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: key42},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err272];}else {vErrors.push(err272);}errors++;}}if(data142.append !== undefined){let data144 = data142.append;if(Array.isArray(data144)){const len19 = data144.length;for(let i21=0; i21<len19; i21++){if(typeof data144[i21] !== "string"){const err273 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i21,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 = [err273];}else {vErrors.push(err273);}errors++;}}}else {const err274 = {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 = [err274];}else {vErrors.push(err274);}errors++;}}if(data142.prepend !== undefined){let data146 = data142.prepend;if(Array.isArray(data146)){const len20 = data146.length;for(let i22=0; i22<len20; i22++){if(typeof data146[i22] !== "string"){const err275 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i22,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 = [err275];}else {vErrors.push(err275);}errors++;}}}else {const err276 = {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 = [err276];}else {vErrors.push(err276);}errors++;}}}else {const err277 = {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 = [err277];}else {vErrors.push(err277);}errors++;}var _valid3 = _errs371 === errors;if(_valid3 && valid98){valid98 = false;passing2 = [passing2, 1];}else {if(_valid3){valid98 = true;passing2 = 1;}}if(!valid98){const err278 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err278];}else {vErrors.push(err278);}errors++;}else {errors = _errs366;if(vErrors !== null){if(_errs366){vErrors.length = _errs366;}else {vErrors = null;}}}}if(data130.newMethodCeiling !== undefined){let data148 = data130.newMethodCeiling;if(!(((typeof data148 == "number") && (!(data148 % 1) && !isNaN(data148))) && (isFinite(data148)))){const err279 = {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 = [err279];}else {vErrors.push(err279);}errors++;}if((typeof data148 == "number") && (isFinite(data148))){if(data148 < 1 || isNaN(data148)){const err280 = {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 = [err280];}else {vErrors.push(err280);}errors++;}}}if(data130.requireCoverage !== undefined){if(typeof data130.requireCoverage !== "boolean"){const err281 = {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 = [err281];}else {vErrors.push(err281);}errors++;}}if(data130.minMethodResolutionRate !== undefined){let data150 = data130.minMethodResolutionRate;if((typeof data150 == "number") && (isFinite(data150))){if(data150 > 1 || isNaN(data150)){const err282 = {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 = [err282];}else {vErrors.push(err282);}errors++;}if(data150 < 0 || isNaN(data150)){const err283 = {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 = [err283];}else {vErrors.push(err283);}errors++;}}else {const err284 = {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 = [err284];}else {vErrors.push(err284);}errors++;}}if(data130.friction !== undefined){let data151 = data130.friction;if(data151 && typeof data151 == "object" && !Array.isArray(data151)){for(const key43 in data151){if(!(key43 === "markerKey")){const err285 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key43},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err285];}else {vErrors.push(err285);}errors++;}}if(data151.markerKey !== undefined){let data152 = data151.markerKey;if(typeof data152 === "string"){if(func2(data152) < 1){const err286 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction/markerKey",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/properties/markerKey/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err286];}else {vErrors.push(err286);}errors++;}}else {const err287 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction/markerKey",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/properties/markerKey/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err287];}else {vErrors.push(err287);}errors++;}}}else {const err288 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err288];}else {vErrors.push(err288);}errors++;}}if(data130.refreshTag !== undefined){let data153 = data130.refreshTag;const _errs395 = errors;const _errs396 = errors;if(typeof data153 === "string"){if(!pattern0.test(data153)){const err289 = {};if(vErrors === null){vErrors = [err289];}else {vErrors.push(err289);}errors++;}}var valid107 = _errs396 === errors;if(valid107){const err290 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTag/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err290];}else {vErrors.push(err290);}errors++;}else {errors = _errs395;if(vErrors !== null){if(_errs395){vErrors.length = _errs395;}else {vErrors = null;}}}if(typeof data153 === "string"){if(func2(data153) < 1){const err291 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTag/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/crap/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTag/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err292];}else {vErrors.push(err292);}errors++;}}if(data130.refreshTimeoutMs !== undefined){let data154 = data130.refreshTimeoutMs;if(!(((typeof data154 == "number") && (!(data154 % 1) && !isNaN(data154))) && (isFinite(data154)))){const err293 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err293];}else {vErrors.push(err293);}errors++;}if((typeof data154 == "number") && (isFinite(data154))){if(data154 < 1 || isNaN(data154)){const err294 = {instancePath:instancePath+"/delivery/quality/gates/crap/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/refreshTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err294];}else {vErrors.push(err294);}errors++;}}}if(data130.ignoreGlobs !== undefined){let data155 = data130.ignoreGlobs;if(Array.isArray(data155)){const len21 = data155.length;for(let i23=0; i23<len21; i23++){let data156 = data155[i23];if(typeof data156 === "string"){if(func2(data156) < 1){const err295 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,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 = [err295];}else {vErrors.push(err295);}errors++;}}else {const err296 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,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 = [err296];}else {vErrors.push(err296);}errors++;}}}else {const err297 = {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 = [err297];}else {vErrors.push(err297);}errors++;}}if(data130.incrementalCoverage !== undefined){let data157 = data130.incrementalCoverage;if(data157 && typeof data157 == "object" && !Array.isArray(data157)){for(const key44 in data157){if(!((((key44 === "skipWhenUnchanged") || (key44 === "baselineJoin")) || (key44 === "enabled")) || (key44 === "baseRef"))){const err298 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key44},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err298];}else {vErrors.push(err298);}errors++;}}if(data157.skipWhenUnchanged !== undefined){if(typeof data157.skipWhenUnchanged !== "boolean"){const err299 = {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 = [err299];}else {vErrors.push(err299);}errors++;}}if(data157.baselineJoin !== undefined){if(typeof data157.baselineJoin !== "boolean"){const err300 = {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 = [err300];}else {vErrors.push(err300);}errors++;}}if(data157.enabled !== undefined){if(typeof data157.enabled !== "boolean"){const err301 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err301];}else {vErrors.push(err301);}errors++;}}if(data157.baseRef !== undefined){let data161 = data157.baseRef;if(typeof data161 === "string"){if(func2(data161) < 1){const err302 = {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 = [err302];}else {vErrors.push(err302);}errors++;}}else {const err303 = {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 = [err303];}else {vErrors.push(err303);}errors++;}}}else {const err304 = {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 = [err304];}else {vErrors.push(err304);}errors++;}}}else {const err305 = {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 = [err305];}else {vErrors.push(err305);}errors++;}}if(data103.maintainability !== undefined){let data162 = data103.maintainability;if(data162 && typeof data162 == "object" && !Array.isArray(data162)){for(const key45 in data162){if(!(func9.call(schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties, key45))){const err306 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key45},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err306];}else {vErrors.push(err306);}errors++;}}if(data162.enabled !== undefined){if(typeof data162.enabled !== "boolean"){const err307 = {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 = [err307];}else {vErrors.push(err307);}errors++;}}if(data162.baselinePath !== undefined){let data164 = data162.baselinePath;const _errs421 = errors;const _errs422 = errors;if(typeof data164 === "string"){if(!pattern0.test(data164)){const err308 = {};if(vErrors === null){vErrors = [err308];}else {vErrors.push(err308);}errors++;}}var valid112 = _errs422 === errors;if(valid112){const err309 = {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 = [err309];}else {vErrors.push(err309);}errors++;}else {errors = _errs421;if(vErrors !== null){if(_errs421){vErrors.length = _errs421;}else {vErrors = null;}}}if(typeof data164 === "string"){if(func2(data164) < 1){const err310 = {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 = [err310];}else {vErrors.push(err310);}errors++;}}else {const err311 = {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 = [err311];}else {vErrors.push(err311);}errors++;}}if(data162.tolerance !== undefined){let data165 = data162.tolerance;if(data165 && typeof data165 == "object" && !Array.isArray(data165)){if(data165.kind === undefined){const err312 = {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 = [err312];}else {vErrors.push(err312);}errors++;}if(data165.value === undefined){const err313 = {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 = [err313];}else {vErrors.push(err313);}errors++;}for(const key46 in data165){if(!((key46 === "kind") || (key46 === "value"))){const err314 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key46},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err314];}else {vErrors.push(err314);}errors++;}}if(data165.kind !== undefined){let data166 = data165.kind;if(typeof data166 !== "string"){const err315 = {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 = [err315];}else {vErrors.push(err315);}errors++;}if(!((data166 === "absolute") || (data166 === "percent"))){const err316 = {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 = [err316];}else {vErrors.push(err316);}errors++;}}if(data165.value !== undefined){let data167 = data165.value;if((typeof data167 == "number") && (isFinite(data167))){if(data167 < 0 || isNaN(data167)){const err317 = {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 = [err317];}else {vErrors.push(err317);}errors++;}}else {const err318 = {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 = [err318];}else {vErrors.push(err318);}errors++;}}}else {const err319 = {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 = [err319];}else {vErrors.push(err319);}errors++;}}if(data162.floors !== undefined){let data168 = data162.floors;if(data168 && typeof data168 == "object" && !Array.isArray(data168)){for(const key47 in data168){let data169 = data168[key47];if(data169 && typeof data169 == "object" && !Array.isArray(data169)){for(const key48 in data169){let data170 = data169[key48];if(!((typeof data170 == "number") && (isFinite(data170)))){const err320 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key47.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key48.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 = [err320];}else {vErrors.push(err320);}errors++;}}}else {const err321 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key47.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 = [err321];}else {vErrors.push(err321);}errors++;}}}else {const err322 = {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 = [err322];}else {vErrors.push(err322);}errors++;}}if(data162.components !== undefined){let data171 = data162.components;if(data171 && typeof data171 == "object" && !Array.isArray(data171)){for(const key49 in data171){let data172 = data171[key49];if(Array.isArray(data172)){const len22 = data172.length;for(let i24=0; i24<len22; i24++){let data173 = data172[i24];if(typeof data173 === "string"){if(func2(data173) < 1){const err323 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key49.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err323];}else {vErrors.push(err323);}errors++;}}else {const err324 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key49.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err324];}else {vErrors.push(err324);}errors++;}}}else {const err325 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key49.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 = [err325];}else {vErrors.push(err325);}errors++;}}}else {const err326 = {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 = [err326];}else {vErrors.push(err326);}errors++;}}if(data162.targetDirs !== undefined){let data174 = data162.targetDirs;const _errs446 = errors;let valid119 = false;let passing3 = null;const _errs447 = errors;if(Array.isArray(data174)){const len23 = data174.length;for(let i25=0; i25<len23; i25++){if(typeof data174[i25] !== "string"){const err327 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i25,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 = [err327];}else {vErrors.push(err327);}errors++;}}}else {const err328 = {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 = [err328];}else {vErrors.push(err328);}errors++;}var _valid4 = _errs447 === errors;if(_valid4){valid119 = true;passing3 = 0;}const _errs451 = errors;if(data174 && typeof data174 == "object" && !Array.isArray(data174)){for(const key50 in data174){if(!((key50 === "append") || (key50 === "prepend"))){const err329 = {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: key50},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err329];}else {vErrors.push(err329);}errors++;}}if(data174.append !== undefined){let data176 = data174.append;if(Array.isArray(data176)){const len24 = data176.length;for(let i26=0; i26<len24; i26++){if(typeof data176[i26] !== "string"){const err330 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i26,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 = [err330];}else {vErrors.push(err330);}errors++;}}}else {const err331 = {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 = [err331];}else {vErrors.push(err331);}errors++;}}if(data174.prepend !== undefined){let data178 = data174.prepend;if(Array.isArray(data178)){const len25 = data178.length;for(let i27=0; i27<len25; i27++){if(typeof data178[i27] !== "string"){const err332 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i27,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 = [err332];}else {vErrors.push(err332);}errors++;}}}else {const err333 = {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 = [err333];}else {vErrors.push(err333);}errors++;}}}else {const err334 = {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 = [err334];}else {vErrors.push(err334);}errors++;}var _valid4 = _errs451 === errors;if(_valid4 && valid119){valid119 = false;passing3 = [passing3, 1];}else {if(_valid4){valid119 = true;passing3 = 1;}}if(!valid119){const err335 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err335];}else {vErrors.push(err335);}errors++;}else {errors = _errs446;if(vErrors !== null){if(_errs446){vErrors.length = _errs446;}else {vErrors = null;}}}}if(data162.refreshTag !== undefined){let data180 = data162.refreshTag;const _errs464 = errors;const _errs465 = errors;if(typeof data180 === "string"){if(!pattern0.test(data180)){const err336 = {};if(vErrors === null){vErrors = [err336];}else {vErrors.push(err336);}errors++;}}var valid127 = _errs465 === errors;if(valid127){const err337 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTag/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err337];}else {vErrors.push(err337);}errors++;}else {errors = _errs464;if(vErrors !== null){if(_errs464){vErrors.length = _errs464;}else {vErrors = null;}}}if(typeof data180 === "string"){if(func2(data180) < 1){const err338 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTag/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/maintainability/refreshTag",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTag/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err339];}else {vErrors.push(err339);}errors++;}}if(data162.refreshTimeoutMs !== undefined){let data181 = data162.refreshTimeoutMs;if(!(((typeof data181 == "number") && (!(data181 % 1) && !isNaN(data181))) && (isFinite(data181)))){const err340 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err340];}else {vErrors.push(err340);}errors++;}if((typeof data181 == "number") && (isFinite(data181))){if(data181 < 1 || isNaN(data181)){const err341 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/refreshTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err341];}else {vErrors.push(err341);}errors++;}}}if(data162.ignoreGlobs !== undefined){let data182 = data162.ignoreGlobs;if(Array.isArray(data182)){const len26 = data182.length;for(let i28=0; i28<len26; i28++){let data183 = data182[i28];if(typeof data183 === "string"){if(func2(data183) < 1){const err342 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,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 = [err342];}else {vErrors.push(err342);}errors++;}}else {const err343 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,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 = [err343];}else {vErrors.push(err343);}errors++;}}}else {const err344 = {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 = [err344];}else {vErrors.push(err344);}errors++;}}}else {const err345 = {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 = [err345];}else {vErrors.push(err345);}errors++;}}if(data103.mutation !== undefined){let data184 = data103.mutation;if(data184 && typeof data184 == "object" && !Array.isArray(data184)){for(const key51 in data184){if(!((((((key51 === "enabled") || (key51 === "baselinePath")) || (key51 === "tolerance")) || (key51 === "floors")) || (key51 === "components")) || (key51 === "strykerConfigPath"))){const err346 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key51},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err346];}else {vErrors.push(err346);}errors++;}}if(data184.enabled !== undefined){if(typeof data184.enabled !== "boolean"){const err347 = {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 = [err347];}else {vErrors.push(err347);}errors++;}}if(data184.baselinePath !== undefined){let data186 = data184.baselinePath;const _errs479 = errors;const _errs480 = errors;if(typeof data186 === "string"){if(!pattern0.test(data186)){const err348 = {};if(vErrors === null){vErrors = [err348];}else {vErrors.push(err348);}errors++;}}var valid131 = _errs480 === errors;if(valid131){const err349 = {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 = [err349];}else {vErrors.push(err349);}errors++;}else {errors = _errs479;if(vErrors !== null){if(_errs479){vErrors.length = _errs479;}else {vErrors = null;}}}if(typeof data186 === "string"){if(func2(data186) < 1){const err350 = {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 = [err350];}else {vErrors.push(err350);}errors++;}}else {const err351 = {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 = [err351];}else {vErrors.push(err351);}errors++;}}if(data184.tolerance !== undefined){let data187 = data184.tolerance;if(data187 && typeof data187 == "object" && !Array.isArray(data187)){if(data187.kind === undefined){const err352 = {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 = [err352];}else {vErrors.push(err352);}errors++;}if(data187.value === undefined){const err353 = {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 = [err353];}else {vErrors.push(err353);}errors++;}for(const key52 in data187){if(!((key52 === "kind") || (key52 === "value"))){const err354 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key52},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err354];}else {vErrors.push(err354);}errors++;}}if(data187.kind !== undefined){let data188 = data187.kind;if(typeof data188 !== "string"){const err355 = {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 = [err355];}else {vErrors.push(err355);}errors++;}if(!((data188 === "absolute") || (data188 === "percent"))){const err356 = {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 = [err356];}else {vErrors.push(err356);}errors++;}}if(data187.value !== undefined){let data189 = data187.value;if((typeof data189 == "number") && (isFinite(data189))){if(data189 < 0 || isNaN(data189)){const err357 = {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 = [err357];}else {vErrors.push(err357);}errors++;}}else {const err358 = {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 = [err358];}else {vErrors.push(err358);}errors++;}}}else {const err359 = {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 = [err359];}else {vErrors.push(err359);}errors++;}}if(data184.floors !== undefined){let data190 = data184.floors;if(data190 && typeof data190 == "object" && !Array.isArray(data190)){for(const key53 in data190){let data191 = data190[key53];if(data191 && typeof data191 == "object" && !Array.isArray(data191)){for(const key54 in data191){let data192 = data191[key54];if(!((typeof data192 == "number") && (isFinite(data192)))){const err360 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key53.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key54.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 = [err360];}else {vErrors.push(err360);}errors++;}}}else {const err361 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key53.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 = [err361];}else {vErrors.push(err361);}errors++;}}}else {const err362 = {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 = [err362];}else {vErrors.push(err362);}errors++;}}if(data184.components !== undefined){let data193 = data184.components;if(data193 && typeof data193 == "object" && !Array.isArray(data193)){for(const key55 in data193){let data194 = data193[key55];if(Array.isArray(data194)){const len27 = data194.length;for(let i29=0; i29<len27; i29++){let data195 = data194[i29];if(typeof data195 === "string"){if(func2(data195) < 1){const err363 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key55.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,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 = [err363];}else {vErrors.push(err363);}errors++;}}else {const err364 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key55.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,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 = [err364];}else {vErrors.push(err364);}errors++;}}}else {const err365 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key55.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 = [err365];}else {vErrors.push(err365);}errors++;}}}else {const err366 = {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 = [err366];}else {vErrors.push(err366);}errors++;}}if(data184.strykerConfigPath !== undefined){let data196 = data184.strykerConfigPath;if((typeof data196 !== "string") && (data196 !== null)){const err367 = {instancePath:instancePath+"/delivery/quality/gates/mutation/strykerConfigPath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/strykerConfigPath/type",keyword:"type",params:{type: schema11.properties.delivery.properties.quality.properties.gates.properties.mutation.properties.strykerConfigPath.type},message:"must be string,null"};if(vErrors === null){vErrors = [err367];}else {vErrors.push(err367);}errors++;}const _errs505 = errors;const _errs506 = errors;if(errors === _errs506){if(typeof data196 === "string"){if(!pattern0.test(data196)){const err368 = {};if(vErrors === null){vErrors = [err368];}else {vErrors.push(err368);}errors++;}}else {const err369 = {};if(vErrors === null){vErrors = [err369];}else {vErrors.push(err369);}errors++;}}var valid138 = _errs506 === errors;if(valid138){const err370 = {instancePath:instancePath+"/delivery/quality/gates/mutation/strykerConfigPath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/strykerConfigPath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err370];}else {vErrors.push(err370);}errors++;}else {errors = _errs505;if(vErrors !== null){if(_errs505){vErrors.length = _errs505;}else {vErrors = null;}}}if(typeof data196 === "string"){if(func2(data196) < 1){const err371 = {instancePath:instancePath+"/delivery/quality/gates/mutation/strykerConfigPath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/strykerConfigPath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err371];}else {vErrors.push(err371);}errors++;}}}}else {const err372 = {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 = [err372];}else {vErrors.push(err372);}errors++;}}if(data103.lighthouse !== undefined){let data197 = data103.lighthouse;if(data197 && typeof data197 == "object" && !Array.isArray(data197)){for(const key56 in data197){if(!(((((((key56 === "enabled") || (key56 === "baselinePath")) || (key56 === "tolerance")) || (key56 === "floors")) || (key56 === "components")) || (key56 === "baseUrl")) || (key56 === "routes"))){const err373 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key56},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err373];}else {vErrors.push(err373);}errors++;}}if(data197.enabled !== undefined){if(typeof data197.enabled !== "boolean"){const err374 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/enabled",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err374];}else {vErrors.push(err374);}errors++;}}if(data197.baselinePath !== undefined){let data199 = data197.baselinePath;const _errs515 = errors;const _errs516 = errors;if(typeof data199 === "string"){if(!pattern0.test(data199)){const err375 = {};if(vErrors === null){vErrors = [err375];}else {vErrors.push(err375);}errors++;}}var valid140 = _errs516 === errors;if(valid140){const err376 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baselinePath/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err376];}else {vErrors.push(err376);}errors++;}else {errors = _errs515;if(vErrors !== null){if(_errs515){vErrors.length = _errs515;}else {vErrors = null;}}}if(typeof data199 === "string"){if(func2(data199) < 1){const err377 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baselinePath/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err377];}else {vErrors.push(err377);}errors++;}}else {const err378 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baselinePath",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baselinePath/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err378];}else {vErrors.push(err378);}errors++;}}if(data197.tolerance !== undefined){let data200 = data197.tolerance;if(data200 && typeof data200 == "object" && !Array.isArray(data200)){if(data200.kind === undefined){const err379 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/required",keyword:"required",params:{missingProperty: "kind"},message:"must have required property '"+"kind"+"'"};if(vErrors === null){vErrors = [err379];}else {vErrors.push(err379);}errors++;}if(data200.value === undefined){const err380 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/required",keyword:"required",params:{missingProperty: "value"},message:"must have required property '"+"value"+"'"};if(vErrors === null){vErrors = [err380];}else {vErrors.push(err380);}errors++;}for(const key57 in data200){if(!((key57 === "kind") || (key57 === "value"))){const err381 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err381];}else {vErrors.push(err381);}errors++;}}if(data200.kind !== undefined){let data201 = data200.kind;if(typeof data201 !== "string"){const err382 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/kind/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err382];}else {vErrors.push(err382);}errors++;}if(!((data201 === "absolute") || (data201 === "percent"))){const err383 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/kind",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/kind/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.tolerance.properties.kind.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err383];}else {vErrors.push(err383);}errors++;}}if(data200.value !== undefined){let data202 = data200.value;if((typeof data202 == "number") && (isFinite(data202))){if(data202 < 0 || isNaN(data202)){const err384 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/value/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err384];}else {vErrors.push(err384);}errors++;}}else {const err385 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance/value",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/properties/value/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err385];}else {vErrors.push(err385);}errors++;}}}else {const err386 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err386];}else {vErrors.push(err386);}errors++;}}if(data197.floors !== undefined){let data203 = data197.floors;if(data203 && typeof data203 == "object" && !Array.isArray(data203)){for(const key58 in data203){let data204 = data203[key58];if(data204 && typeof data204 == "object" && !Array.isArray(data204)){for(const key59 in data204){let data205 = data204[key59];if(!((typeof data205 == "number") && (isFinite(data205)))){const err387 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key58.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key59.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/floors/additionalProperties/additionalProperties/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err387];}else {vErrors.push(err387);}errors++;}}}else {const err388 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key58.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/floors/additionalProperties/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err388];}else {vErrors.push(err388);}errors++;}}}else {const err389 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/floors/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err389];}else {vErrors.push(err389);}errors++;}}if(data197.components !== undefined){let data206 = data197.components;if(data206 && typeof data206 == "object" && !Array.isArray(data206)){for(const key60 in data206){let data207 = data206[key60];if(Array.isArray(data207)){const len28 = data207.length;for(let i30=0; i30<len28; i30++){let data208 = data207[i30];if(typeof data208 === "string"){if(func2(data208) < 1){const err390 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key60.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/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/quality/gates/lighthouse/components/" + key60.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/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/quality/gates/lighthouse/components/" + key60.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/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/quality/gates/lighthouse/components",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err393];}else {vErrors.push(err393);}errors++;}}if(data197.baseUrl !== undefined){let data209 = data197.baseUrl;if((typeof data209 !== "string") && (data209 !== null)){const err394 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baseUrl",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baseUrl/type",keyword:"type",params:{type: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.baseUrl.type},message:"must be string,null"};if(vErrors === null){vErrors = [err394];}else {vErrors.push(err394);}errors++;}const _errs541 = errors;const _errs542 = errors;if(errors === _errs542){if(typeof data209 === "string"){if(!pattern0.test(data209)){const err395 = {};if(vErrors === null){vErrors = [err395];}else {vErrors.push(err395);}errors++;}}else {const err396 = {};if(vErrors === null){vErrors = [err396];}else {vErrors.push(err396);}errors++;}}var valid147 = _errs542 === errors;if(valid147){const err397 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baseUrl",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baseUrl/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err397];}else {vErrors.push(err397);}errors++;}else {errors = _errs541;if(vErrors !== null){if(_errs541){vErrors.length = _errs541;}else {vErrors = null;}}}if(typeof data209 === "string"){if(func2(data209) < 1){const err398 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/baseUrl",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/baseUrl/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err398];}else {vErrors.push(err398);}errors++;}}}if(data197.routes !== undefined){let data210 = data197.routes;if(Array.isArray(data210)){const len29 = data210.length;for(let i31=0; i31<len29; i31++){let data211 = data210[i31];if(data211 && typeof data211 == "object" && !Array.isArray(data211)){if(data211.path === undefined){const err399 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err399];}else {vErrors.push(err399);}errors++;}for(const key61 in data211){if(!((key61 === "path") || (key61 === "formFactor"))){const err400 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key61},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err400];}else {vErrors.push(err400);}errors++;}}if(data211.path !== undefined){let data212 = data211.path;if(typeof data212 === "string"){if(func2(data212) < 1){const err401 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err401];}else {vErrors.push(err401);}errors++;}}else {const err402 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err402];}else {vErrors.push(err402);}errors++;}}if(data211.formFactor !== undefined){let data213 = data211.formFactor;if(typeof data213 !== "string"){const err403 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err403];}else {vErrors.push(err403);}errors++;}if(!((data213 === "mobile") || (data213 === "desktop"))){const err404 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.routes.items.properties.formFactor.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err404];}else {vErrors.push(err404);}errors++;}}}else {const err405 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err405];}else {vErrors.push(err405);}errors++;}}}else {const err406 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err406];}else {vErrors.push(err406);}errors++;}}}else {const err407 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err407];}else {vErrors.push(err407);}errors++;}}if(data103["bundle-size"] !== undefined){let data214 = data103["bundle-size"];if(data214 && typeof data214 == "object" && !Array.isArray(data214)){for(const key62 in data214){if(!((((((key62 === "enabled") || (key62 === "baselinePath")) || (key62 === "tolerance")) || (key62 === "floors")) || (key62 === "components")) || (key62 === "bundles"))){const err408 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key62},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err408];}else {vErrors.push(err408);}errors++;}}if(data214.enabled !== undefined){if(typeof data214.enabled !== "boolean"){const err409 = {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 = [err409];}else {vErrors.push(err409);}errors++;}}if(data214.baselinePath !== undefined){let data216 = data214.baselinePath;const _errs560 = errors;const _errs561 = errors;if(typeof data216 === "string"){if(!pattern0.test(data216)){const err410 = {};if(vErrors === null){vErrors = [err410];}else {vErrors.push(err410);}errors++;}}var valid152 = _errs561 === errors;if(valid152){const err411 = {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 = [err411];}else {vErrors.push(err411);}errors++;}else {errors = _errs560;if(vErrors !== null){if(_errs560){vErrors.length = _errs560;}else {vErrors = null;}}}if(typeof data216 === "string"){if(func2(data216) < 1){const err412 = {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 = [err412];}else {vErrors.push(err412);}errors++;}}else {const err413 = {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 = [err413];}else {vErrors.push(err413);}errors++;}}if(data214.tolerance !== undefined){let data217 = data214.tolerance;if(data217 && typeof data217 == "object" && !Array.isArray(data217)){if(data217.kind === undefined){const err414 = {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 = [err414];}else {vErrors.push(err414);}errors++;}if(data217.value === undefined){const err415 = {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 = [err415];}else {vErrors.push(err415);}errors++;}for(const key63 in data217){if(!((key63 === "kind") || (key63 === "value"))){const err416 = {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: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err416];}else {vErrors.push(err416);}errors++;}}if(data217.kind !== undefined){let data218 = data217.kind;if(typeof data218 !== "string"){const err417 = {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 = [err417];}else {vErrors.push(err417);}errors++;}if(!((data218 === "absolute") || (data218 === "percent"))){const err418 = {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 = [err418];}else {vErrors.push(err418);}errors++;}}if(data217.value !== undefined){let data219 = data217.value;if((typeof data219 == "number") && (isFinite(data219))){if(data219 < 0 || isNaN(data219)){const err419 = {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 = [err419];}else {vErrors.push(err419);}errors++;}}else {const err420 = {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 = [err420];}else {vErrors.push(err420);}errors++;}}}else {const err421 = {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 = [err421];}else {vErrors.push(err421);}errors++;}}if(data214.floors !== undefined){let data220 = data214.floors;if(data220 && typeof data220 == "object" && !Array.isArray(data220)){for(const key64 in data220){let data221 = data220[key64];if(data221 && typeof data221 == "object" && !Array.isArray(data221)){for(const key65 in data221){let data222 = data221[key65];if(!((typeof data222 == "number") && (isFinite(data222)))){const err422 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key64.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key65.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 = [err422];}else {vErrors.push(err422);}errors++;}}}else {const err423 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key64.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 = [err423];}else {vErrors.push(err423);}errors++;}}}else {const err424 = {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 = [err424];}else {vErrors.push(err424);}errors++;}}if(data214.components !== undefined){let data223 = data214.components;if(data223 && typeof data223 == "object" && !Array.isArray(data223)){for(const key66 in data223){let data224 = data223[key66];if(Array.isArray(data224)){const len30 = data224.length;for(let i32=0; i32<len30; i32++){let data225 = data224[i32];if(typeof data225 === "string"){if(func2(data225) < 1){const err425 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key66.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,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 = [err425];}else {vErrors.push(err425);}errors++;}}else {const err426 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key66.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,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 = [err426];}else {vErrors.push(err426);}errors++;}}}else {const err427 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key66.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 = [err427];}else {vErrors.push(err427);}errors++;}}}else {const err428 = {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 = [err428];}else {vErrors.push(err428);}errors++;}}if(data214.bundles !== undefined){let data226 = data214.bundles;if(Array.isArray(data226)){const len31 = data226.length;for(let i33=0; i33<len31; i33++){let data227 = data226[i33];if(data227 && typeof data227 == "object" && !Array.isArray(data227)){if(data227.name === undefined){const err429 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err429];}else {vErrors.push(err429);}errors++;}if(data227.path === undefined){const err430 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err430];}else {vErrors.push(err430);}errors++;}if(data227.limit === undefined){const err431 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err431];}else {vErrors.push(err431);}errors++;}for(const key67 in data227){if(!(((key67 === "name") || (key67 === "path")) || (key67 === "limit"))){const err432 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key67},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err432];}else {vErrors.push(err432);}errors++;}}if(data227.name !== undefined){let data228 = data227.name;if(typeof data228 === "string"){if(func2(data228) < 1){const err433 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err433];}else {vErrors.push(err433);}errors++;}}else {const err434 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err434];}else {vErrors.push(err434);}errors++;}}if(data227.path !== undefined){let data229 = data227.path;if(typeof data229 === "string"){if(func2(data229) < 1){const err435 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err435];}else {vErrors.push(err435);}errors++;}}else {const err436 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err436];}else {vErrors.push(err436);}errors++;}}if(data227.limit !== undefined){let data230 = data227.limit;if(typeof data230 === "string"){if(func2(data230) < 1){const err437 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err437];}else {vErrors.push(err437);}errors++;}}else {const err438 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/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 = [err438];}else {vErrors.push(err438);}errors++;}}}else {const err439 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,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 = [err439];}else {vErrors.push(err439);}errors++;}}}else {const err440 = {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 = [err440];}else {vErrors.push(err440);}errors++;}}}else {const err441 = {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 = [err441];}else {vErrors.push(err441);}errors++;}}if(data103.duplication !== undefined){let data231 = data103.duplication;if(data231 && typeof data231 == "object" && !Array.isArray(data231)){for(const key68 in data231){if(!((((((((key68 === "enabled") || (key68 === "baselinePath")) || (key68 === "tolerance")) || (key68 === "floors")) || (key68 === "components")) || (key68 === "targetDirs")) || (key68 === "refreshTimeoutMs")) || (key68 === "ignoreGlobs"))){const err442 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key68},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err442];}else {vErrors.push(err442);}errors++;}}if(data231.enabled !== undefined){if(typeof data231.enabled !== "boolean"){const err443 = {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 = [err443];}else {vErrors.push(err443);}errors++;}}if(data231.baselinePath !== undefined){let data233 = data231.baselinePath;const _errs602 = errors;const _errs603 = errors;if(typeof data233 === "string"){if(!pattern0.test(data233)){const err444 = {};if(vErrors === null){vErrors = [err444];}else {vErrors.push(err444);}errors++;}}var valid163 = _errs603 === errors;if(valid163){const err445 = {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 = [err445];}else {vErrors.push(err445);}errors++;}else {errors = _errs602;if(vErrors !== null){if(_errs602){vErrors.length = _errs602;}else {vErrors = null;}}}if(typeof data233 === "string"){if(func2(data233) < 1){const err446 = {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 = [err446];}else {vErrors.push(err446);}errors++;}}else {const err447 = {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 = [err447];}else {vErrors.push(err447);}errors++;}}if(data231.tolerance !== undefined){let data234 = data231.tolerance;if(data234 && typeof data234 == "object" && !Array.isArray(data234)){if(data234.kind === undefined){const err448 = {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 = [err448];}else {vErrors.push(err448);}errors++;}if(data234.value === undefined){const err449 = {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 = [err449];}else {vErrors.push(err449);}errors++;}for(const key69 in data234){if(!((key69 === "kind") || (key69 === "value"))){const err450 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err450];}else {vErrors.push(err450);}errors++;}}if(data234.kind !== undefined){let data235 = data234.kind;if(typeof data235 !== "string"){const err451 = {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 = [err451];}else {vErrors.push(err451);}errors++;}if(!((data235 === "absolute") || (data235 === "percent"))){const err452 = {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 = [err452];}else {vErrors.push(err452);}errors++;}}if(data234.value !== undefined){let data236 = data234.value;if((typeof data236 == "number") && (isFinite(data236))){if(data236 < 0 || isNaN(data236)){const err453 = {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 = [err453];}else {vErrors.push(err453);}errors++;}}else {const err454 = {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 = [err454];}else {vErrors.push(err454);}errors++;}}}else {const err455 = {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 = [err455];}else {vErrors.push(err455);}errors++;}}if(data231.floors !== undefined){let data237 = data231.floors;if(data237 && typeof data237 == "object" && !Array.isArray(data237)){for(const key70 in data237){let data238 = data237[key70];if(data238 && typeof data238 == "object" && !Array.isArray(data238)){for(const key71 in data238){let data239 = data238[key71];if(!((typeof data239 == "number") && (isFinite(data239)))){const err456 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key70.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key71.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 = [err456];}else {vErrors.push(err456);}errors++;}}}else {const err457 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key70.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 = [err457];}else {vErrors.push(err457);}errors++;}}}else {const err458 = {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 = [err458];}else {vErrors.push(err458);}errors++;}}if(data231.components !== undefined){let data240 = data231.components;if(data240 && typeof data240 == "object" && !Array.isArray(data240)){for(const key72 in data240){let data241 = data240[key72];if(Array.isArray(data241)){const len32 = data241.length;for(let i34=0; i34<len32; i34++){let data242 = data241[i34];if(typeof data242 === "string"){if(func2(data242) < 1){const err459 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,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 = [err459];}else {vErrors.push(err459);}errors++;}}else {const err460 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key72.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,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 = [err460];}else {vErrors.push(err460);}errors++;}}}else {const err461 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key72.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 = [err461];}else {vErrors.push(err461);}errors++;}}}else {const err462 = {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 = [err462];}else {vErrors.push(err462);}errors++;}}if(data231.targetDirs !== undefined){let data243 = data231.targetDirs;const _errs627 = errors;let valid170 = false;let passing4 = null;const _errs628 = errors;if(Array.isArray(data243)){const len33 = data243.length;for(let i35=0; i35<len33; i35++){if(typeof data243[i35] !== "string"){const err463 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i35,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 = [err463];}else {vErrors.push(err463);}errors++;}}}else {const err464 = {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 = [err464];}else {vErrors.push(err464);}errors++;}var _valid5 = _errs628 === errors;if(_valid5){valid170 = true;passing4 = 0;}const _errs632 = errors;if(data243 && typeof data243 == "object" && !Array.isArray(data243)){for(const key73 in data243){if(!((key73 === "append") || (key73 === "prepend"))){const err465 = {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: key73},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err465];}else {vErrors.push(err465);}errors++;}}if(data243.append !== undefined){let data245 = data243.append;if(Array.isArray(data245)){const len34 = data245.length;for(let i36=0; i36<len34; i36++){if(typeof data245[i36] !== "string"){const err466 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i36,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 = [err466];}else {vErrors.push(err466);}errors++;}}}else {const err467 = {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 = [err467];}else {vErrors.push(err467);}errors++;}}if(data243.prepend !== undefined){let data247 = data243.prepend;if(Array.isArray(data247)){const len35 = data247.length;for(let i37=0; i37<len35; i37++){if(typeof data247[i37] !== "string"){const err468 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i37,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 = [err468];}else {vErrors.push(err468);}errors++;}}}else {const err469 = {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 = [err469];}else {vErrors.push(err469);}errors++;}}}else {const err470 = {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 = [err470];}else {vErrors.push(err470);}errors++;}var _valid5 = _errs632 === errors;if(_valid5 && valid170){valid170 = false;passing4 = [passing4, 1];}else {if(_valid5){valid170 = true;passing4 = 1;}}if(!valid170){const err471 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err471];}else {vErrors.push(err471);}errors++;}else {errors = _errs627;if(vErrors !== null){if(_errs627){vErrors.length = _errs627;}else {vErrors = null;}}}}if(data231.refreshTimeoutMs !== undefined){let data249 = data231.refreshTimeoutMs;if(!(((typeof data249 == "number") && (!(data249 % 1) && !isNaN(data249))) && (isFinite(data249)))){const err472 = {instancePath:instancePath+"/delivery/quality/gates/duplication/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/refreshTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err472];}else {vErrors.push(err472);}errors++;}if((typeof data249 == "number") && (isFinite(data249))){if(data249 < 1 || isNaN(data249)){const err473 = {instancePath:instancePath+"/delivery/quality/gates/duplication/refreshTimeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/refreshTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err473];}else {vErrors.push(err473);}errors++;}}}if(data231.ignoreGlobs !== undefined){let data250 = data231.ignoreGlobs;if(Array.isArray(data250)){const len36 = data250.length;for(let i38=0; i38<len36; i38++){let data251 = data250[i38];if(typeof data251 === "string"){if(func2(data251) < 1){const err474 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,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 = [err474];}else {vErrors.push(err474);}errors++;}}else {const err475 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,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 = [err475];}else {vErrors.push(err475);}errors++;}}}else {const err476 = {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 = [err476];}else {vErrors.push(err476);}errors++;}}}else {const err477 = {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 = [err477];}else {vErrors.push(err477);}errors++;}}}else {const err478 = {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 = [err478];}else {vErrors.push(err478);}errors++;}}if(data99.formatAutofix !== undefined){let data252 = data99.formatAutofix;if(data252 && typeof data252 == "object" && !Array.isArray(data252)){for(const key74 in data252){if(!(key74 === "timeoutMs")){const err479 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err479];}else {vErrors.push(err479);}errors++;}}if(data252.timeoutMs !== undefined){let data253 = data252.timeoutMs;if(!(((typeof data253 == "number") && (!(data253 % 1) && !isNaN(data253))) && (isFinite(data253)))){const err480 = {instancePath:instancePath+"/delivery/quality/formatAutofix/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/properties/timeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err480];}else {vErrors.push(err480);}errors++;}if((typeof data253 == "number") && (isFinite(data253))){if(data253 < 1 || isNaN(data253)){const err481 = {instancePath:instancePath+"/delivery/quality/formatAutofix/timeoutMs",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/properties/timeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err481];}else {vErrors.push(err481);}errors++;}}}}else {const err482 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err482];}else {vErrors.push(err482);}errors++;}}if(data99.codingGuardrails !== undefined){let data254 = data99.codingGuardrails;if(data254 && typeof data254 == "object" && !Array.isArray(data254)){for(const key75 in data254){if(!(((key75 === "cyclomaticFlag") || (key75 === "cyclomaticMustFix")) || (key75 === "requireSiblingTest"))){const err483 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err483];}else {vErrors.push(err483);}errors++;}}if(data254.cyclomaticFlag !== undefined){let data255 = data254.cyclomaticFlag;if(!(((typeof data255 == "number") && (!(data255 % 1) && !isNaN(data255))) && (isFinite(data255)))){const err484 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticFlag",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticFlag/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err484];}else {vErrors.push(err484);}errors++;}if((typeof data255 == "number") && (isFinite(data255))){if(data255 < 1 || isNaN(data255)){const err485 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticFlag",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticFlag/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err485];}else {vErrors.push(err485);}errors++;}}}if(data254.cyclomaticMustFix !== undefined){let data256 = data254.cyclomaticMustFix;if(!(((typeof data256 == "number") && (!(data256 % 1) && !isNaN(data256))) && (isFinite(data256)))){const err486 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err486];}else {vErrors.push(err486);}errors++;}if((typeof data256 == "number") && (isFinite(data256))){if(data256 < 1 || isNaN(data256)){const err487 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err487];}else {vErrors.push(err487);}errors++;}}}if(data254.requireSiblingTest !== undefined){if(typeof data254.requireSiblingTest !== "boolean"){const err488 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/requireSiblingTest",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/requireSiblingTest/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err488];}else {vErrors.push(err488);}errors++;}}}else {const err489 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err489];}else {vErrors.push(err489);}errors++;}}if(data99.autoRefresh !== undefined){let data258 = data99.autoRefresh;if(data258 && typeof data258 == "object" && !Array.isArray(data258)){for(const key76 in data258){if(!(((key76 === "enabled") || (key76 === "crapJumpCap")) || (key76 === "scope"))){const err490 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key76},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err490];}else {vErrors.push(err490);}errors++;}}if(data258.enabled !== undefined){if(typeof data258.enabled !== "boolean"){const err491 = {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 = [err491];}else {vErrors.push(err491);}errors++;}}if(data258.crapJumpCap !== undefined){let data260 = data258.crapJumpCap;if((typeof data260 == "number") && (isFinite(data260))){if(data260 < 0 || isNaN(data260)){const err492 = {instancePath:instancePath+"/delivery/quality/autoRefresh/crapJumpCap",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/crapJumpCap/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err492];}else {vErrors.push(err492);}errors++;}}else {const err493 = {instancePath:instancePath+"/delivery/quality/autoRefresh/crapJumpCap",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/crapJumpCap/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err493];}else {vErrors.push(err493);}errors++;}}if(data258.scope !== undefined){let data261 = data258.scope;if(typeof data261 !== "string"){const err494 = {instancePath:instancePath+"/delivery/quality/autoRefresh/scope",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/scope/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err494];}else {vErrors.push(err494);}errors++;}if(!((data261 === "diff") || (data261 === "full"))){const err495 = {instancePath:instancePath+"/delivery/quality/autoRefresh/scope",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/properties/scope/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.autoRefresh.properties.scope.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err495];}else {vErrors.push(err495);}errors++;}}}else {const err496 = {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 = [err496];}else {vErrors.push(err496);}errors++;}}if(data99.baselineEpsilon !== undefined){let data262 = data99.baselineEpsilon;if(data262 && typeof data262 == "object" && !Array.isArray(data262)){for(const key77 in data262){if(!((((((((key77 === "maintainability") || (key77 === "crap")) || (key77 === "coverage")) || (key77 === "mutation")) || (key77 === "lint")) || (key77 === "lighthouse")) || (key77 === "bundle-size")) || (key77 === "duplication"))){const err497 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err497];}else {vErrors.push(err497);}errors++;}}if(data262.maintainability !== undefined){let data263 = data262.maintainability;if((typeof data263 == "number") && (isFinite(data263))){if(data263 < 0 || isNaN(data263)){const err498 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/maintainability/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err498];}else {vErrors.push(err498);}errors++;}}else {const err499 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/maintainability/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err499];}else {vErrors.push(err499);}errors++;}}if(data262.crap !== undefined){let data264 = data262.crap;if((typeof data264 == "number") && (isFinite(data264))){if(data264 < 0 || isNaN(data264)){const err500 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/crap",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/crap/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err500];}else {vErrors.push(err500);}errors++;}}else {const err501 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/crap",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/crap/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err501];}else {vErrors.push(err501);}errors++;}}if(data262.coverage !== undefined){let data265 = data262.coverage;if((typeof data265 == "number") && (isFinite(data265))){if(data265 < 0 || isNaN(data265)){const err502 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/coverage/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err502];}else {vErrors.push(err502);}errors++;}}else {const err503 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/coverage/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err503];}else {vErrors.push(err503);}errors++;}}if(data262.mutation !== undefined){let data266 = data262.mutation;if((typeof data266 == "number") && (isFinite(data266))){if(data266 < 0 || isNaN(data266)){const err504 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/mutation/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err504];}else {vErrors.push(err504);}errors++;}}else {const err505 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/mutation/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err505];}else {vErrors.push(err505);}errors++;}}if(data262.lint !== undefined){let data267 = data262.lint;if((typeof data267 == "number") && (isFinite(data267))){if(data267 < 0 || isNaN(data267)){const err506 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lint",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lint/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err506];}else {vErrors.push(err506);}errors++;}}else {const err507 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lint",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lint/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err507];}else {vErrors.push(err507);}errors++;}}if(data262.lighthouse !== undefined){let data268 = data262.lighthouse;if((typeof data268 == "number") && (isFinite(data268))){if(data268 < 0 || isNaN(data268)){const err508 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lighthouse/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err508];}else {vErrors.push(err508);}errors++;}}else {const err509 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/lighthouse/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err509];}else {vErrors.push(err509);}errors++;}}if(data262["bundle-size"] !== undefined){let data269 = data262["bundle-size"];if((typeof data269 == "number") && (isFinite(data269))){if(data269 < 0 || isNaN(data269)){const err510 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/bundle-size/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err510];}else {vErrors.push(err510);}errors++;}}else {const err511 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/bundle-size/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err511];}else {vErrors.push(err511);}errors++;}}if(data262.duplication !== undefined){let data270 = data262.duplication;if((typeof data270 == "number") && (isFinite(data270))){if(data270 < 0 || isNaN(data270)){const err512 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/duplication/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err512];}else {vErrors.push(err512);}errors++;}}else {const err513 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/properties/duplication/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err513];}else {vErrors.push(err513);}errors++;}}}else {const err514 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err514];}else {vErrors.push(err514);}errors++;}}if(data99.requireBaselines !== undefined){if(typeof data99.requireBaselines !== "boolean"){const err515 = {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 = [err515];}else {vErrors.push(err515);}errors++;}}if(data99.navigability !== undefined){let data272 = data99.navigability;if(data272 && typeof data272 == "object" && !Array.isArray(data272)){for(const key78 in data272){if(!(((key78 === "routeGlobs") || (key78 === "navRegistry")) || (key78 === "journeySuite"))){const err516 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key78},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err516];}else {vErrors.push(err516);}errors++;}}if(data272.routeGlobs !== undefined){let data273 = data272.routeGlobs;if(Array.isArray(data273)){const len37 = data273.length;for(let i39=0; i39<len37; i39++){if(typeof data273[i39] !== "string"){const err517 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i39,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err517];}else {vErrors.push(err517);}errors++;}}}else {const err518 = {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 = [err518];}else {vErrors.push(err518);}errors++;}}if(data272.navRegistry !== undefined){let data275 = data272.navRegistry;if(Array.isArray(data275)){const len38 = data275.length;for(let i40=0; i40<len38; i40++){if(typeof data275[i40] !== "string"){const err519 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i40,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err519];}else {vErrors.push(err519);}errors++;}}}else {const err520 = {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 = [err520];}else {vErrors.push(err520);}errors++;}}if(data272.journeySuite !== undefined){if(typeof data272.journeySuite !== "string"){const err521 = {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 = [err521];}else {vErrors.push(err521);}errors++;}}}else {const err522 = {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 = [err522];}else {vErrors.push(err522);}errors++;}}}else {const err523 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err523];}else {vErrors.push(err523);}errors++;}}if(data66.mergeWatch !== undefined){let data278 = data66.mergeWatch;if(data278 && typeof data278 == "object" && !Array.isArray(data278)){for(const key79 in data278){if(!(((((key79 === "mode") || (key79 === "intervalSeconds")) || (key79 === "maxWaitSeconds")) || (key79 === "maxBudgetSeconds")) || (key79 === "updateAttempts"))){const err524 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key79},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err524];}else {vErrors.push(err524);}errors++;}}if(data278.mode !== undefined){let data279 = data278.mode;if(typeof data279 !== "string"){const err525 = {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 = [err525];}else {vErrors.push(err525);}errors++;}if(!((data279 === "sync") || (data279 === "async"))){const err526 = {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 = [err526];}else {vErrors.push(err526);}errors++;}}if(data278.intervalSeconds !== undefined){let data280 = data278.intervalSeconds;if(!(((typeof data280 == "number") && (!(data280 % 1) && !isNaN(data280))) && (isFinite(data280)))){const err527 = {instancePath:instancePath+"/delivery/mergeWatch/intervalSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/intervalSeconds/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err527];}else {vErrors.push(err527);}errors++;}if((typeof data280 == "number") && (isFinite(data280))){if(data280 < 1 || isNaN(data280)){const err528 = {instancePath:instancePath+"/delivery/mergeWatch/intervalSeconds",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/intervalSeconds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err528];}else {vErrors.push(err528);}errors++;}}}if(data278.maxWaitSeconds !== undefined){let data281 = data278.maxWaitSeconds;if(!(((typeof data281 == "number") && (!(data281 % 1) && !isNaN(data281))) && (isFinite(data281)))){const err529 = {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 = [err529];}else {vErrors.push(err529);}errors++;}if((typeof data281 == "number") && (isFinite(data281))){if(data281 < 1 || isNaN(data281)){const err530 = {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 = [err530];}else {vErrors.push(err530);}errors++;}}}if(data278.maxBudgetSeconds !== undefined){let data282 = data278.maxBudgetSeconds;if(!(((typeof data282 == "number") && (!(data282 % 1) && !isNaN(data282))) && (isFinite(data282)))){const err531 = {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 = [err531];}else {vErrors.push(err531);}errors++;}if((typeof data282 == "number") && (isFinite(data282))){if(data282 < 1 || isNaN(data282)){const err532 = {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 = [err532];}else {vErrors.push(err532);}errors++;}}}if(data278.updateAttempts !== undefined){let data283 = data278.updateAttempts;if(!(((typeof data283 == "number") && (!(data283 % 1) && !isNaN(data283))) && (isFinite(data283)))){const err533 = {instancePath:instancePath+"/delivery/mergeWatch/updateAttempts",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/updateAttempts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err533];}else {vErrors.push(err533);}errors++;}if((typeof data283 == "number") && (isFinite(data283))){if(data283 < 0 || isNaN(data283)){const err534 = {instancePath:instancePath+"/delivery/mergeWatch/updateAttempts",schemaPath:"#/properties/delivery/properties/mergeWatch/properties/updateAttempts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err534];}else {vErrors.push(err534);}errors++;}}}}else {const err535 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err535];}else {vErrors.push(err535);}errors++;}}if(data66.codeReview !== undefined){let data284 = data66.codeReview;if(data284 && typeof data284 == "object" && !Array.isArray(data284)){for(const key80 in data284){if(!(((((key80 === "providers") || (key80 === "providerConfig")) || (key80 === "maxFixAttempts")) || (key80 === "maxFixScopeFiles")) || (key80 === "autoFixSeverity"))){const err536 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key80},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err536];}else {vErrors.push(err536);}errors++;}}if(data284.providers !== undefined){let data285 = data284.providers;if(Array.isArray(data285)){const len39 = data285.length;for(let i41=0; i41<len39; i41++){let data286 = data285[i41];if(data286 && typeof data286 == "object" && !Array.isArray(data286)){if(data286.name === undefined){const err537 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err537];}else {vErrors.push(err537);}errors++;}for(const key81 in data286){if(!(((((key81 === "name") || (key81 === "scopes")) || (key81 === "optional")) || (key81 === "manualPrompt")) || (key81 === "when"))){const err538 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key81},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err538];}else {vErrors.push(err538);}errors++;}}if(data286.name !== undefined){let data287 = data286.name;if(typeof data287 !== "string"){const err539 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err539];}else {vErrors.push(err539);}errors++;}if(!((((data287 === "native") || (data287 === "codex")) || (data287 === "security-review")) || (data287 === "ultrareview"))){const err540 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err540];}else {vErrors.push(err540);}errors++;}}if(data286.scopes !== undefined){let data288 = data286.scopes;if(Array.isArray(data288)){const len40 = data288.length;for(let i42=0; i42<len40; i42++){let data289 = data288[i42];if(typeof data289 !== "string"){const err541 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,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 = [err541];}else {vErrors.push(err541);}errors++;}if(!((data289 === "story") || (data289 === "epic"))){const err542 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,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 = [err542];}else {vErrors.push(err542);}errors++;}}}else {const err543 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err543];}else {vErrors.push(err543);}errors++;}}if(data286.optional !== undefined){if(typeof data286.optional !== "boolean"){const err544 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err544];}else {vErrors.push(err544);}errors++;}}if(data286.manualPrompt !== undefined){if(typeof data286.manualPrompt !== "boolean"){const err545 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err545];}else {vErrors.push(err545);}errors++;}}if(data286.when !== undefined){let data292 = data286.when;if(data292 && typeof data292 == "object" && !Array.isArray(data292)){for(const key82 in data292){if(!((key82 === "label") || (key82 === "labelAny"))){const err546 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key82},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err546];}else {vErrors.push(err546);}errors++;}}if(data292.label !== undefined){let data293 = data292.label;if(typeof data293 === "string"){if(func2(data293) < 1){const err547 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err547];}else {vErrors.push(err547);}errors++;}}else {const err548 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err548];}else {vErrors.push(err548);}errors++;}}if(data292.labelAny !== undefined){let data294 = data292.labelAny;if(Array.isArray(data294)){if(data294.length < 1){const err549 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err549];}else {vErrors.push(err549);}errors++;}const len41 = data294.length;for(let i43=0; i43<len41; i43++){let data295 = data294[i43];if(typeof data295 === "string"){if(func2(data295) < 1){const err550 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,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 = [err550];}else {vErrors.push(err550);}errors++;}}else {const err551 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,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 = [err551];}else {vErrors.push(err551);}errors++;}}}else {const err552 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err552];}else {vErrors.push(err552);}errors++;}}}else {const err553 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/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 = [err553];}else {vErrors.push(err553);}errors++;}}}else {const err554 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err554];}else {vErrors.push(err554);}errors++;}}}else {const err555 = {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 = [err555];}else {vErrors.push(err555);}errors++;}}if(data284.providerConfig !== undefined){let data296 = data284.providerConfig;if(data296 && typeof data296 == "object" && !Array.isArray(data296)){}else {const err556 = {instancePath:instancePath+"/delivery/codeReview/providerConfig",schemaPath:"#/properties/delivery/properties/codeReview/properties/providerConfig/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err556];}else {vErrors.push(err556);}errors++;}}if(data284.maxFixAttempts !== undefined){let data297 = data284.maxFixAttempts;if(!(((typeof data297 == "number") && (!(data297 % 1) && !isNaN(data297))) && (isFinite(data297)))){const err557 = {instancePath:instancePath+"/delivery/codeReview/maxFixAttempts",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixAttempts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err557];}else {vErrors.push(err557);}errors++;}if((typeof data297 == "number") && (isFinite(data297))){if(data297 < 0 || isNaN(data297)){const err558 = {instancePath:instancePath+"/delivery/codeReview/maxFixAttempts",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixAttempts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err558];}else {vErrors.push(err558);}errors++;}}}if(data284.maxFixScopeFiles !== undefined){let data298 = data284.maxFixScopeFiles;if(!(((typeof data298 == "number") && (!(data298 % 1) && !isNaN(data298))) && (isFinite(data298)))){const err559 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err559];}else {vErrors.push(err559);}errors++;}if((typeof data298 == "number") && (isFinite(data298))){if(data298 < 1 || isNaN(data298)){const err560 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err560];}else {vErrors.push(err560);}errors++;}}}if(data284.autoFixSeverity !== undefined){let data299 = data284.autoFixSeverity;if(typeof data299 !== "string"){const err561 = {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 = [err561];}else {vErrors.push(err561);}errors++;}if(!((data299 === "high") || (data299 === "medium"))){const err562 = {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 = [err562];}else {vErrors.push(err562);}errors++;}}}else {const err563 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err563];}else {vErrors.push(err563);}errors++;}}if(data66.review !== undefined){let data300 = data66.review;if(data300 && typeof data300 == "object" && !Array.isArray(data300)){for(const key83 in data300){if(!(key83 === "lensDiffFloor")){const err564 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key83},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err564];}else {vErrors.push(err564);}errors++;}}if(data300.lensDiffFloor !== undefined){let data301 = data300.lensDiffFloor;if(!(((typeof data301 == "number") && (!(data301 % 1) && !isNaN(data301))) && (isFinite(data301)))){const err565 = {instancePath:instancePath+"/delivery/review/lensDiffFloor",schemaPath:"#/properties/delivery/properties/review/properties/lensDiffFloor/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err565];}else {vErrors.push(err565);}errors++;}if((typeof data301 == "number") && (isFinite(data301))){if(data301 < 0 || isNaN(data301)){const err566 = {instancePath:instancePath+"/delivery/review/lensDiffFloor",schemaPath:"#/properties/delivery/properties/review/properties/lensDiffFloor/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err566];}else {vErrors.push(err566);}errors++;}}}}else {const err567 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err567];}else {vErrors.push(err567);}errors++;}}if(data66.refactorStage !== undefined){let data302 = data66.refactorStage;if(data302 && typeof data302 == "object" && !Array.isArray(data302)){for(const key84 in data302){if(!(key84 === "enabled")){const err568 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key84},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err568];}else {vErrors.push(err568);}errors++;}}if(data302.enabled !== undefined){if(typeof data302.enabled !== "boolean"){const err569 = {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 = [err569];}else {vErrors.push(err569);}errors++;}}}else {const err570 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err570];}else {vErrors.push(err570);}errors++;}}if(data66.acceptanceEval !== undefined){let data304 = data66.acceptanceEval;if(data304 && typeof data304 == "object" && !Array.isArray(data304)){for(const key85 in data304){if(!(key85 === "maxRounds")){const err571 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key85},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err571];}else {vErrors.push(err571);}errors++;}}if(data304.maxRounds !== undefined){let data305 = data304.maxRounds;if(!(((typeof data305 == "number") && (!(data305 % 1) && !isNaN(data305))) && (isFinite(data305)))){const err572 = {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 = [err572];}else {vErrors.push(err572);}errors++;}if((typeof data305 == "number") && (isFinite(data305))){if(data305 < 1 || isNaN(data305)){const err573 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err573];}else {vErrors.push(err573);}errors++;}}}}else {const err574 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err574];}else {vErrors.push(err574);}errors++;}}if(data66.feedbackLoop !== undefined){let data306 = data66.feedbackLoop;if(data306 && typeof data306 == "object" && !Array.isArray(data306)){for(const key86 in data306){if(!(((key86 === "auditResultsAutoFile") || (key86 === "retroProposals")) || (key86 === "frictionWindowDays"))){const err575 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key86},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err575];}else {vErrors.push(err575);}errors++;}}if(data306.auditResultsAutoFile !== undefined){if(typeof data306.auditResultsAutoFile !== "boolean"){const err576 = {instancePath:instancePath+"/delivery/feedbackLoop/auditResultsAutoFile",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/auditResultsAutoFile/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err576];}else {vErrors.push(err576);}errors++;}}if(data306.retroProposals !== undefined){if(typeof data306.retroProposals !== "boolean"){const err577 = {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 = [err577];}else {vErrors.push(err577);}errors++;}}if(data306.frictionWindowDays !== undefined){let data309 = data306.frictionWindowDays;if(!(((typeof data309 == "number") && (!(data309 % 1) && !isNaN(data309))) && (isFinite(data309)))){const err578 = {instancePath:instancePath+"/delivery/feedbackLoop/frictionWindowDays",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/frictionWindowDays/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err578];}else {vErrors.push(err578);}errors++;}if((typeof data309 == "number") && (isFinite(data309))){if(data309 < 1 || isNaN(data309)){const err579 = {instancePath:instancePath+"/delivery/feedbackLoop/frictionWindowDays",schemaPath:"#/properties/delivery/properties/feedbackLoop/properties/frictionWindowDays/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err579];}else {vErrors.push(err579);}errors++;}}}}else {const err580 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err580];}else {vErrors.push(err580);}errors++;}}if(data66.auditToStories !== undefined){let data310 = data66.auditToStories;if(data310 && typeof data310 == "object" && !Array.isArray(data310)){for(const key87 in data310){if(!((key87 === "severityFloor") || (key87 === "autoComment"))){const err581 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key87},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err581];}else {vErrors.push(err581);}errors++;}}if(data310.severityFloor !== undefined){let data311 = data310.severityFloor;if(typeof data311 !== "string"){const err582 = {instancePath:instancePath+"/delivery/auditToStories/severityFloor",schemaPath:"#/properties/delivery/properties/auditToStories/properties/severityFloor/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err582];}else {vErrors.push(err582);}errors++;}if(!(((((data311 === "critical") || (data311 === "high")) || (data311 === "medium")) || (data311 === "low")) || (data311 === "all"))){const err583 = {instancePath:instancePath+"/delivery/auditToStories/severityFloor",schemaPath:"#/properties/delivery/properties/auditToStories/properties/severityFloor/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.auditToStories.properties.severityFloor.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err583];}else {vErrors.push(err583);}errors++;}}if(data310.autoComment !== undefined){if(typeof data310.autoComment !== "boolean"){const err584 = {instancePath:instancePath+"/delivery/auditToStories/autoComment",schemaPath:"#/properties/delivery/properties/auditToStories/properties/autoComment/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err584];}else {vErrors.push(err584);}errors++;}}}else {const err585 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err585];}else {vErrors.push(err585);}errors++;}}if(data66.ci !== undefined){let data313 = data66.ci;if(data313 && typeof data313 == "object" && !Array.isArray(data313)){for(const key88 in data313){if(!((((key88 === "watch") || (key88 === "autoMerge")) || (key88 === "blockOnAdvisoryFailure")) || (key88 === "advisoryAllowlist"))){const err586 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key88},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err586];}else {vErrors.push(err586);}errors++;}}if(data313.watch !== undefined){let data314 = data313.watch;if(data314 && typeof data314 == "object" && !Array.isArray(data314)){for(const key89 in data314){if(!((((key89 === "pollIntervalMs") || (key89 === "maxPolls")) || (key89 === "maxResumes")) || (key89 === "attachWindowMs"))){const err587 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key89},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err587];}else {vErrors.push(err587);}errors++;}}if(data314.pollIntervalMs !== undefined){let data315 = data314.pollIntervalMs;if(!(((typeof data315 == "number") && (!(data315 % 1) && !isNaN(data315))) && (isFinite(data315)))){const err588 = {instancePath:instancePath+"/delivery/ci/watch/pollIntervalMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/pollIntervalMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err588];}else {vErrors.push(err588);}errors++;}if((typeof data315 == "number") && (isFinite(data315))){if(data315 < 1 || isNaN(data315)){const err589 = {instancePath:instancePath+"/delivery/ci/watch/pollIntervalMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/pollIntervalMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err589];}else {vErrors.push(err589);}errors++;}}}if(data314.maxPolls !== undefined){let data316 = data314.maxPolls;if(!(((typeof data316 == "number") && (!(data316 % 1) && !isNaN(data316))) && (isFinite(data316)))){const err590 = {instancePath:instancePath+"/delivery/ci/watch/maxPolls",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxPolls/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err590];}else {vErrors.push(err590);}errors++;}if((typeof data316 == "number") && (isFinite(data316))){if(data316 < 1 || isNaN(data316)){const err591 = {instancePath:instancePath+"/delivery/ci/watch/maxPolls",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxPolls/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err591];}else {vErrors.push(err591);}errors++;}}}if(data314.maxResumes !== undefined){let data317 = data314.maxResumes;if(!(((typeof data317 == "number") && (!(data317 % 1) && !isNaN(data317))) && (isFinite(data317)))){const err592 = {instancePath:instancePath+"/delivery/ci/watch/maxResumes",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxResumes/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err592];}else {vErrors.push(err592);}errors++;}if((typeof data317 == "number") && (isFinite(data317))){if(data317 < 0 || isNaN(data317)){const err593 = {instancePath:instancePath+"/delivery/ci/watch/maxResumes",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/maxResumes/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err593];}else {vErrors.push(err593);}errors++;}}}if(data314.attachWindowMs !== undefined){let data318 = data314.attachWindowMs;if(!(((typeof data318 == "number") && (!(data318 % 1) && !isNaN(data318))) && (isFinite(data318)))){const err594 = {instancePath:instancePath+"/delivery/ci/watch/attachWindowMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/attachWindowMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err594];}else {vErrors.push(err594);}errors++;}if((typeof data318 == "number") && (isFinite(data318))){if(data318 < 1 || isNaN(data318)){const err595 = {instancePath:instancePath+"/delivery/ci/watch/attachWindowMs",schemaPath:"#/properties/delivery/properties/ci/properties/watch/properties/attachWindowMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err595];}else {vErrors.push(err595);}errors++;}}}}else {const err596 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err596];}else {vErrors.push(err596);}errors++;}}if(data313.autoMerge !== undefined){let data319 = data313.autoMerge;if(typeof data319 !== "string"){const err597 = {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 = [err597];}else {vErrors.push(err597);}errors++;}if(!((data319 === "trust-ci") || (data319 === "strict"))){const err598 = {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 = [err598];}else {vErrors.push(err598);}errors++;}}if(data313.blockOnAdvisoryFailure !== undefined){if(typeof data313.blockOnAdvisoryFailure !== "boolean"){const err599 = {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 = [err599];}else {vErrors.push(err599);}errors++;}}if(data313.advisoryAllowlist !== undefined){let data321 = data313.advisoryAllowlist;if(Array.isArray(data321)){const len42 = data321.length;for(let i44=0; i44<len42; i44++){if(typeof data321[i44] !== "string"){const err600 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i44,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err600];}else {vErrors.push(err600);}errors++;}}}else {const err601 = {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 = [err601];}else {vErrors.push(err601);}errors++;}}}else {const err602 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err602];}else {vErrors.push(err602);}errors++;}}if(data66.routing !== undefined){let data323 = data66.routing;if(data323 && typeof data323 == "object" && !Array.isArray(data323)){for(const key90 in data323){if(!((((key90 === "roleScopedAgents") || (key90 === "freshCriticSampleRate")) || (key90 === "ceremonyProfile")) || (key90 === "closeAndLand"))){const err603 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key90},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err603];}else {vErrors.push(err603);}errors++;}}if(data323.roleScopedAgents !== undefined){if(typeof data323.roleScopedAgents !== "boolean"){const err604 = {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 = [err604];}else {vErrors.push(err604);}errors++;}}if(data323.freshCriticSampleRate !== undefined){let data325 = data323.freshCriticSampleRate;if((typeof data325 == "number") && (isFinite(data325))){if(data325 > 1 || isNaN(data325)){const err605 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1"};if(vErrors === null){vErrors = [err605];}else {vErrors.push(err605);}errors++;}if(data325 < 0 || isNaN(data325)){const err606 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err606];}else {vErrors.push(err606);}errors++;}}else {const err607 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err607];}else {vErrors.push(err607);}errors++;}}if(data323.ceremonyProfile !== undefined){let data326 = data323.ceremonyProfile;if(typeof data326 !== "string"){const err608 = {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 = [err608];}else {vErrors.push(err608);}errors++;}if(!(((data326 === "minimal") || (data326 === "standard")) || (data326 === "strict"))){const err609 = {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 = [err609];}else {vErrors.push(err609);}errors++;}}if(data323.closeAndLand !== undefined){if(typeof data323.closeAndLand !== "boolean"){const err610 = {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 = [err610];}else {vErrors.push(err610);}errors++;}}}else {const err611 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err611];}else {vErrors.push(err611);}errors++;}}}else {const err612 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err612];}else {vErrors.push(err612);}errors++;}}if(data.qa !== undefined){let data328 = data.qa;if(data328 && typeof data328 == "object" && !Array.isArray(data328)){for(const key91 in data328){if(!(((((((key91 === "featureRoot") || (key91 === "fixturesManifest")) || (key91 === "environments")) || (key91 === "personas")) || (key91 === "gherkinLint")) || (key91 === "consoleAllowlist")) || (key91 === "designTokens"))){const err613 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key91},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err613];}else {vErrors.push(err613);}errors++;}}if(data328.featureRoot !== undefined){let data329 = data328.featureRoot;const _errs824 = errors;const _errs825 = errors;if(typeof data329 === "string"){if(!pattern0.test(data329)){const err614 = {};if(vErrors === null){vErrors = [err614];}else {vErrors.push(err614);}errors++;}}var valid210 = _errs825 === errors;if(valid210){const err615 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err615];}else {vErrors.push(err615);}errors++;}else {errors = _errs824;if(vErrors !== null){if(_errs824){vErrors.length = _errs824;}else {vErrors = null;}}}if(typeof data329 === "string"){if(func2(data329) < 1){const err616 = {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 = [err616];}else {vErrors.push(err616);}errors++;}}else {const err617 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err617];}else {vErrors.push(err617);}errors++;}}if(data328.fixturesManifest !== undefined){let data330 = data328.fixturesManifest;const _errs828 = errors;const _errs829 = errors;if(typeof data330 === "string"){if(!pattern0.test(data330)){const err618 = {};if(vErrors === null){vErrors = [err618];}else {vErrors.push(err618);}errors++;}}var valid211 = _errs829 === errors;if(valid211){const err619 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err619];}else {vErrors.push(err619);}errors++;}else {errors = _errs828;if(vErrors !== null){if(_errs828){vErrors.length = _errs828;}else {vErrors = null;}}}if(typeof data330 === "string"){if(func2(data330) < 1){const err620 = {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 = [err620];}else {vErrors.push(err620);}errors++;}}else {const err621 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err621];}else {vErrors.push(err621);}errors++;}}if(data328.environments !== undefined){let data331 = data328.environments;if(data331 && typeof data331 == "object" && !Array.isArray(data331)){if(Object.keys(data331).length < 1){const err622 = {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 = [err622];}else {vErrors.push(err622);}errors++;}for(const key92 in data331){let data332 = data331[key92];if(data332 && typeof data332 == "object" && !Array.isArray(data332)){if(data332.baseUrl === undefined){const err623 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err623];}else {vErrors.push(err623);}errors++;}for(const key93 in data332){if(!(((key93 === "baseUrl") || (key93 === "signInSeam")) || (key93 === "allowWrites"))){const err624 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key93},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err624];}else {vErrors.push(err624);}errors++;}}if(data332.baseUrl !== undefined){let data333 = data332.baseUrl;const _errs838 = errors;const _errs839 = errors;if(typeof data333 === "string"){if(!pattern0.test(data333)){const err625 = {};if(vErrors === null){vErrors = [err625];}else {vErrors.push(err625);}errors++;}}var valid214 = _errs839 === errors;if(valid214){const err626 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err626];}else {vErrors.push(err626);}errors++;}else {errors = _errs838;if(vErrors !== null){if(_errs838){vErrors.length = _errs838;}else {vErrors = null;}}}if(typeof data333 === "string"){if(func2(data333) < 1){const err627 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err627];}else {vErrors.push(err627);}errors++;}}else {const err628 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err628];}else {vErrors.push(err628);}errors++;}}if(data332.signInSeam !== undefined){let data334 = data332.signInSeam;const _errs841 = errors;let valid215 = false;let passing5 = null;const _errs842 = errors;if(data334 && typeof data334 == "object" && !Array.isArray(data334)){if(data334.urlTemplate === undefined){const err629 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err629];}else {vErrors.push(err629);}errors++;}for(const key94 in data334){if(!(key94 === "urlTemplate")){const err630 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key94},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err630];}else {vErrors.push(err630);}errors++;}}if(data334.urlTemplate !== undefined){let data335 = data334.urlTemplate;const _errs847 = errors;const _errs848 = errors;if(typeof data335 === "string"){if(!pattern0.test(data335)){const err631 = {};if(vErrors === null){vErrors = [err631];}else {vErrors.push(err631);}errors++;}}var valid217 = _errs848 === errors;if(valid217){const err632 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err632];}else {vErrors.push(err632);}errors++;}else {errors = _errs847;if(vErrors !== null){if(_errs847){vErrors.length = _errs847;}else {vErrors = null;}}}if(typeof data335 === "string"){if(func2(data335) < 1){const err633 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err633];}else {vErrors.push(err633);}errors++;}}else {const err634 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err634];}else {vErrors.push(err634);}errors++;}}}else {const err635 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err635];}else {vErrors.push(err635);}errors++;}var _valid6 = _errs842 === errors;if(_valid6){valid215 = true;passing5 = 0;}const _errs849 = errors;if(data334 && typeof data334 == "object" && !Array.isArray(data334)){if(data334.skill === undefined){const err636 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err636];}else {vErrors.push(err636);}errors++;}for(const key95 in data334){if(!(key95 === "skill")){const err637 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key95},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err637];}else {vErrors.push(err637);}errors++;}}if(data334.skill !== undefined){let data336 = data334.skill;const _errs854 = errors;const _errs855 = errors;if(typeof data336 === "string"){if(!pattern0.test(data336)){const err638 = {};if(vErrors === null){vErrors = [err638];}else {vErrors.push(err638);}errors++;}}var valid219 = _errs855 === errors;if(valid219){const err639 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err639];}else {vErrors.push(err639);}errors++;}else {errors = _errs854;if(vErrors !== null){if(_errs854){vErrors.length = _errs854;}else {vErrors = null;}}}if(typeof data336 === "string"){if(func2(data336) < 1){const err640 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err640];}else {vErrors.push(err640);}errors++;}}else {const err641 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err641];}else {vErrors.push(err641);}errors++;}}}else {const err642 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err642];}else {vErrors.push(err642);}errors++;}var _valid6 = _errs849 === errors;if(_valid6 && valid215){valid215 = false;passing5 = [passing5, 1];}else {if(_valid6){valid215 = true;passing5 = 1;}}if(!valid215){const err643 = {instancePath:instancePath+"/qa/environments/" + key92.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err643];}else {vErrors.push(err643);}errors++;}else {errors = _errs841;if(vErrors !== null){if(_errs841){vErrors.length = _errs841;}else {vErrors = null;}}}}if(data332.allowWrites !== undefined){if(typeof data332.allowWrites !== "boolean"){const err644 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err644];}else {vErrors.push(err644);}errors++;}}}else {const err645 = {instancePath:instancePath+"/qa/environments/" + key92.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 = [err645];}else {vErrors.push(err645);}errors++;}}}else {const err646 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err646];}else {vErrors.push(err646);}errors++;}}if(data328.personas !== undefined){let data338 = data328.personas;const _errs859 = errors;let valid220 = false;let passing6 = null;const _errs860 = errors;if(Array.isArray(data338)){if(data338.length < 1){const err647 = {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 = [err647];}else {vErrors.push(err647);}errors++;}const len43 = data338.length;for(let i45=0; i45<len43; i45++){let data339 = data338[i45];const _errs864 = errors;const _errs865 = errors;if(typeof data339 === "string"){if(!pattern0.test(data339)){const err648 = {};if(vErrors === null){vErrors = [err648];}else {vErrors.push(err648);}errors++;}}var valid223 = _errs865 === errors;if(valid223){const err649 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err649];}else {vErrors.push(err649);}errors++;}else {errors = _errs864;if(vErrors !== null){if(_errs864){vErrors.length = _errs864;}else {vErrors = null;}}}if(typeof data339 === "string"){if(func2(data339) < 1){const err650 = {instancePath:instancePath+"/qa/personas/" + i45,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 = [err650];}else {vErrors.push(err650);}errors++;}}else {const err651 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err651];}else {vErrors.push(err651);}errors++;}}}else {const err652 = {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 = [err652];}else {vErrors.push(err652);}errors++;}var _valid7 = _errs860 === errors;if(_valid7){valid220 = true;passing6 = 0;}const _errs866 = errors;if(data338 && typeof data338 == "object" && !Array.isArray(data338)){if(Object.keys(data338).length < 1){const err653 = {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 = [err653];}else {vErrors.push(err653);}errors++;}for(const key96 in data338){let data340 = data338[key96];const _errs870 = errors;let valid225 = false;let passing7 = null;const _errs871 = errors;if(data340 && typeof data340 == "object" && !Array.isArray(data340)){if(data340.credentialRef === undefined){const err654 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err654];}else {vErrors.push(err654);}errors++;}for(const key97 in data340){if(!(key97 === "credentialRef")){const err655 = {instancePath:instancePath+"/qa/personas/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key97},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err655];}else {vErrors.push(err655);}errors++;}}if(data340.credentialRef !== undefined){let data341 = data340.credentialRef;const _errs876 = errors;const _errs877 = errors;if(typeof data341 === "string"){if(!pattern0.test(data341)){const err656 = {};if(vErrors === null){vErrors = [err656];}else {vErrors.push(err656);}errors++;}}var valid227 = _errs877 === errors;if(valid227){const err657 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err657];}else {vErrors.push(err657);}errors++;}else {errors = _errs876;if(vErrors !== null){if(_errs876){vErrors.length = _errs876;}else {vErrors = null;}}}if(typeof data341 === "string"){if(func2(data341) < 1){const err658 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err658];}else {vErrors.push(err658);}errors++;}}else {const err659 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err659];}else {vErrors.push(err659);}errors++;}}}else {const err660 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err660];}else {vErrors.push(err660);}errors++;}var _valid8 = _errs871 === errors;if(_valid8){valid225 = true;passing7 = 0;}const _errs878 = errors;if(data340 && typeof data340 == "object" && !Array.isArray(data340)){if(data340.signInSkill === undefined){const err661 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err661];}else {vErrors.push(err661);}errors++;}for(const key98 in data340){if(!(key98 === "signInSkill")){const err662 = {instancePath:instancePath+"/qa/personas/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key98},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err662];}else {vErrors.push(err662);}errors++;}}if(data340.signInSkill !== undefined){let data342 = data340.signInSkill;const _errs883 = errors;const _errs884 = errors;if(typeof data342 === "string"){if(!pattern0.test(data342)){const err663 = {};if(vErrors === null){vErrors = [err663];}else {vErrors.push(err663);}errors++;}}var valid229 = _errs884 === errors;if(valid229){const err664 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err664];}else {vErrors.push(err664);}errors++;}else {errors = _errs883;if(vErrors !== null){if(_errs883){vErrors.length = _errs883;}else {vErrors = null;}}}if(typeof data342 === "string"){if(func2(data342) < 1){const err665 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err665];}else {vErrors.push(err665);}errors++;}}else {const err666 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err666];}else {vErrors.push(err666);}errors++;}}}else {const err667 = {instancePath:instancePath+"/qa/personas/" + key96.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 = [err667];}else {vErrors.push(err667);}errors++;}var _valid8 = _errs878 === errors;if(_valid8 && valid225){valid225 = false;passing7 = [passing7, 1];}else {if(_valid8){valid225 = true;passing7 = 1;}}if(!valid225){const err668 = {instancePath:instancePath+"/qa/personas/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing7},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err668];}else {vErrors.push(err668);}errors++;}else {errors = _errs870;if(vErrors !== null){if(_errs870){vErrors.length = _errs870;}else {vErrors = null;}}}}}else {const err669 = {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 = [err669];}else {vErrors.push(err669);}errors++;}var _valid7 = _errs866 === errors;if(_valid7 && valid220){valid220 = false;passing6 = [passing6, 1];}else {if(_valid7){valid220 = true;passing6 = 1;}}if(!valid220){const err670 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing6},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err670];}else {vErrors.push(err670);}errors++;}else {errors = _errs859;if(vErrors !== null){if(_errs859){vErrors.length = _errs859;}else {vErrors = null;}}}}if(data328.gherkinLint !== undefined){let data343 = data328.gherkinLint;if(data343 && typeof data343 == "object" && !Array.isArray(data343)){if(data343.scopes === undefined){const err671 = {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 = [err671];}else {vErrors.push(err671);}errors++;}for(const key99 in data343){if(!(((key99 === "scopes") || (key99 === "exemptionTags")) || (key99 === "stepWaivers"))){const err672 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key99},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err672];}else {vErrors.push(err672);}errors++;}}if(data343.scopes !== undefined){let data344 = data343.scopes;if(data344 && typeof data344 == "object" && !Array.isArray(data344)){if(Object.keys(data344).length < 1){const err673 = {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 = [err673];}else {vErrors.push(err673);}errors++;}for(const key100 in data344){let data345 = data344[key100];if(data345 && typeof data345 == "object" && !Array.isArray(data345)){if(data345.featureRoots === undefined){const err674 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err674];}else {vErrors.push(err674);}errors++;}if(data345.stepRoots === undefined){const err675 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err675];}else {vErrors.push(err675);}errors++;}for(const key101 in data345){if(!((key101 === "featureRoots") || (key101 === "stepRoots"))){const err676 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key101},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err676];}else {vErrors.push(err676);}errors++;}}if(data345.featureRoots !== undefined){let data346 = data345.featureRoots;if(Array.isArray(data346)){if(data346.length < 1){const err677 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err677];}else {vErrors.push(err677);}errors++;}const len44 = data346.length;for(let i46=0; i46<len44; i46++){let data347 = data346[i46];const _errs898 = errors;const _errs899 = errors;if(typeof data347 === "string"){if(!pattern0.test(data347)){const err678 = {};if(vErrors === null){vErrors = [err678];}else {vErrors.push(err678);}errors++;}}var valid235 = _errs899 === errors;if(valid235){const err679 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err679];}else {vErrors.push(err679);}errors++;}else {errors = _errs898;if(vErrors !== null){if(_errs898){vErrors.length = _errs898;}else {vErrors = null;}}}if(typeof data347 === "string"){if(func2(data347) < 1){const err680 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,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 = [err680];}else {vErrors.push(err680);}errors++;}}else {const err681 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,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 = [err681];}else {vErrors.push(err681);}errors++;}}}else {const err682 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err682];}else {vErrors.push(err682);}errors++;}}if(data345.stepRoots !== undefined){let data348 = data345.stepRoots;if(Array.isArray(data348)){if(data348.length < 1){const err683 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err683];}else {vErrors.push(err683);}errors++;}const len45 = data348.length;for(let i47=0; i47<len45; i47++){let data349 = data348[i47];const _errs904 = errors;const _errs905 = errors;if(typeof data349 === "string"){if(!pattern0.test(data349)){const err684 = {};if(vErrors === null){vErrors = [err684];}else {vErrors.push(err684);}errors++;}}var valid238 = _errs905 === errors;if(valid238){const err685 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err685];}else {vErrors.push(err685);}errors++;}else {errors = _errs904;if(vErrors !== null){if(_errs904){vErrors.length = _errs904;}else {vErrors = null;}}}if(typeof data349 === "string"){if(func2(data349) < 1){const err686 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,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 = [err686];}else {vErrors.push(err686);}errors++;}}else {const err687 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,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 = [err687];}else {vErrors.push(err687);}errors++;}}}else {const err688 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err688];}else {vErrors.push(err688);}errors++;}}}else {const err689 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key100.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 = [err689];}else {vErrors.push(err689);}errors++;}}}else {const err690 = {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 = [err690];}else {vErrors.push(err690);}errors++;}}if(data343.exemptionTags !== undefined){let data350 = data343.exemptionTags;if(Array.isArray(data350)){const len46 = data350.length;for(let i48=0; i48<len46; i48++){let data351 = data350[i48];const _errs910 = errors;const _errs911 = errors;if(typeof data351 === "string"){if(!pattern0.test(data351)){const err691 = {};if(vErrors === null){vErrors = [err691];}else {vErrors.push(err691);}errors++;}}var valid241 = _errs911 === errors;if(valid241){const err692 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err692];}else {vErrors.push(err692);}errors++;}else {errors = _errs910;if(vErrors !== null){if(_errs910){vErrors.length = _errs910;}else {vErrors = null;}}}if(typeof data351 === "string"){if(func2(data351) < 1){const err693 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,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 = [err693];}else {vErrors.push(err693);}errors++;}}else {const err694 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err694];}else {vErrors.push(err694);}errors++;}}}else {const err695 = {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 = [err695];}else {vErrors.push(err695);}errors++;}}if(data343.stepWaivers !== undefined){let data352 = data343.stepWaivers;if(Array.isArray(data352)){const len47 = data352.length;for(let i49=0; i49<len47; i49++){let data353 = data352[i49];if(typeof data353 === "string"){if(func2(data353) < 1){const err696 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,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 = [err696];}else {vErrors.push(err696);}errors++;}}else {const err697 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err697];}else {vErrors.push(err697);}errors++;}}}else {const err698 = {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 = [err698];}else {vErrors.push(err698);}errors++;}}}else {const err699 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err699];}else {vErrors.push(err699);}errors++;}}if(data328.consoleAllowlist !== undefined){let data354 = data328.consoleAllowlist;if(Array.isArray(data354)){const len48 = data354.length;for(let i50=0; i50<len48; i50++){let data355 = data354[i50];const _errs920 = errors;const _errs921 = errors;if(typeof data355 === "string"){if(!pattern0.test(data355)){const err700 = {};if(vErrors === null){vErrors = [err700];}else {vErrors.push(err700);}errors++;}}var valid246 = _errs921 === errors;if(valid246){const err701 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err701];}else {vErrors.push(err701);}errors++;}else {errors = _errs920;if(vErrors !== null){if(_errs920){vErrors.length = _errs920;}else {vErrors = null;}}}if(typeof data355 === "string"){if(func2(data355) < 1){const err702 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err702];}else {vErrors.push(err702);}errors++;}}else {const err703 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err703];}else {vErrors.push(err703);}errors++;}}}else {const err704 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err704];}else {vErrors.push(err704);}errors++;}}if(data328.designTokens !== undefined){let data356 = data328.designTokens;const _errs924 = errors;const _errs925 = errors;if(typeof data356 === "string"){if(!pattern0.test(data356)){const err705 = {};if(vErrors === null){vErrors = [err705];}else {vErrors.push(err705);}errors++;}}var valid247 = _errs925 === errors;if(valid247){const err706 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err706];}else {vErrors.push(err706);}errors++;}else {errors = _errs924;if(vErrors !== null){if(_errs924){vErrors.length = _errs924;}else {vErrors = null;}}}if(typeof data356 === "string"){if(func2(data356) < 1){const err707 = {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 = [err707];}else {vErrors.push(err707);}errors++;}}else {const err708 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err708];}else {vErrors.push(err708);}errors++;}}}else {const err709 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err709];}else {vErrors.push(err709);}errors++;}}}else {const err710 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err710];}else {vErrors.push(err710);}errors++;}validate10.errors = vErrors;return errors === 0;}
|