mandrel 2.59.0 → 2.60.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/README.md +11 -9
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +18 -19
- package/.agents/docs/SDLC.md +6 -6
- package/.agents/docs/agentrc-reference.json +1 -2
- package/.agents/docs/configuration.md +29 -46
- package/.agents/docs/quality-gates.md +8 -4
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +4 -5
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/known-tooling-behavior.md +65 -15
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +6 -11
- package/.agents/schemas/story-deliver-terminal.schema.json +3 -3
- package/.agents/scripts/README.md +11 -1
- package/.agents/scripts/acceptance-eval.js +25 -27
- package/.agents/scripts/ceremony-derive.js +15 -10
- package/.agents/scripts/check-context-budget.js +148 -228
- package/.agents/scripts/check-schema-references.js +5 -3
- package/.agents/scripts/check-workflow-citations.js +33 -147
- package/.agents/scripts/coverage-capture.js +7 -4
- package/.agents/scripts/deliver-light.js +41 -100
- package/.agents/scripts/deliver-run.js +631 -0
- package/.agents/scripts/file-ci-gap.js +59 -11
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +6 -2
- package/.agents/scripts/lib/changed-files.js +30 -0
- package/.agents/scripts/lib/config/delivery-routing.js +5 -4
- package/.agents/scripts/lib/config/explain.js +1 -3
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +1 -1
- package/.agents/scripts/lib/config-resolver.js +1 -0
- package/.agents/scripts/lib/config-settings-schema-delivery.js +28 -21
- package/.agents/scripts/lib/coverage-capture-fullscope.js +10 -2
- package/.agents/scripts/lib/coverage-capture-incremental.js +3 -2
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -1
- package/.agents/scripts/lib/doc-tiers.js +4 -2
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +7 -6
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +7 -5
- package/.agents/scripts/lib/generated/agentrc-validator.js +1 -1
- package/.agents/scripts/lib/gh-exec.js +160 -0
- package/.agents/scripts/lib/observability/source-classifier.js +1 -0
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +74 -132
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +123 -12
- package/.agents/scripts/lib/orchestration/complexity-gate.js +180 -352
- package/.agents/scripts/lib/orchestration/light-suitability.js +71 -136
- package/.agents/scripts/lib/orchestration/plan-context.js +13 -25
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +8 -6
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +76 -95
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +35 -18
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +11 -11
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +63 -29
- package/.agents/scripts/lib/orchestration/review-depth.js +14 -11
- package/.agents/scripts/lib/orchestration/run-epilogue.js +260 -182
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +63 -99
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +3 -3
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +137 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +105 -18
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +4 -3
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +156 -39
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +71 -0
- package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -17
- package/.agents/scripts/lib/orchestration/ticket-validator.js +44 -183
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +14 -25
- package/.agents/scripts/lib/story-body/body-format-lints.js +58 -12
- package/.agents/scripts/lib/story-body/story-body.js +83 -29
- package/.agents/scripts/lib/templates/decomposer-prompts.js +7 -15
- package/.agents/scripts/lib/wave-runner/live-probe.js +31 -5
- package/.agents/scripts/merge-baseline.js +4 -5
- package/.agents/scripts/plan-context.js +117 -28
- package/.agents/scripts/plan-persist.js +79 -28
- package/.agents/scripts/plan-run-epilogue.js +11 -8
- package/.agents/scripts/pr-watch-with-update.js +9 -2
- package/.agents/scripts/run-verify.js +13 -6
- package/.agents/scripts/single-story-init.js +7 -57
- package/.agents/scripts/stories-wave-tick.js +160 -26
- package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +31 -24
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +116 -100
- package/.agents/workflows/helpers/deliver-story-reference.md +58 -124
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +65 -54
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- package/docs/CHANGELOG.md +35 -0
- package/lib/cli/update.js +376 -17
- package/lib/migrations/index.js +2 -0
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +40 -0
- package/package.json +2 -1
- package/.agents/schemas/model-attribution.schema.json +0 -53
- package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
|
@@ -13,4 +13,4 @@ import { createRequire } from 'node:module';
|
|
|
13
13
|
|
|
14
14
|
const require = createRequire(import.meta.url);
|
|
15
15
|
|
|
16
|
-
"use strict";export const validate = validate10;export default validate10;const schema11 = {"type":"object","required":["project"],"properties":{"$schema":{"type":"string","description":"Editor pointer at the shipped JSON-Schema mirror. Not read by the runtime."},"project":{"type":"object","description":"Project identity, filesystem roots, planner docs context, and the commands the close-validation chain spawns.","required":["paths"],"properties":{"baseBranch":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"description":"Branch every `story-<id>` branch is seeded from and every Story PR targets.","default":"main"},"paths":{"type":"object","description":"The three required filesystem roots. Every `${dir}Root` the framework needs is derived at runtime as `${agentRoot}/<dir>`, and the audit output dir as `${tempRoot}/audits`.","required":["agentRoot","docsRoot","tempRoot"],"properties":{"agentRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the materialized framework tree (`mandrel sync` writes here).","default":".agents"},"docsRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the project documentation the planner reads for context.","default":"docs"},"tempRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative gitignored scratch root. Every temporary artifact — gate transcripts, audit reports, plan authoring dirs — lands under it.","default":"temp"}},"additionalProperties":false},"docsContextFiles":{"type":"array","items":{"type":"string"},"description":"Files under `paths.docsRoot` the planner treats as standing context. Read digest-first — the docs digest names the file and the line range, and only the named section is pulled.","default":["architecture.md","data-dictionary.md","decisions.md","patterns.md"]},"commands":{"type":"object","description":"Shell commands the close-validation chain spawns. Each is run from the repo root.","properties":{"test":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Full test-suite command run by the close-validation chain.","default":"npm test"},"typecheck":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Static type-check command. `null` disables the gate for projects with no type layer; the empty string is rejected so a typo cannot silently disable it.","default":null},"lint":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Lint command run as a close-validation gate. `null` (the default) uses `npm run lint`; the gate is mandatory, so unlike `typecheck` this key cannot disable it. Point it at the scoped command your hooks already run to stop paying for a third whole-repo lint at close — the gate still lints the diff, and CI still owns whole-repo drift. Like every command here it must be a single argv (no `;`, `&&`, pipes or substitution), so wrap a multi-linter pair in one npm script and name that.","default":null},"formatCheck":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Non-mutating format verification run as a close-validation gate.","default":"npx biome format ."},"formatWrite":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Mutating format command the close-time format-autofix step spawns.","default":"npx biome format --write ."}},"additionalProperties":false}},"additionalProperties":false},"github":{"type":"object","description":"GitHub provider identity plus the remote stance the bootstrap enforces. `owner`, `repo`, and `operatorHandle` are operator identity — the shipped values are placeholders, not usable defaults.","required":["owner","repo","operatorHandle"],"properties":{"owner":{"type":"string","minLength":1,"description":"GitHub owner (user or org) that hosts the repository.","default":"[OWNER]"},"repo":{"type":"string","minLength":1,"description":"Repository name under `owner`.","default":"[REPO]"},"projectNumber":{"type":["integer","null"],"minimum":1,"description":"Projects V2 board number the orchestrator syncs Story status onto. `null` disables board sync.","default":null},"projectOwner":{"type":["string","null"],"minLength":1,"description":"Owner of the Projects V2 board when it lives outside `owner` (an org board fed by a user repo). `null` means the board shares `owner`.","default":null},"operatorHandle":{"type":"string","pattern":"^@.+","description":"The human the framework escalates to, `@`-prefixed. Used for HITL @-mentions on `agent::blocked`.","default":"@[USERNAME]"},"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},"followUpRepos":{"type":"object","description":"Repository slugs for the non-consumer follow-up ownership buckets, used when a CI gap, retro proposal, or audit finding belongs to someone other than the repo that surfaced it.","properties":{"framework":{"type":"string","pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` that owns framework-level defects. Defaults to the Mandrel mirror — the one bucket with a knowable default.","default":"dsj1984/mandrel"},"platform":{"type":["string","null"],"pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` for a shared platform or infrastructure tracker (a shared base config, a runner fleet, a cross-repo toolchain). No default — nothing can guess a shared repo. Left unset, platform-owned findings file locally and say so.","default":null}},"additionalProperties":false},"branchProtection":{"type":"object","description":"Branch-protection stance applied to `project.baseBranch` by the GitHub bootstrap, and reproduced locally before every push.","properties":{"enforce":{"type":"boolean","description":"When true, the GitHub bootstrap writes the required-check ruleset. False leaves the remote stance alone.","default":true},"requiredChecks":{"type":"array","items":{"type":"object","description":"One required status check: the context name GitHub gates the merge on, plus the argv the framework runs locally to reproduce it.","required":["name","cmd"],"properties":{"name":{"type":"string","minLength":1,"description":"Required status-check context name as GitHub reports it."},"cmd":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"argv array (never a shell string) the local pre-push validation runs to reproduce the check."}},"additionalProperties":false},"description":"Checks that must pass before a Story PR merges. Each entry carries both the remote context name and the local argv.","default":[{"name":"lint","cmd":["npm","run","lint"]},{"name":"test","cmd":["npm","test"]},{"name":"baselines","cmd":["node",".agents/scripts/check-baselines.js"]}]}},"additionalProperties":false},"mergeMethods":{"type":"object","description":"Repository merge-method stance the GitHub bootstrap enforces. The framework ships squash-only with auto-merge on, which is what the one-PR-per-Story model needs for release-please to parse each landed subject.","properties":{"allow_squash_merge":{"type":"boolean","default":true},"allow_rebase_merge":{"type":"boolean","default":false},"allow_merge_commit":{"type":"boolean","default":false},"allow_auto_merge":{"type":"boolean","default":true},"delete_branch_on_merge":{"type":"boolean","default":true}},"additionalProperties":false},"notifications":{"type":"object","description":"Allowlist-gated notification channels. An event fires on a channel only when it is named in that channel's array.","properties":{"mentionOperator":{"type":"boolean","description":"When true, `github.operatorHandle` is @-mentioned in the comments the notifier posts.","default":false},"commentEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message"]},"uniqueItems":true,"description":"Events mirrored onto the Story issue as a comment. Deliberately narrower than `webhookEvents`: only Story-scoped events whose message reads as narrative an operator wants durably on the ticket belong here.","default":["state-transition","story-merged","operator-message"]},"webhookEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]},"uniqueItems":true,"description":"Events dispatched to the configured webhook. The vocabulary is the allowlist the webhook channel gates on; `merge.unlanded` and `merge.flip-failed` are allowlistable but reach the run ledger rather than `notify()` today.","default":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]}},"additionalProperties":false}},"additionalProperties":false},"planning":{"type":"object","description":"Inputs to `/mandrel-plan`: the memory-hygiene advisory ceiling and the opt-in navigability reachability gate.","properties":{"memoryPool":{"type":"object","description":"Threshold for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool.","properties":{"indexByteCeiling":{"type":"integer","minimum":1,"description":"Recommend a consolidation pass once the pool's `MEMORY.md` index exceeds this many bytes. The harness truncates the index it loads into each session at its own byte cap, so an oversized index is a loss already happening — every entry listed after the cut is invisible — rather than a hygiene forecast. Default 24576, the harness cap itself.","default":24576}},"additionalProperties":false},"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, 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},"requireCreditedCapture":{"type":"boolean","description":"Refuse a full-suite coverage capture that no committed stamp covers, instead of paying for it. Default false — the run is announced (a warning naming the crediting invocation, emitted before the spawn) and then executed, which is the pre-existing behaviour. Set true when the whole-suite cost is large enough that a close should stop at zero seconds rather than absorb it silently.","default":false}},"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"]}}]},"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},"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},"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 (0 = scored once, no redraft), then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the scoring pass is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":0,"description":"Maximum number of redraft rounds before escalation. Default 2; 0 means the verdict is scored once with no redraft round (Story #5313 dropped the hard ceiling and the floor-of-one clamp).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-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":[]},"rerunAdvisory":{"type":"integer","minimum":0,"description":"Story #5266. How many times close may re-run a failed advisory workflow run before blocking on it, per close invocation. Default 0: close spends no CI minutes and issues no GitHub mutation on an advisory red unless asked. At n > 0 the failed run(s) are re-run within that allowance and the merge wait re-polls inside its existing budget, landing or blocking on the re-run verdict. Overridden per invocation by --rerun-advisory <n>.","default":0}},"additionalProperties":false},"routing":{"type":"object","description":"v2 delivery-spawn routing: role-scoped boot contexts and the ceremony profile. The v1 singleDelivery epic-route kill-switch was removed in Stage 6; the freshCriticSampleRate sampling floor was retired in Story #5313.","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},"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: high or underivable → fresh, low → inline.","default":"standard"},"closeAndLand":{"type":"boolean","description":"When true (default), single-story-close lands through merge in one close. Opt out per-run with --no-wait-merge.","default":true}},"additionalProperties":false}},"additionalProperties":false},"qa":{"type":"object","description":"Agent-driven QA harness contract (Epic #3214; environment-keyed by Epic #4326). Optional top-level block. All filesystem-pointer fields (featureRoot, fixturesManifest, designTokens) carry safeString guards rejecting shell-injection metacharacters. environments is a map of named deployment targets (each with a baseUrl, a per-environment url-template/skill sign-in seam, and an optional allowWrites gate); personas resolve to a stored credential reference or a sign-in skill, never an inline secret.","properties":{"featureRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Directory holding the Gherkin feature files the QA sweep drives.","default":"tests/features"},"fixturesManifest":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the persona/fixture manifest the harness seeds from.","default":"tests/fixtures/personas.json"},"environments":{"type":"object","description":"Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.","default":{"local":{"baseUrl":"http://localhost:3000","signInSeam":{"urlTemplate":"/dev/sign-in-as/{persona}"}},"staging":{"baseUrl":"https://staging.example.test","allowWrites":false}},"minProperties":1,"additionalProperties":{"type":"object","properties":{"baseUrl":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"signInSeam":{"oneOf":[{"type":"object","properties":{"urlTemplate":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["urlTemplate"],"additionalProperties":false},{"type":"object","properties":{"skill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"pattern":"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$","description":"Tier-relative skill id, e.g. `stack/qa/acme-sso`: lowercase segments of letters, digits, `.`, `_` or `-`, at least two of them, separated by `/`. A traversal (`../..`), an absolute path, a backslash or an uppercase segment is rejected here rather than normalized."}},"required":["skill"],"additionalProperties":false}]},"allowWrites":{"type":"boolean"}},"required":["baseUrl"],"additionalProperties":false}},"personas":{"description":"Personas the QA-harness sign-in seam accepts. Two accepted shapes: (1) a plain array of persona names — the honest shape for a `urlTemplate` dev-impersonation seam, where the persona name is the sole input the workflow consumes; (2) the object-map form keyed by persona name, where each entry carries per-persona auth material (`credentialRef` or `signInSkill`) consulted only under a skill-based or credential-based seam.","default":{"admin":{"credentialRef":"QA_ADMIN_CREDENTIAL"},"member":{"credentialRef":"QA_MEMBER_CREDENTIAL"}},"oneOf":[{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},{"type":"object","minProperties":1,"additionalProperties":{"oneOf":[{"type":"object","properties":{"credentialRef":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["credentialRef"],"additionalProperties":false},{"type":"object","properties":{"signInSkill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["signInSkill"],"additionalProperties":false}]}}]},"gherkinLint":{"type":"object","description":"Static Gherkin corpus gate (Story #5013). Optional; the gate runs only when this block is present, so an upgrade never reddens the lint of a consumer that never asked the framework to police its `.feature` files. Inside the opt-in it fails closed: an unresolvable `@cucumber/gherkin` parser, or a scope resolving zero step definitions, exits 1 rather than reporting a clean run.","default":{"scopes":{"web":{"featureRoots":["apps/web/tests/features"],"stepRoots":["apps/web/tests/steps"]}},"exemptionTags":["@skip"],"stepWaivers":[]},"properties":{"scopes":{"type":"object","description":"Binding scopes, keyed by name. Each scope resolves its own features against its own step definitions only — pooling every step root into one matcher list is what makes a cross-app false bind possible, where a step defined solely in app B silently vouches for app A. The scope name appears verbatim in every unbound finding.","minProperties":1,"additionalProperties":{"type":"object","properties":{"featureRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the `.feature` files of this scope, walked recursively."},"stepRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the step definitions of this scope, walked recursively. Resolving zero definitions here is a fail-closed error, not a clean run."}},"required":["featureRoots","stepRoots"],"additionalProperties":false}},"exemptionTags":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Tags marking a scenario as intentionally non-binding, so must-bind skips it. Never an escape from must-compile: a parse error in the file still fails the run. Default: [\"@skip\"].","default":["@skip"]},"stepWaivers":{"type":"array","items":{"type":"string","minLength":1},"description":"Exact step texts must-bind never reports as unbound. The step index is a source scan and therefore heuristic while the parser is exact, so a false unbound must always have an escape that does not require switching the gate off. Default: [].","default":[]}},"required":["scopes"],"additionalProperties":false},"consoleAllowlist":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Console-message substrings the QA run tolerates instead of reporting as a finding (framework dev-mode chatter).","default":["Download the React DevTools","[HMR]"]},"designTokens":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the design-token SSOT the UX/UI lens checks rendered styles against.","default":"src/styles/tokens.css"}},"additionalProperties":false}},"additionalProperties":false};const pattern0 = new RegExp("([;&|`]|\\$\\()", "u");const pattern9 = new RegExp("^@.+", "u");const pattern10 = new RegExp("^[^/\\s]+/[^/\\s]+$", "u");const pattern31 = new RegExp("^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$", "u");const func2 = require("ajv/dist/runtime/ucs2length").default;const func10 = Object.prototype.hasOwnProperty;function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == "object" && !Array.isArray(data)){if(data.project === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "project"},message:"must have required property '"+"project"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!((((((key0 === "$schema") || (key0 === "project")) || (key0 === "github")) || (key0 === "planning")) || (key0 === "delivery")) || (key0 === "qa"))){const err1 = {instancePath,schemaPath:"#/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.$schema !== undefined){if(typeof data.$schema !== "string"){const err2 = {instancePath:instancePath+"/$schema",schemaPath:"#/properties/%24schema/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.project !== undefined){let data1 = data.project;if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.paths === undefined){const err3 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/required",keyword:"required",params:{missingProperty: "paths"},message:"must have required property '"+"paths"+"'"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key1 in data1){if(!((((key1 === "baseBranch") || (key1 === "paths")) || (key1 === "docsContextFiles")) || (key1 === "commands"))){const err4 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key1},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data1.baseBranch !== undefined){let data2 = data1.baseBranch;if(typeof data2 !== "string"){const err5 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const _errs9 = errors;const _errs10 = errors;if(typeof data2 === "string"){if(!pattern0.test(data2)){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}var valid2 = _errs10 === errors;if(valid2){const err7 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}else {errors = _errs9;if(vErrors !== null){if(_errs9){vErrors.length = _errs9;}else {vErrors = null;}}}}if(data1.paths !== undefined){let data3 = data1.paths;if(data3 && typeof data3 == "object" && !Array.isArray(data3)){if(data3.agentRoot === undefined){const err8 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "agentRoot"},message:"must have required property '"+"agentRoot"+"'"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data3.docsRoot === undefined){const err9 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "docsRoot"},message:"must have required property '"+"docsRoot"+"'"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data3.tempRoot === undefined){const err10 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "tempRoot"},message:"must have required property '"+"tempRoot"+"'"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key2 in data3){if(!(((key2 === "agentRoot") || (key2 === "docsRoot")) || (key2 === "tempRoot"))){const err11 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key2},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data3.agentRoot !== undefined){let data4 = data3.agentRoot;const _errs16 = errors;const _errs17 = errors;if(typeof data4 === "string"){if(!pattern0.test(data4)){const err12 = {};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}var valid4 = _errs17 === errors;if(valid4){const err13 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}else {errors = _errs16;if(vErrors !== null){if(_errs16){vErrors.length = _errs16;}else {vErrors = null;}}}if(typeof data4 === "string"){if(func2(data4) < 1){const err14 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data3.docsRoot !== undefined){let data5 = data3.docsRoot;const _errs20 = errors;const _errs21 = errors;if(typeof data5 === "string"){if(!pattern0.test(data5)){const err16 = {};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}var valid5 = _errs21 === errors;if(valid5){const err17 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}else {errors = _errs20;if(vErrors !== null){if(_errs20){vErrors.length = _errs20;}else {vErrors = null;}}}if(typeof data5 === "string"){if(func2(data5) < 1){const err18 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}else {const err19 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data3.tempRoot !== undefined){let data6 = data3.tempRoot;const _errs24 = errors;const _errs25 = errors;if(typeof data6 === "string"){if(!pattern0.test(data6)){const err20 = {};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}var valid6 = _errs25 === errors;if(valid6){const err21 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}else {errors = _errs24;if(vErrors !== null){if(_errs24){vErrors.length = _errs24;}else {vErrors = null;}}}if(typeof data6 === "string"){if(func2(data6) < 1){const err22 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data1.docsContextFiles !== undefined){let data7 = data1.docsContextFiles;if(Array.isArray(data7)){const len0 = data7.length;for(let i0=0; i0<len0; i0++){if(typeof data7[i0] !== "string"){const err25 = {instancePath:instancePath+"/project/docsContextFiles/" + i0,schemaPath:"#/properties/project/properties/docsContextFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}else {const err26 = {instancePath:instancePath+"/project/docsContextFiles",schemaPath:"#/properties/project/properties/docsContextFiles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data1.commands !== undefined){let data9 = data1.commands;if(data9 && typeof data9 == "object" && !Array.isArray(data9)){for(const key3 in data9){if(!(((((key3 === "test") || (key3 === "typecheck")) || (key3 === "lint")) || (key3 === "formatCheck")) || (key3 === "formatWrite"))){const err27 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key3},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data9.test !== undefined){let data10 = data9.test;const _errs35 = errors;const _errs36 = errors;if(typeof data10 === "string"){if(!pattern0.test(data10)){const err28 = {};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}var valid10 = _errs36 === errors;if(valid10){const err29 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}else {errors = _errs35;if(vErrors !== null){if(_errs35){vErrors.length = _errs35;}else {vErrors = null;}}}if(typeof data10 === "string"){if(func2(data10) < 1){const err30 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data9.typecheck !== undefined){let data11 = data9.typecheck;if((typeof data11 !== "string") && (data11 !== null)){const err32 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.typecheck.type},message:"must be string,null"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}const _errs39 = errors;const _errs40 = errors;if(errors === _errs40){if(typeof data11 === "string"){if(!pattern0.test(data11)){const err33 = {};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}else {const err34 = {};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}var valid11 = _errs40 === errors;if(valid11){const err35 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(typeof data11 === "string"){if(func2(data11) < 1){const err36 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}}if(data9.lint !== undefined){let data12 = data9.lint;if((typeof data12 !== "string") && (data12 !== null)){const err37 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.lint.type},message:"must be string,null"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}const _errs44 = errors;const _errs45 = errors;if(errors === _errs45){if(typeof data12 === "string"){if(!pattern0.test(data12)){const err38 = {};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}else {const err39 = {};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}var valid12 = _errs45 === errors;if(valid12){const err40 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}else {errors = _errs44;if(vErrors !== null){if(_errs44){vErrors.length = _errs44;}else {vErrors = null;}}}if(typeof data12 === "string"){if(func2(data12) < 1){const err41 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}}if(data9.formatCheck !== undefined){let data13 = data9.formatCheck;const _errs49 = errors;const _errs50 = errors;if(typeof data13 === "string"){if(!pattern0.test(data13)){const err42 = {};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}var valid13 = _errs50 === errors;if(valid13){const err43 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}else {errors = _errs49;if(vErrors !== null){if(_errs49){vErrors.length = _errs49;}else {vErrors = null;}}}if(typeof data13 === "string"){if(func2(data13) < 1){const err44 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data9.formatWrite !== undefined){let data14 = data9.formatWrite;const _errs53 = errors;const _errs54 = errors;if(typeof data14 === "string"){if(!pattern0.test(data14)){const err46 = {};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}var valid14 = _errs54 === errors;if(valid14){const err47 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}else {errors = _errs53;if(vErrors !== null){if(_errs53){vErrors.length = _errs53;}else {vErrors = null;}}}if(typeof data14 === "string"){if(func2(data14) < 1){const err48 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}}else {const err50 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}}else {const err51 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}}if(data.github !== undefined){let data15 = data.github;if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.owner === undefined){const err52 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "owner"},message:"must have required property '"+"owner"+"'"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}if(data15.repo === undefined){const err53 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "repo"},message:"must have required property '"+"repo"+"'"};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}if(data15.operatorHandle === undefined){const err54 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "operatorHandle"},message:"must have required property '"+"operatorHandle"+"'"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}for(const key4 in data15){if(!(func10.call(schema11.properties.github.properties, key4))){const err55 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key4},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}if(data15.owner !== undefined){let data16 = data15.owner;if(typeof data16 === "string"){if(func2(data16) < 1){const err56 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}}else {const err57 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}}if(data15.repo !== undefined){let data17 = data15.repo;if(typeof data17 === "string"){if(func2(data17) < 1){const err58 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}}else {const err59 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}if(data15.projectNumber !== undefined){let data18 = data15.projectNumber;if((!(((typeof data18 == "number") && (!(data18 % 1) && !isNaN(data18))) && (isFinite(data18)))) && (data18 !== null)){const err60 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/type",keyword:"type",params:{type: schema11.properties.github.properties.projectNumber.type},message:"must be integer,null"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}if((typeof data18 == "number") && (isFinite(data18))){if(data18 < 1 || isNaN(data18)){const err61 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}}}if(data15.projectOwner !== undefined){let data19 = data15.projectOwner;if((typeof data19 !== "string") && (data19 !== null)){const err62 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/type",keyword:"type",params:{type: schema11.properties.github.properties.projectOwner.type},message:"must be string,null"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}if(typeof data19 === "string"){if(func2(data19) < 1){const err63 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}}if(data15.operatorHandle !== undefined){let data20 = data15.operatorHandle;if(typeof data20 === "string"){if(!pattern9.test(data20)){const err64 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/pattern",keyword:"pattern",params:{pattern: "^@.+"},message:"must match pattern \""+"^@.+"+"\""};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}}else {const err65 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}}if(data15.defaultTimeoutMs !== undefined){let data21 = data15.defaultTimeoutMs;if(!(((typeof data21 == "number") && (!(data21 % 1) && !isNaN(data21))) && (isFinite(data21)))){const err66 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}if((typeof data21 == "number") && (isFinite(data21))){if(data21 < 1000 || isNaN(data21)){const err67 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1000},message:"must be >= 1000"};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}}if(data15.followUpRepos !== undefined){let data22 = data15.followUpRepos;if(data22 && typeof data22 == "object" && !Array.isArray(data22)){for(const key5 in data22){if(!((key5 === "framework") || (key5 === "platform"))){const err68 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}if(data22.framework !== undefined){let data23 = data22.framework;if(typeof data23 === "string"){if(!pattern10.test(data23)){const err69 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}}else {const err70 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err70];}else {vErrors.push(err70);}errors++;}}if(data22.platform !== undefined){let data24 = data22.platform;if((typeof data24 !== "string") && (data24 !== null)){const err71 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/type",keyword:"type",params:{type: schema11.properties.github.properties.followUpRepos.properties.platform.type},message:"must be string,null"};if(vErrors === null){vErrors = [err71];}else {vErrors.push(err71);}errors++;}if(typeof data24 === "string"){if(!pattern10.test(data24)){const err72 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}}}}else {const err73 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err73];}else {vErrors.push(err73);}errors++;}}if(data15.branchProtection !== undefined){let data25 = data15.branchProtection;if(data25 && typeof data25 == "object" && !Array.isArray(data25)){for(const key6 in data25){if(!((key6 === "enforce") || (key6 === "requiredChecks"))){const err74 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err74];}else {vErrors.push(err74);}errors++;}}if(data25.enforce !== undefined){if(typeof data25.enforce !== "boolean"){const err75 = {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 = [err75];}else {vErrors.push(err75);}errors++;}}if(data25.requiredChecks !== undefined){let data27 = data25.requiredChecks;if(Array.isArray(data27)){const len1 = data27.length;for(let i1=0; i1<len1; i1++){let data28 = data27[i1];if(data28 && typeof data28 == "object" && !Array.isArray(data28)){if(data28.name === undefined){const err76 = {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 = [err76];}else {vErrors.push(err76);}errors++;}if(data28.cmd === undefined){const err77 = {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 = [err77];}else {vErrors.push(err77);}errors++;}for(const key7 in data28){if(!((key7 === "name") || (key7 === "cmd"))){const err78 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err78];}else {vErrors.push(err78);}errors++;}}if(data28.name !== undefined){let data29 = data28.name;if(typeof data29 === "string"){if(func2(data29) < 1){const err79 = {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 = [err79];}else {vErrors.push(err79);}errors++;}}else {const err80 = {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 = [err80];}else {vErrors.push(err80);}errors++;}}if(data28.cmd !== undefined){let data30 = data28.cmd;if(Array.isArray(data30)){if(data30.length < 1){const err81 = {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 = [err81];}else {vErrors.push(err81);}errors++;}const len2 = data30.length;for(let i2=0; i2<len2; i2++){let data31 = data30[i2];if(typeof data31 === "string"){if(func2(data31) < 1){const err82 = {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 = [err82];}else {vErrors.push(err82);}errors++;}}else {const err83 = {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 = [err83];}else {vErrors.push(err83);}errors++;}}}else {const err84 = {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 = [err84];}else {vErrors.push(err84);}errors++;}}}else {const err85 = {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 = [err85];}else {vErrors.push(err85);}errors++;}}}else {const err86 = {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 = [err86];}else {vErrors.push(err86);}errors++;}}}else {const err87 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err87];}else {vErrors.push(err87);}errors++;}}if(data15.mergeMethods !== undefined){let data32 = data15.mergeMethods;if(data32 && typeof data32 == "object" && !Array.isArray(data32)){for(const key8 in data32){if(!(((((key8 === "allow_squash_merge") || (key8 === "allow_rebase_merge")) || (key8 === "allow_merge_commit")) || (key8 === "allow_auto_merge")) || (key8 === "delete_branch_on_merge"))){const err88 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}}if(data32.allow_squash_merge !== undefined){if(typeof data32.allow_squash_merge !== "boolean"){const err89 = {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 = [err89];}else {vErrors.push(err89);}errors++;}}if(data32.allow_rebase_merge !== undefined){if(typeof data32.allow_rebase_merge !== "boolean"){const err90 = {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 = [err90];}else {vErrors.push(err90);}errors++;}}if(data32.allow_merge_commit !== undefined){if(typeof data32.allow_merge_commit !== "boolean"){const err91 = {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 = [err91];}else {vErrors.push(err91);}errors++;}}if(data32.allow_auto_merge !== undefined){if(typeof data32.allow_auto_merge !== "boolean"){const err92 = {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 = [err92];}else {vErrors.push(err92);}errors++;}}if(data32.delete_branch_on_merge !== undefined){if(typeof data32.delete_branch_on_merge !== "boolean"){const err93 = {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 = [err93];}else {vErrors.push(err93);}errors++;}}}else {const err94 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}}if(data15.notifications !== undefined){let data38 = data15.notifications;if(data38 && typeof data38 == "object" && !Array.isArray(data38)){for(const key9 in data38){if(!(((key9 === "mentionOperator") || (key9 === "commentEvents")) || (key9 === "webhookEvents"))){const err95 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}}if(data38.mentionOperator !== undefined){if(typeof data38.mentionOperator !== "boolean"){const err96 = {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 = [err96];}else {vErrors.push(err96);}errors++;}}if(data38.commentEvents !== undefined){let data40 = data38.commentEvents;if(Array.isArray(data40)){const len3 = data40.length;for(let i3=0; i3<len3; i3++){let data41 = data40[i3];if(typeof data41 !== "string"){const err97 = {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 = [err97];}else {vErrors.push(err97);}errors++;}if(!((((data41 === "state-transition") || (data41 === "story-merged")) || (data41 === "story-closing")) || (data41 === "operator-message"))){const err98 = {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 = [err98];}else {vErrors.push(err98);}errors++;}}let i4 = data40.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data40[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err99 = {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 = [err99];}else {vErrors.push(err99);}errors++;break;}indices0[item0] = i4;}}}else {const err100 = {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 = [err100];}else {vErrors.push(err100);}errors++;}}if(data38.webhookEvents !== undefined){let data42 = data38.webhookEvents;if(Array.isArray(data42)){const len4 = data42.length;for(let i5=0; i5<len4; i5++){let data43 = data42[i5];if(typeof data43 !== "string"){const err101 = {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 = [err101];}else {vErrors.push(err101);}errors++;}if(!((((((data43 === "state-transition") || (data43 === "story-merged")) || (data43 === "story-closing")) || (data43 === "operator-message")) || (data43 === "merge.unlanded")) || (data43 === "merge.flip-failed"))){const err102 = {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 = [err102];}else {vErrors.push(err102);}errors++;}}let i6 = data42.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data42[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err103 = {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 = [err103];}else {vErrors.push(err103);}errors++;break;}indices1[item1] = i6;}}}else {const err104 = {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 = [err104];}else {vErrors.push(err104);}errors++;}}}else {const err105 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}}}else {const err106 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data.planning !== undefined){let data44 = data.planning;if(data44 && typeof data44 == "object" && !Array.isArray(data44)){for(const key10 in data44){if(!((key10 === "memoryPool") || (key10 === "navigation"))){const err107 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}if(data44.memoryPool !== undefined){let data45 = data44.memoryPool;if(data45 && typeof data45 == "object" && !Array.isArray(data45)){for(const key11 in data45){if(!(key11 === "indexByteCeiling")){const err108 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}}if(data45.indexByteCeiling !== undefined){let data46 = data45.indexByteCeiling;if(!(((typeof data46 == "number") && (!(data46 % 1) && !isNaN(data46))) && (isFinite(data46)))){const err109 = {instancePath:instancePath+"/planning/memoryPool/indexByteCeiling",schemaPath:"#/properties/planning/properties/memoryPool/properties/indexByteCeiling/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}if((typeof data46 == "number") && (isFinite(data46))){if(data46 < 1 || isNaN(data46)){const err110 = {instancePath:instancePath+"/planning/memoryPool/indexByteCeiling",schemaPath:"#/properties/planning/properties/memoryPool/properties/indexByteCeiling/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}}}}else {const err111 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}if(data44.navigation !== undefined){let data47 = data44.navigation;if(data47 && typeof data47 == "object" && !Array.isArray(data47)){for(const key12 in data47){if(!((key12 === "routeGlobs") || (key12 === "navRegistry"))){const err112 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data47.routeGlobs !== undefined){let data48 = data47.routeGlobs;if(Array.isArray(data48)){const len5 = data48.length;for(let i7=0; i7<len5; i7++){if(typeof data48[i7] !== "string"){const err113 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i7,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}}}else {const err114 = {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 = [err114];}else {vErrors.push(err114);}errors++;}}if(data47.navRegistry !== undefined){let data50 = data47.navRegistry;if(Array.isArray(data50)){const len6 = data50.length;for(let i8=0; i8<len6; i8++){if(typeof data50[i8] !== "string"){const err115 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i8,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}}else {const err116 = {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 = [err116];}else {vErrors.push(err116);}errors++;}}}else {const err117 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}}}else {const err118 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}if(data.delivery !== undefined){let data52 = data.delivery;if(data52 && typeof data52 == "object" && !Array.isArray(data52)){for(const key13 in data52){if(!(func10.call(schema11.properties.delivery.properties, key13))){const err119 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}}if(data52.execution !== undefined){let data53 = data52.execution;if(data53 && typeof data53 == "object" && !Array.isArray(data53)){for(const key14 in data53){if(!(((key14 === "timeoutMs") || (key14 === "fullSuiteLock")) || (key14 === "requireCreditedCapture"))){const err120 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}}if(data53.timeoutMs !== undefined){let data54 = data53.timeoutMs;if(!(((typeof data54 == "number") && (!(data54 % 1) && !isNaN(data54))) && (isFinite(data54)))){const err121 = {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 = [err121];}else {vErrors.push(err121);}errors++;}if((typeof data54 == "number") && (isFinite(data54))){if(data54 < 1 || isNaN(data54)){const err122 = {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 = [err122];}else {vErrors.push(err122);}errors++;}}}if(data53.fullSuiteLock !== undefined){if(typeof data53.fullSuiteLock !== "boolean"){const err123 = {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 = [err123];}else {vErrors.push(err123);}errors++;}}if(data53.requireCreditedCapture !== undefined){if(typeof data53.requireCreditedCapture !== "boolean"){const err124 = {instancePath:instancePath+"/delivery/execution/requireCreditedCapture",schemaPath:"#/properties/delivery/properties/execution/properties/requireCreditedCapture/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}}}else {const err125 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}}if(data52.docsFreshness !== undefined){let data57 = data52.docsFreshness;if(data57 && typeof data57 == "object" && !Array.isArray(data57)){for(const key15 in data57){if(!(key15 === "paths")){const err126 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}if(data57.paths !== undefined){let data58 = data57.paths;if(Array.isArray(data58)){const len7 = data58.length;for(let i9=0; i9<len7; i9++){let data59 = data58[i9];const _errs157 = errors;const _errs158 = errors;if(typeof data59 === "string"){if(!pattern0.test(data59)){const err127 = {};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}}var valid43 = _errs158 === errors;if(valid43){const err128 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err128];}else {vErrors.push(err128);}errors++;}else {errors = _errs157;if(vErrors !== null){if(_errs157){vErrors.length = _errs157;}else {vErrors = null;}}}if(typeof data59 === "string"){if(func2(data59) < 1){const err129 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}else {const err130 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err130];}else {vErrors.push(err130);}errors++;}}}else {const err131 = {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 = [err131];}else {vErrors.push(err131);}errors++;}}}else {const err132 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}}if(data52.tempRetention !== undefined){let data60 = data52.tempRetention;if(data60 && typeof data60 == "object" && !Array.isArray(data60)){for(const key16 in data60){if(!(((key16 === "enabled") || (key16 === "staleDays")) || (key16 === "classes"))){const err133 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}}if(data60.enabled !== undefined){if(typeof data60.enabled !== "boolean"){const err134 = {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 = [err134];}else {vErrors.push(err134);}errors++;}}if(data60.staleDays !== undefined){let data62 = data60.staleDays;if(!(((typeof data62 == "number") && (!(data62 % 1) && !isNaN(data62))) && (isFinite(data62)))){const err135 = {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 = [err135];}else {vErrors.push(err135);}errors++;}if((typeof data62 == "number") && (isFinite(data62))){if(data62 < 1 || isNaN(data62)){const err136 = {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 = [err136];}else {vErrors.push(err136);}errors++;}}}if(data60.classes !== undefined){let data63 = data60.classes;if(data63 && typeof data63 == "object" && !Array.isArray(data63)){for(const key17 in data63){if(!((((key17 === "orchestrationLogs") || (key17 === "validationEvidence")) || (key17 === "auditResults")) || (key17 === "planDirs"))){const err137 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err137];}else {vErrors.push(err137);}errors++;}}if(data63.orchestrationLogs !== undefined){if(typeof data63.orchestrationLogs !== "boolean"){const err138 = {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 = [err138];}else {vErrors.push(err138);}errors++;}}if(data63.validationEvidence !== undefined){if(typeof data63.validationEvidence !== "boolean"){const err139 = {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 = [err139];}else {vErrors.push(err139);}errors++;}}if(data63.auditResults !== undefined){if(typeof data63.auditResults !== "boolean"){const err140 = {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 = [err140];}else {vErrors.push(err140);}errors++;}}if(data63.planDirs !== undefined){if(typeof data63.planDirs !== "boolean"){const err141 = {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 = [err141];}else {vErrors.push(err141);}errors++;}}}else {const err142 = {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 = [err142];}else {vErrors.push(err142);}errors++;}}}else {const err143 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err143];}else {vErrors.push(err143);}errors++;}}if(data52.deliverRunner !== undefined){let data68 = data52.deliverRunner;if(data68 && typeof data68 == "object" && !Array.isArray(data68)){for(const key18 in data68){if(!((key18 === "concurrencyCap") || (key18 === "footprintGuard"))){const err144 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err144];}else {vErrors.push(err144);}errors++;}}if(data68.concurrencyCap !== undefined){let data69 = data68.concurrencyCap;if(!(((typeof data69 == "number") && (!(data69 % 1) && !isNaN(data69))) && (isFinite(data69)))){const err145 = {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 = [err145];}else {vErrors.push(err145);}errors++;}if((typeof data69 == "number") && (isFinite(data69))){if(data69 < 1 || isNaN(data69)){const err146 = {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 = [err146];}else {vErrors.push(err146);}errors++;}}}if(data68.footprintGuard !== undefined){let data70 = data68.footprintGuard;if(typeof data70 !== "string"){const err147 = {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 = [err147];}else {vErrors.push(err147);}errors++;}if(!((data70 === "enforce") || (data70 === "advisory"))){const err148 = {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 = [err148];}else {vErrors.push(err148);}errors++;}}}else {const err149 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err149];}else {vErrors.push(err149);}errors++;}}if(data52.worktreeIsolation !== undefined){let data71 = data52.worktreeIsolation;const _errs187 = errors;let valid48 = true;const _errs188 = errors;if(data71 && typeof data71 == "object" && !Array.isArray(data71)){let missing0;if((data71.enabled === undefined) && (missing0 = "enabled")){const err150 = {};if(vErrors === null){vErrors = [err150];}else {vErrors.push(err150);}errors++;}else {if(data71.enabled !== undefined){if(true !== data71.enabled){const err151 = {};if(vErrors === null){vErrors = [err151];}else {vErrors.push(err151);}errors++;}}}}var _valid0 = _errs188 === errors;errors = _errs187;if(vErrors !== null){if(_errs187){vErrors.length = _errs187;}else {vErrors = null;}}if(_valid0){const _errs190 = errors;if(data71 && typeof data71 == "object" && !Array.isArray(data71)){if(data71.root === undefined){const err152 = {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 = [err152];}else {vErrors.push(err152);}errors++;}}var _valid0 = _errs190 === errors;valid48 = _valid0;}if(!valid48){const err153 = {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 = [err153];}else {vErrors.push(err153);}errors++;}if(data71 && typeof data71 == "object" && !Array.isArray(data71)){for(const key19 in data71){if(!(((((((key19 === "enabled") || (key19 === "root")) || (key19 === "nodeModulesStrategy")) || (key19 === "primeFromPath")) || (key19 === "allowSymlinkOnWindows")) || (key19 === "reapOnSuccess")) || (key19 === "bootstrapFiles"))){const err154 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err154];}else {vErrors.push(err154);}errors++;}}if(data71.enabled !== undefined){if(typeof data71.enabled !== "boolean"){const err155 = {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 = [err155];}else {vErrors.push(err155);}errors++;}}if(data71.root !== undefined){let data74 = data71.root;if(typeof data74 === "string"){if(func2(data74) < 1){const err156 = {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 = [err156];}else {vErrors.push(err156);}errors++;}}else {const err157 = {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 = [err157];}else {vErrors.push(err157);}errors++;}}if(data71.nodeModulesStrategy !== undefined){let data75 = data71.nodeModulesStrategy;if(typeof data75 !== "string"){const err158 = {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 = [err158];}else {vErrors.push(err158);}errors++;}if(!((((data75 === "per-worktree") || (data75 === "clone")) || (data75 === "symlink")) || (data75 === "pnpm-store"))){const err159 = {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 = [err159];}else {vErrors.push(err159);}errors++;}}if(data71.primeFromPath !== undefined){let data76 = data71.primeFromPath;if((typeof data76 !== "string") && (data76 !== null)){const err160 = {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 = [err160];}else {vErrors.push(err160);}errors++;}if(typeof data76 === "string"){if(func2(data76) < 1){const err161 = {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 = [err161];}else {vErrors.push(err161);}errors++;}}}if(data71.allowSymlinkOnWindows !== undefined){if(typeof data71.allowSymlinkOnWindows !== "boolean"){const err162 = {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 = [err162];}else {vErrors.push(err162);}errors++;}}if(data71.reapOnSuccess !== undefined){if(typeof data71.reapOnSuccess !== "boolean"){const err163 = {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 = [err163];}else {vErrors.push(err163);}errors++;}}if(data71.bootstrapFiles !== undefined){let data79 = data71.bootstrapFiles;if(Array.isArray(data79)){const len8 = data79.length;for(let i10=0; i10<len8; i10++){let data80 = data79[i10];if(typeof data80 === "string"){if(func2(data80) < 1){const err164 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err164];}else {vErrors.push(err164);}errors++;}}else {const err165 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err165];}else {vErrors.push(err165);}errors++;}}}else {const err166 = {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 = [err166];}else {vErrors.push(err166);}errors++;}}}else {const err167 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err167];}else {vErrors.push(err167);}errors++;}}if(data52.quality !== undefined){let data81 = data52.quality;if(data81 && typeof data81 == "object" && !Array.isArray(data81)){for(const key20 in data81){if(!((((((((key20 === "gateScoping") || (key20 === "gates")) || (key20 === "formatAutofix")) || (key20 === "codingGuardrails")) || (key20 === "autoRefresh")) || (key20 === "baselineEpsilon")) || (key20 === "requireBaselines")) || (key20 === "navigability"))){const err168 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err168];}else {vErrors.push(err168);}errors++;}}if(data81.gateScoping !== undefined){let data82 = data81.gateScoping;if(data82 && typeof data82 == "object" && !Array.isArray(data82)){for(const key21 in data82){if(!((key21 === "scope") || (key21 === "diffRef"))){const err169 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err169];}else {vErrors.push(err169);}errors++;}}if(data82.scope !== undefined){let data83 = data82.scope;if(typeof data83 !== "string"){const err170 = {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 = [err170];}else {vErrors.push(err170);}errors++;}if(!((data83 === "diff") || (data83 === "full"))){const err171 = {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 = [err171];}else {vErrors.push(err171);}errors++;}}if(data82.diffRef !== undefined){let data84 = data82.diffRef;if(typeof data84 === "string"){if(func2(data84) < 1){const err172 = {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 = [err172];}else {vErrors.push(err172);}errors++;}}else {const err173 = {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 = [err173];}else {vErrors.push(err173);}errors++;}}}else {const err174 = {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 = [err174];}else {vErrors.push(err174);}errors++;}}if(data81.gates !== undefined){let data85 = data81.gates;if(data85 && typeof data85 == "object" && !Array.isArray(data85)){for(const key22 in data85){if(!((((((((key22 === "lint") || (key22 === "coverage")) || (key22 === "crap")) || (key22 === "maintainability")) || (key22 === "mutation")) || (key22 === "lighthouse")) || (key22 === "bundle-size")) || (key22 === "duplication"))){const err175 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err175];}else {vErrors.push(err175);}errors++;}}if(data85.lint !== undefined){let data86 = data85.lint;if(data86 && typeof data86 == "object" && !Array.isArray(data86)){for(const key23 in data86){if(!(((((key23 === "enabled") || (key23 === "baselinePath")) || (key23 === "tolerance")) || (key23 === "floors")) || (key23 === "components"))){const err176 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key23},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err176];}else {vErrors.push(err176);}errors++;}}if(data86.enabled !== undefined){if(typeof data86.enabled !== "boolean"){const err177 = {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 = [err177];}else {vErrors.push(err177);}errors++;}}if(data86.baselinePath !== undefined){let data88 = data86.baselinePath;const _errs228 = errors;const _errs229 = errors;if(typeof data88 === "string"){if(!pattern0.test(data88)){const err178 = {};if(vErrors === null){vErrors = [err178];}else {vErrors.push(err178);}errors++;}}var valid57 = _errs229 === errors;if(valid57){const err179 = {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 = [err179];}else {vErrors.push(err179);}errors++;}else {errors = _errs228;if(vErrors !== null){if(_errs228){vErrors.length = _errs228;}else {vErrors = null;}}}if(typeof data88 === "string"){if(func2(data88) < 1){const err180 = {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 = [err180];}else {vErrors.push(err180);}errors++;}}else {const err181 = {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 = [err181];}else {vErrors.push(err181);}errors++;}}if(data86.tolerance !== undefined){let data89 = data86.tolerance;if(data89 && typeof data89 == "object" && !Array.isArray(data89)){if(data89.kind === undefined){const err182 = {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 = [err182];}else {vErrors.push(err182);}errors++;}if(data89.value === undefined){const err183 = {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 = [err183];}else {vErrors.push(err183);}errors++;}for(const key24 in data89){if(!((key24 === "kind") || (key24 === "value"))){const err184 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key24},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err184];}else {vErrors.push(err184);}errors++;}}if(data89.kind !== undefined){let data90 = data89.kind;if(typeof data90 !== "string"){const err185 = {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 = [err185];}else {vErrors.push(err185);}errors++;}if(!((data90 === "absolute") || (data90 === "percent"))){const err186 = {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 = [err186];}else {vErrors.push(err186);}errors++;}}if(data89.value !== undefined){let data91 = data89.value;if((typeof data91 == "number") && (isFinite(data91))){if(data91 < 0 || isNaN(data91)){const err187 = {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 = [err187];}else {vErrors.push(err187);}errors++;}}else {const err188 = {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 = [err188];}else {vErrors.push(err188);}errors++;}}}else {const err189 = {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 = [err189];}else {vErrors.push(err189);}errors++;}}if(data86.floors !== undefined){let data92 = data86.floors;if(data92 && typeof data92 == "object" && !Array.isArray(data92)){for(const key25 in data92){let data93 = data92[key25];if(data93 && typeof data93 == "object" && !Array.isArray(data93)){for(const key26 in data93){let data94 = data93[key26];if(!((typeof data94 == "number") && (isFinite(data94)))){const err190 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key25.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key26.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 = [err190];}else {vErrors.push(err190);}errors++;}}}else {const err191 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key25.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 = [err191];}else {vErrors.push(err191);}errors++;}}}else {const err192 = {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 = [err192];}else {vErrors.push(err192);}errors++;}}if(data86.components !== undefined){let data95 = data86.components;if(data95 && typeof data95 == "object" && !Array.isArray(data95)){for(const key27 in data95){let data96 = data95[key27];if(Array.isArray(data96)){const len9 = data96.length;for(let i11=0; i11<len9; i11++){let data97 = data96[i11];if(typeof data97 === "string"){if(func2(data97) < 1){const err193 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key27.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,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 = [err193];}else {vErrors.push(err193);}errors++;}}else {const err194 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key27.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,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 = [err194];}else {vErrors.push(err194);}errors++;}}}else {const err195 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key27.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 = [err195];}else {vErrors.push(err195);}errors++;}}}else {const err196 = {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 = [err196];}else {vErrors.push(err196);}errors++;}}}else {const err197 = {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 = [err197];}else {vErrors.push(err197);}errors++;}}if(data85.coverage !== undefined){let data98 = data85.coverage;if(data98 && typeof data98 == "object" && !Array.isArray(data98)){for(const key28 in data98){if(!(((((((key28 === "enabled") || (key28 === "baselinePath")) || (key28 === "tolerance")) || (key28 === "floors")) || (key28 === "components")) || (key28 === "coveragePath")) || (key28 === "timeoutMs"))){const err198 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key28},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}}if(data98.enabled !== undefined){if(typeof data98.enabled !== "boolean"){const err199 = {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 = [err199];}else {vErrors.push(err199);}errors++;}}if(data98.baselinePath !== undefined){let data100 = data98.baselinePath;const _errs259 = errors;const _errs260 = errors;if(typeof data100 === "string"){if(!pattern0.test(data100)){const err200 = {};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}}var valid65 = _errs260 === errors;if(valid65){const err201 = {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 = [err201];}else {vErrors.push(err201);}errors++;}else {errors = _errs259;if(vErrors !== null){if(_errs259){vErrors.length = _errs259;}else {vErrors = null;}}}if(typeof data100 === "string"){if(func2(data100) < 1){const err202 = {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 = [err202];}else {vErrors.push(err202);}errors++;}}else {const err203 = {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 = [err203];}else {vErrors.push(err203);}errors++;}}if(data98.tolerance !== undefined){let data101 = data98.tolerance;if(data101 && typeof data101 == "object" && !Array.isArray(data101)){if(data101.kind === undefined){const err204 = {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 = [err204];}else {vErrors.push(err204);}errors++;}if(data101.value === undefined){const err205 = {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 = [err205];}else {vErrors.push(err205);}errors++;}for(const key29 in data101){if(!((key29 === "kind") || (key29 === "value"))){const err206 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key29},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err206];}else {vErrors.push(err206);}errors++;}}if(data101.kind !== undefined){let data102 = data101.kind;if(typeof data102 !== "string"){const err207 = {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 = [err207];}else {vErrors.push(err207);}errors++;}if(!((data102 === "absolute") || (data102 === "percent"))){const err208 = {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 = [err208];}else {vErrors.push(err208);}errors++;}}if(data101.value !== undefined){let data103 = data101.value;if((typeof data103 == "number") && (isFinite(data103))){if(data103 < 0 || isNaN(data103)){const err209 = {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 = [err209];}else {vErrors.push(err209);}errors++;}}else {const err210 = {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 = [err210];}else {vErrors.push(err210);}errors++;}}}else {const err211 = {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 = [err211];}else {vErrors.push(err211);}errors++;}}if(data98.floors !== undefined){let data104 = data98.floors;if(data104 && typeof data104 == "object" && !Array.isArray(data104)){for(const key30 in data104){let data105 = data104[key30];if(data105 && typeof data105 == "object" && !Array.isArray(data105)){for(const key31 in data105){let data106 = data105[key31];if(!((typeof data106 == "number") && (isFinite(data106)))){const err212 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key31.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 = [err212];}else {vErrors.push(err212);}errors++;}}}else {const err213 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key30.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 = [err213];}else {vErrors.push(err213);}errors++;}}}else {const err214 = {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 = [err214];}else {vErrors.push(err214);}errors++;}}if(data98.components !== undefined){let data107 = data98.components;if(data107 && typeof data107 == "object" && !Array.isArray(data107)){for(const key32 in data107){let data108 = data107[key32];if(Array.isArray(data108)){const len10 = data108.length;for(let i12=0; i12<len10; i12++){let data109 = data108[i12];if(typeof data109 === "string"){if(func2(data109) < 1){const err215 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,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 = [err215];}else {vErrors.push(err215);}errors++;}}else {const err216 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,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 = [err216];}else {vErrors.push(err216);}errors++;}}}else {const err217 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key32.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 = [err217];}else {vErrors.push(err217);}errors++;}}}else {const err218 = {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 = [err218];}else {vErrors.push(err218);}errors++;}}if(data98.coveragePath !== undefined){let data110 = data98.coveragePath;const _errs285 = errors;const _errs286 = errors;if(typeof data110 === "string"){if(!pattern0.test(data110)){const err219 = {};if(vErrors === null){vErrors = [err219];}else {vErrors.push(err219);}errors++;}}var valid72 = _errs286 === errors;if(valid72){const err220 = {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 = [err220];}else {vErrors.push(err220);}errors++;}else {errors = _errs285;if(vErrors !== null){if(_errs285){vErrors.length = _errs285;}else {vErrors = null;}}}if(typeof data110 === "string"){if(func2(data110) < 1){const err221 = {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 = [err221];}else {vErrors.push(err221);}errors++;}}else {const err222 = {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 = [err222];}else {vErrors.push(err222);}errors++;}}if(data98.timeoutMs !== undefined){let data111 = data98.timeoutMs;if(!(((typeof data111 == "number") && (!(data111 % 1) && !isNaN(data111))) && (isFinite(data111)))){const err223 = {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 = [err223];}else {vErrors.push(err223);}errors++;}if((typeof data111 == "number") && (isFinite(data111))){if(data111 < 1 || isNaN(data111)){const err224 = {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 = [err224];}else {vErrors.push(err224);}errors++;}}}}else {const err225 = {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 = [err225];}else {vErrors.push(err225);}errors++;}}if(data85.crap !== undefined){let data112 = data85.crap;if(data112 && typeof data112 == "object" && !Array.isArray(data112)){for(const key33 in data112){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key33))){const err226 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err226];}else {vErrors.push(err226);}errors++;}}if(data112.enabled !== undefined){if(typeof data112.enabled !== "boolean"){const err227 = {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 = [err227];}else {vErrors.push(err227);}errors++;}}if(data112.baselinePath !== undefined){let data114 = data112.baselinePath;const _errs296 = errors;const _errs297 = errors;if(typeof data114 === "string"){if(!pattern0.test(data114)){const err228 = {};if(vErrors === null){vErrors = [err228];}else {vErrors.push(err228);}errors++;}}var valid74 = _errs297 === errors;if(valid74){const err229 = {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 = [err229];}else {vErrors.push(err229);}errors++;}else {errors = _errs296;if(vErrors !== null){if(_errs296){vErrors.length = _errs296;}else {vErrors = null;}}}if(typeof data114 === "string"){if(func2(data114) < 1){const err230 = {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 = [err230];}else {vErrors.push(err230);}errors++;}}else {const err231 = {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 = [err231];}else {vErrors.push(err231);}errors++;}}if(data112.tolerance !== undefined){let data115 = data112.tolerance;if(data115 && typeof data115 == "object" && !Array.isArray(data115)){if(data115.kind === undefined){const err232 = {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 = [err232];}else {vErrors.push(err232);}errors++;}if(data115.value === undefined){const err233 = {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 = [err233];}else {vErrors.push(err233);}errors++;}for(const key34 in data115){if(!((key34 === "kind") || (key34 === "value"))){const err234 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key34},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err234];}else {vErrors.push(err234);}errors++;}}if(data115.kind !== undefined){let data116 = data115.kind;if(typeof data116 !== "string"){const err235 = {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 = [err235];}else {vErrors.push(err235);}errors++;}if(!((data116 === "absolute") || (data116 === "percent"))){const err236 = {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 = [err236];}else {vErrors.push(err236);}errors++;}}if(data115.value !== undefined){let data117 = data115.value;if((typeof data117 == "number") && (isFinite(data117))){if(data117 < 0 || isNaN(data117)){const err237 = {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 = [err237];}else {vErrors.push(err237);}errors++;}}else {const err238 = {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 = [err238];}else {vErrors.push(err238);}errors++;}}}else {const err239 = {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 = [err239];}else {vErrors.push(err239);}errors++;}}if(data112.floors !== undefined){let data118 = data112.floors;if(data118 && typeof data118 == "object" && !Array.isArray(data118)){for(const key35 in data118){let data119 = data118[key35];if(data119 && typeof data119 == "object" && !Array.isArray(data119)){for(const key36 in data119){let data120 = data119[key36];if(!((typeof data120 == "number") && (isFinite(data120)))){const err240 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key36.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 = [err240];}else {vErrors.push(err240);}errors++;}}}else {const err241 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key35.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 = [err241];}else {vErrors.push(err241);}errors++;}}}else {const err242 = {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 = [err242];}else {vErrors.push(err242);}errors++;}}if(data112.components !== undefined){let data121 = data112.components;if(data121 && typeof data121 == "object" && !Array.isArray(data121)){for(const key37 in data121){let data122 = data121[key37];if(Array.isArray(data122)){const len11 = data122.length;for(let i13=0; i13<len11; i13++){let data123 = data122[i13];if(typeof data123 === "string"){if(func2(data123) < 1){const err243 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i13,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 = [err243];}else {vErrors.push(err243);}errors++;}}else {const err244 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i13,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 = [err244];}else {vErrors.push(err244);}errors++;}}}else {const err245 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key37.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 = [err245];}else {vErrors.push(err245);}errors++;}}}else {const err246 = {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 = [err246];}else {vErrors.push(err246);}errors++;}}if(data112.targetDirs !== undefined){let data124 = data112.targetDirs;const _errs321 = errors;let valid81 = false;let passing0 = null;const _errs322 = errors;if(Array.isArray(data124)){const len12 = data124.length;for(let i14=0; i14<len12; i14++){if(typeof data124[i14] !== "string"){const err247 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i14,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 = [err247];}else {vErrors.push(err247);}errors++;}}}else {const err248 = {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 = [err248];}else {vErrors.push(err248);}errors++;}var _valid1 = _errs322 === errors;if(_valid1){valid81 = true;passing0 = 0;}const _errs326 = errors;if(data124 && typeof data124 == "object" && !Array.isArray(data124)){for(const key38 in data124){if(!((key38 === "append") || (key38 === "prepend"))){const err249 = {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: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err249];}else {vErrors.push(err249);}errors++;}}if(data124.append !== undefined){let data126 = data124.append;if(Array.isArray(data126)){const len13 = data126.length;for(let i15=0; i15<len13; i15++){if(typeof data126[i15] !== "string"){const err250 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i15,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 = [err250];}else {vErrors.push(err250);}errors++;}}}else {const err251 = {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 = [err251];}else {vErrors.push(err251);}errors++;}}if(data124.prepend !== undefined){let data128 = data124.prepend;if(Array.isArray(data128)){const len14 = data128.length;for(let i16=0; i16<len14; i16++){if(typeof data128[i16] !== "string"){const err252 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i16,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 = [err252];}else {vErrors.push(err252);}errors++;}}}else {const err253 = {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 = [err253];}else {vErrors.push(err253);}errors++;}}}else {const err254 = {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 = [err254];}else {vErrors.push(err254);}errors++;}var _valid1 = _errs326 === errors;if(_valid1 && valid81){valid81 = false;passing0 = [passing0, 1];}else {if(_valid1){valid81 = true;passing0 = 1;}}if(!valid81){const err255 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err255];}else {vErrors.push(err255);}errors++;}else {errors = _errs321;if(vErrors !== null){if(_errs321){vErrors.length = _errs321;}else {vErrors = null;}}}}if(data112.newMethodCeiling !== undefined){let data130 = data112.newMethodCeiling;if(!(((typeof data130 == "number") && (!(data130 % 1) && !isNaN(data130))) && (isFinite(data130)))){const err256 = {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 = [err256];}else {vErrors.push(err256);}errors++;}if((typeof data130 == "number") && (isFinite(data130))){if(data130 < 1 || isNaN(data130)){const err257 = {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 = [err257];}else {vErrors.push(err257);}errors++;}}}if(data112.requireCoverage !== undefined){if(typeof data112.requireCoverage !== "boolean"){const err258 = {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 = [err258];}else {vErrors.push(err258);}errors++;}}if(data112.minMethodResolutionRate !== undefined){let data132 = data112.minMethodResolutionRate;if((typeof data132 == "number") && (isFinite(data132))){if(data132 > 1 || isNaN(data132)){const err259 = {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 = [err259];}else {vErrors.push(err259);}errors++;}if(data132 < 0 || isNaN(data132)){const err260 = {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 = [err260];}else {vErrors.push(err260);}errors++;}}else {const err261 = {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 = [err261];}else {vErrors.push(err261);}errors++;}}if(data112.friction !== undefined){let data133 = data112.friction;if(data133 && typeof data133 == "object" && !Array.isArray(data133)){for(const key39 in data133){if(!(key39 === "markerKey")){const err262 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key39},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err262];}else {vErrors.push(err262);}errors++;}}if(data133.markerKey !== undefined){let data134 = data133.markerKey;if(typeof data134 === "string"){if(func2(data134) < 1){const err263 = {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 = [err263];}else {vErrors.push(err263);}errors++;}}else {const err264 = {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 = [err264];}else {vErrors.push(err264);}errors++;}}}else {const err265 = {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 = [err265];}else {vErrors.push(err265);}errors++;}}if(data112.refreshTag !== undefined){let data135 = data112.refreshTag;const _errs350 = errors;const _errs351 = errors;if(typeof data135 === "string"){if(!pattern0.test(data135)){const err266 = {};if(vErrors === null){vErrors = [err266];}else {vErrors.push(err266);}errors++;}}var valid90 = _errs351 === errors;if(valid90){const err267 = {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 = [err267];}else {vErrors.push(err267);}errors++;}else {errors = _errs350;if(vErrors !== null){if(_errs350){vErrors.length = _errs350;}else {vErrors = null;}}}if(typeof data135 === "string"){if(func2(data135) < 1){const err268 = {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 = [err268];}else {vErrors.push(err268);}errors++;}}else {const err269 = {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 = [err269];}else {vErrors.push(err269);}errors++;}}if(data112.refreshTimeoutMs !== undefined){let data136 = data112.refreshTimeoutMs;if(!(((typeof data136 == "number") && (!(data136 % 1) && !isNaN(data136))) && (isFinite(data136)))){const err270 = {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 = [err270];}else {vErrors.push(err270);}errors++;}if((typeof data136 == "number") && (isFinite(data136))){if(data136 < 1 || isNaN(data136)){const err271 = {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 = [err271];}else {vErrors.push(err271);}errors++;}}}if(data112.ignoreGlobs !== undefined){let data137 = data112.ignoreGlobs;if(Array.isArray(data137)){const len15 = data137.length;for(let i17=0; i17<len15; i17++){let data138 = data137[i17];if(typeof data138 === "string"){if(func2(data138) < 1){const err272 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i17,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 = [err272];}else {vErrors.push(err272);}errors++;}}else {const err273 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i17,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 = [err273];}else {vErrors.push(err273);}errors++;}}}else {const err274 = {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 = [err274];}else {vErrors.push(err274);}errors++;}}if(data112.incrementalCoverage !== undefined){let data139 = data112.incrementalCoverage;if(data139 && typeof data139 == "object" && !Array.isArray(data139)){for(const key40 in data139){if(!((((key40 === "skipWhenUnchanged") || (key40 === "baselineJoin")) || (key40 === "enabled")) || (key40 === "baseRef"))){const err275 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key40},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err275];}else {vErrors.push(err275);}errors++;}}if(data139.skipWhenUnchanged !== undefined){if(typeof data139.skipWhenUnchanged !== "boolean"){const err276 = {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 = [err276];}else {vErrors.push(err276);}errors++;}}if(data139.baselineJoin !== undefined){if(typeof data139.baselineJoin !== "boolean"){const err277 = {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 = [err277];}else {vErrors.push(err277);}errors++;}}if(data139.enabled !== undefined){if(typeof data139.enabled !== "boolean"){const err278 = {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 = [err278];}else {vErrors.push(err278);}errors++;}}if(data139.baseRef !== undefined){let data143 = data139.baseRef;if(typeof data143 === "string"){if(func2(data143) < 1){const err279 = {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 = [err279];}else {vErrors.push(err279);}errors++;}}else {const err280 = {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 = [err280];}else {vErrors.push(err280);}errors++;}}}else {const err281 = {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 = [err281];}else {vErrors.push(err281);}errors++;}}}else {const err282 = {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 = [err282];}else {vErrors.push(err282);}errors++;}}if(data85.maintainability !== undefined){let data144 = data85.maintainability;if(data144 && typeof data144 == "object" && !Array.isArray(data144)){for(const key41 in data144){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties, key41))){const err283 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key41},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err283];}else {vErrors.push(err283);}errors++;}}if(data144.enabled !== undefined){if(typeof data144.enabled !== "boolean"){const err284 = {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 = [err284];}else {vErrors.push(err284);}errors++;}}if(data144.baselinePath !== undefined){let data146 = data144.baselinePath;const _errs376 = errors;const _errs377 = errors;if(typeof data146 === "string"){if(!pattern0.test(data146)){const err285 = {};if(vErrors === null){vErrors = [err285];}else {vErrors.push(err285);}errors++;}}var valid95 = _errs377 === errors;if(valid95){const err286 = {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 = [err286];}else {vErrors.push(err286);}errors++;}else {errors = _errs376;if(vErrors !== null){if(_errs376){vErrors.length = _errs376;}else {vErrors = null;}}}if(typeof data146 === "string"){if(func2(data146) < 1){const err287 = {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 = [err287];}else {vErrors.push(err287);}errors++;}}else {const err288 = {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 = [err288];}else {vErrors.push(err288);}errors++;}}if(data144.tolerance !== undefined){let data147 = data144.tolerance;if(data147 && typeof data147 == "object" && !Array.isArray(data147)){if(data147.kind === undefined){const err289 = {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 = [err289];}else {vErrors.push(err289);}errors++;}if(data147.value === undefined){const err290 = {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 = [err290];}else {vErrors.push(err290);}errors++;}for(const key42 in data147){if(!((key42 === "kind") || (key42 === "value"))){const err291 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key42},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err291];}else {vErrors.push(err291);}errors++;}}if(data147.kind !== undefined){let data148 = data147.kind;if(typeof data148 !== "string"){const err292 = {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 = [err292];}else {vErrors.push(err292);}errors++;}if(!((data148 === "absolute") || (data148 === "percent"))){const err293 = {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 = [err293];}else {vErrors.push(err293);}errors++;}}if(data147.value !== undefined){let data149 = data147.value;if((typeof data149 == "number") && (isFinite(data149))){if(data149 < 0 || isNaN(data149)){const err294 = {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 = [err294];}else {vErrors.push(err294);}errors++;}}else {const err295 = {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 = [err295];}else {vErrors.push(err295);}errors++;}}}else {const err296 = {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 = [err296];}else {vErrors.push(err296);}errors++;}}if(data144.floors !== undefined){let data150 = data144.floors;if(data150 && typeof data150 == "object" && !Array.isArray(data150)){for(const key43 in data150){let data151 = data150[key43];if(data151 && typeof data151 == "object" && !Array.isArray(data151)){for(const key44 in data151){let data152 = data151[key44];if(!((typeof data152 == "number") && (isFinite(data152)))){const err297 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key43.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key44.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 = [err297];}else {vErrors.push(err297);}errors++;}}}else {const err298 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key43.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 = [err298];}else {vErrors.push(err298);}errors++;}}}else {const err299 = {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 = [err299];}else {vErrors.push(err299);}errors++;}}if(data144.components !== undefined){let data153 = data144.components;if(data153 && typeof data153 == "object" && !Array.isArray(data153)){for(const key45 in data153){let data154 = data153[key45];if(Array.isArray(data154)){const len16 = data154.length;for(let i18=0; i18<len16; i18++){let data155 = data154[i18];if(typeof data155 === "string"){if(func2(data155) < 1){const err300 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key45.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err300];}else {vErrors.push(err300);}errors++;}}else {const err301 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key45.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err301];}else {vErrors.push(err301);}errors++;}}}else {const err302 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key45.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 = [err302];}else {vErrors.push(err302);}errors++;}}}else {const err303 = {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 = [err303];}else {vErrors.push(err303);}errors++;}}if(data144.targetDirs !== undefined){let data156 = data144.targetDirs;const _errs401 = errors;let valid102 = false;let passing1 = null;const _errs402 = errors;if(Array.isArray(data156)){const len17 = data156.length;for(let i19=0; i19<len17; i19++){if(typeof data156[i19] !== "string"){const err304 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i19,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 = [err304];}else {vErrors.push(err304);}errors++;}}}else {const err305 = {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 = [err305];}else {vErrors.push(err305);}errors++;}var _valid2 = _errs402 === errors;if(_valid2){valid102 = true;passing1 = 0;}const _errs406 = errors;if(data156 && typeof data156 == "object" && !Array.isArray(data156)){for(const key46 in data156){if(!((key46 === "append") || (key46 === "prepend"))){const err306 = {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: key46},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err306];}else {vErrors.push(err306);}errors++;}}if(data156.append !== undefined){let data158 = data156.append;if(Array.isArray(data158)){const len18 = data158.length;for(let i20=0; i20<len18; i20++){if(typeof data158[i20] !== "string"){const err307 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i20,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 = [err307];}else {vErrors.push(err307);}errors++;}}}else {const err308 = {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 = [err308];}else {vErrors.push(err308);}errors++;}}if(data156.prepend !== undefined){let data160 = data156.prepend;if(Array.isArray(data160)){const len19 = data160.length;for(let i21=0; i21<len19; i21++){if(typeof data160[i21] !== "string"){const err309 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i21,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 = [err309];}else {vErrors.push(err309);}errors++;}}}else {const err310 = {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 = [err310];}else {vErrors.push(err310);}errors++;}}}else {const err311 = {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 = [err311];}else {vErrors.push(err311);}errors++;}var _valid2 = _errs406 === errors;if(_valid2 && valid102){valid102 = false;passing1 = [passing1, 1];}else {if(_valid2){valid102 = true;passing1 = 1;}}if(!valid102){const err312 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err312];}else {vErrors.push(err312);}errors++;}else {errors = _errs401;if(vErrors !== null){if(_errs401){vErrors.length = _errs401;}else {vErrors = null;}}}}if(data144.refreshTag !== undefined){let data162 = data144.refreshTag;const _errs419 = errors;const _errs420 = errors;if(typeof data162 === "string"){if(!pattern0.test(data162)){const err313 = {};if(vErrors === null){vErrors = [err313];}else {vErrors.push(err313);}errors++;}}var valid110 = _errs420 === errors;if(valid110){const err314 = {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 = [err314];}else {vErrors.push(err314);}errors++;}else {errors = _errs419;if(vErrors !== null){if(_errs419){vErrors.length = _errs419;}else {vErrors = null;}}}if(typeof data162 === "string"){if(func2(data162) < 1){const err315 = {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 = [err315];}else {vErrors.push(err315);}errors++;}}else {const err316 = {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 = [err316];}else {vErrors.push(err316);}errors++;}}if(data144.refreshTimeoutMs !== undefined){let data163 = data144.refreshTimeoutMs;if(!(((typeof data163 == "number") && (!(data163 % 1) && !isNaN(data163))) && (isFinite(data163)))){const err317 = {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 = [err317];}else {vErrors.push(err317);}errors++;}if((typeof data163 == "number") && (isFinite(data163))){if(data163 < 1 || isNaN(data163)){const err318 = {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 = [err318];}else {vErrors.push(err318);}errors++;}}}if(data144.ignoreGlobs !== undefined){let data164 = data144.ignoreGlobs;if(Array.isArray(data164)){const len20 = data164.length;for(let i22=0; i22<len20; i22++){let data165 = data164[i22];if(typeof data165 === "string"){if(func2(data165) < 1){const err319 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i22,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 = [err319];}else {vErrors.push(err319);}errors++;}}else {const err320 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i22,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 = [err320];}else {vErrors.push(err320);}errors++;}}}else {const err321 = {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 = [err321];}else {vErrors.push(err321);}errors++;}}}else {const err322 = {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 = [err322];}else {vErrors.push(err322);}errors++;}}if(data85.mutation !== undefined){let data166 = data85.mutation;if(data166 && typeof data166 == "object" && !Array.isArray(data166)){for(const key47 in data166){if(!((((((key47 === "enabled") || (key47 === "baselinePath")) || (key47 === "tolerance")) || (key47 === "floors")) || (key47 === "components")) || (key47 === "strykerConfigPath"))){const err323 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key47},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err323];}else {vErrors.push(err323);}errors++;}}if(data166.enabled !== undefined){if(typeof data166.enabled !== "boolean"){const err324 = {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 = [err324];}else {vErrors.push(err324);}errors++;}}if(data166.baselinePath !== undefined){let data168 = data166.baselinePath;const _errs434 = errors;const _errs435 = errors;if(typeof data168 === "string"){if(!pattern0.test(data168)){const err325 = {};if(vErrors === null){vErrors = [err325];}else {vErrors.push(err325);}errors++;}}var valid114 = _errs435 === errors;if(valid114){const err326 = {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 = [err326];}else {vErrors.push(err326);}errors++;}else {errors = _errs434;if(vErrors !== null){if(_errs434){vErrors.length = _errs434;}else {vErrors = null;}}}if(typeof data168 === "string"){if(func2(data168) < 1){const err327 = {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 = [err327];}else {vErrors.push(err327);}errors++;}}else {const err328 = {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 = [err328];}else {vErrors.push(err328);}errors++;}}if(data166.tolerance !== undefined){let data169 = data166.tolerance;if(data169 && typeof data169 == "object" && !Array.isArray(data169)){if(data169.kind === undefined){const err329 = {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 = [err329];}else {vErrors.push(err329);}errors++;}if(data169.value === undefined){const err330 = {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 = [err330];}else {vErrors.push(err330);}errors++;}for(const key48 in data169){if(!((key48 === "kind") || (key48 === "value"))){const err331 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key48},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err331];}else {vErrors.push(err331);}errors++;}}if(data169.kind !== undefined){let data170 = data169.kind;if(typeof data170 !== "string"){const err332 = {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 = [err332];}else {vErrors.push(err332);}errors++;}if(!((data170 === "absolute") || (data170 === "percent"))){const err333 = {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 = [err333];}else {vErrors.push(err333);}errors++;}}if(data169.value !== undefined){let data171 = data169.value;if((typeof data171 == "number") && (isFinite(data171))){if(data171 < 0 || isNaN(data171)){const err334 = {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 = [err334];}else {vErrors.push(err334);}errors++;}}else {const err335 = {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 = [err335];}else {vErrors.push(err335);}errors++;}}}else {const err336 = {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 = [err336];}else {vErrors.push(err336);}errors++;}}if(data166.floors !== undefined){let data172 = data166.floors;if(data172 && typeof data172 == "object" && !Array.isArray(data172)){for(const key49 in data172){let data173 = data172[key49];if(data173 && typeof data173 == "object" && !Array.isArray(data173)){for(const key50 in data173){let data174 = data173[key50];if(!((typeof data174 == "number") && (isFinite(data174)))){const err337 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key49.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key50.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 = [err337];}else {vErrors.push(err337);}errors++;}}}else {const err338 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key49.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 = [err338];}else {vErrors.push(err338);}errors++;}}}else {const err339 = {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 = [err339];}else {vErrors.push(err339);}errors++;}}if(data166.components !== undefined){let data175 = data166.components;if(data175 && typeof data175 == "object" && !Array.isArray(data175)){for(const key51 in data175){let data176 = data175[key51];if(Array.isArray(data176)){const len21 = data176.length;for(let i23=0; i23<len21; i23++){let data177 = data176[i23];if(typeof data177 === "string"){if(func2(data177) < 1){const err340 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key51.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,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 = [err340];}else {vErrors.push(err340);}errors++;}}else {const err341 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key51.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,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 = [err341];}else {vErrors.push(err341);}errors++;}}}else {const err342 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key51.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 = [err342];}else {vErrors.push(err342);}errors++;}}}else {const err343 = {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 = [err343];}else {vErrors.push(err343);}errors++;}}if(data166.strykerConfigPath !== undefined){let data178 = data166.strykerConfigPath;if((typeof data178 !== "string") && (data178 !== null)){const err344 = {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 = [err344];}else {vErrors.push(err344);}errors++;}const _errs460 = errors;const _errs461 = errors;if(errors === _errs461){if(typeof data178 === "string"){if(!pattern0.test(data178)){const err345 = {};if(vErrors === null){vErrors = [err345];}else {vErrors.push(err345);}errors++;}}else {const err346 = {};if(vErrors === null){vErrors = [err346];}else {vErrors.push(err346);}errors++;}}var valid121 = _errs461 === errors;if(valid121){const err347 = {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 = [err347];}else {vErrors.push(err347);}errors++;}else {errors = _errs460;if(vErrors !== null){if(_errs460){vErrors.length = _errs460;}else {vErrors = null;}}}if(typeof data178 === "string"){if(func2(data178) < 1){const err348 = {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 = [err348];}else {vErrors.push(err348);}errors++;}}}}else {const err349 = {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 = [err349];}else {vErrors.push(err349);}errors++;}}if(data85.lighthouse !== undefined){let data179 = data85.lighthouse;if(data179 && typeof data179 == "object" && !Array.isArray(data179)){for(const key52 in data179){if(!(((((((key52 === "enabled") || (key52 === "baselinePath")) || (key52 === "tolerance")) || (key52 === "floors")) || (key52 === "components")) || (key52 === "baseUrl")) || (key52 === "routes"))){const err350 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key52},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err350];}else {vErrors.push(err350);}errors++;}}if(data179.enabled !== undefined){if(typeof data179.enabled !== "boolean"){const err351 = {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 = [err351];}else {vErrors.push(err351);}errors++;}}if(data179.baselinePath !== undefined){let data181 = data179.baselinePath;const _errs470 = errors;const _errs471 = errors;if(typeof data181 === "string"){if(!pattern0.test(data181)){const err352 = {};if(vErrors === null){vErrors = [err352];}else {vErrors.push(err352);}errors++;}}var valid123 = _errs471 === errors;if(valid123){const err353 = {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 = [err353];}else {vErrors.push(err353);}errors++;}else {errors = _errs470;if(vErrors !== null){if(_errs470){vErrors.length = _errs470;}else {vErrors = null;}}}if(typeof data181 === "string"){if(func2(data181) < 1){const err354 = {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 = [err354];}else {vErrors.push(err354);}errors++;}}else {const err355 = {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 = [err355];}else {vErrors.push(err355);}errors++;}}if(data179.tolerance !== undefined){let data182 = data179.tolerance;if(data182 && typeof data182 == "object" && !Array.isArray(data182)){if(data182.kind === undefined){const err356 = {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 = [err356];}else {vErrors.push(err356);}errors++;}if(data182.value === undefined){const err357 = {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 = [err357];}else {vErrors.push(err357);}errors++;}for(const key53 in data182){if(!((key53 === "kind") || (key53 === "value"))){const err358 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key53},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err358];}else {vErrors.push(err358);}errors++;}}if(data182.kind !== undefined){let data183 = data182.kind;if(typeof data183 !== "string"){const err359 = {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 = [err359];}else {vErrors.push(err359);}errors++;}if(!((data183 === "absolute") || (data183 === "percent"))){const err360 = {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 = [err360];}else {vErrors.push(err360);}errors++;}}if(data182.value !== undefined){let data184 = data182.value;if((typeof data184 == "number") && (isFinite(data184))){if(data184 < 0 || isNaN(data184)){const err361 = {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 = [err361];}else {vErrors.push(err361);}errors++;}}else {const err362 = {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 = [err362];}else {vErrors.push(err362);}errors++;}}}else {const err363 = {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 = [err363];}else {vErrors.push(err363);}errors++;}}if(data179.floors !== undefined){let data185 = data179.floors;if(data185 && typeof data185 == "object" && !Array.isArray(data185)){for(const key54 in data185){let data186 = data185[key54];if(data186 && typeof data186 == "object" && !Array.isArray(data186)){for(const key55 in data186){let data187 = data186[key55];if(!((typeof data187 == "number") && (isFinite(data187)))){const err364 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key55.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 = [err364];}else {vErrors.push(err364);}errors++;}}}else {const err365 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key54.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 = [err365];}else {vErrors.push(err365);}errors++;}}}else {const err366 = {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 = [err366];}else {vErrors.push(err366);}errors++;}}if(data179.components !== undefined){let data188 = data179.components;if(data188 && typeof data188 == "object" && !Array.isArray(data188)){for(const key56 in data188){let data189 = data188[key56];if(Array.isArray(data189)){const len22 = data189.length;for(let i24=0; i24<len22; i24++){let data190 = data189[i24];if(typeof data190 === "string"){if(func2(data190) < 1){const err367 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err367];}else {vErrors.push(err367);}errors++;}}else {const err368 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err368];}else {vErrors.push(err368);}errors++;}}}else {const err369 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key56.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 = [err369];}else {vErrors.push(err369);}errors++;}}}else {const err370 = {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 = [err370];}else {vErrors.push(err370);}errors++;}}if(data179.baseUrl !== undefined){let data191 = data179.baseUrl;if((typeof data191 !== "string") && (data191 !== null)){const err371 = {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 = [err371];}else {vErrors.push(err371);}errors++;}const _errs496 = errors;const _errs497 = errors;if(errors === _errs497){if(typeof data191 === "string"){if(!pattern0.test(data191)){const err372 = {};if(vErrors === null){vErrors = [err372];}else {vErrors.push(err372);}errors++;}}else {const err373 = {};if(vErrors === null){vErrors = [err373];}else {vErrors.push(err373);}errors++;}}var valid130 = _errs497 === errors;if(valid130){const err374 = {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 = [err374];}else {vErrors.push(err374);}errors++;}else {errors = _errs496;if(vErrors !== null){if(_errs496){vErrors.length = _errs496;}else {vErrors = null;}}}if(typeof data191 === "string"){if(func2(data191) < 1){const err375 = {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 = [err375];}else {vErrors.push(err375);}errors++;}}}if(data179.routes !== undefined){let data192 = data179.routes;if(Array.isArray(data192)){const len23 = data192.length;for(let i25=0; i25<len23; i25++){let data193 = data192[i25];if(data193 && typeof data193 == "object" && !Array.isArray(data193)){if(data193.path === undefined){const err376 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25,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 = [err376];}else {vErrors.push(err376);}errors++;}for(const key57 in data193){if(!((key57 === "path") || (key57 === "formFactor"))){const err377 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err377];}else {vErrors.push(err377);}errors++;}}if(data193.path !== undefined){let data194 = data193.path;if(typeof data194 === "string"){if(func2(data194) < 1){const err378 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err378];}else {vErrors.push(err378);}errors++;}}else {const err379 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err379];}else {vErrors.push(err379);}errors++;}}if(data193.formFactor !== undefined){let data195 = data193.formFactor;if(typeof data195 !== "string"){const err380 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err380];}else {vErrors.push(err380);}errors++;}if(!((data195 === "mobile") || (data195 === "desktop"))){const err381 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err381];}else {vErrors.push(err381);}errors++;}}}else {const err382 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25,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 = [err382];}else {vErrors.push(err382);}errors++;}}}else {const err383 = {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 = [err383];}else {vErrors.push(err383);}errors++;}}}else {const err384 = {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 = [err384];}else {vErrors.push(err384);}errors++;}}if(data85["bundle-size"] !== undefined){let data196 = data85["bundle-size"];if(data196 && typeof data196 == "object" && !Array.isArray(data196)){for(const key58 in data196){if(!((((((key58 === "enabled") || (key58 === "baselinePath")) || (key58 === "tolerance")) || (key58 === "floors")) || (key58 === "components")) || (key58 === "bundles"))){const err385 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key58},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err385];}else {vErrors.push(err385);}errors++;}}if(data196.enabled !== undefined){if(typeof data196.enabled !== "boolean"){const err386 = {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 = [err386];}else {vErrors.push(err386);}errors++;}}if(data196.baselinePath !== undefined){let data198 = data196.baselinePath;const _errs515 = errors;const _errs516 = errors;if(typeof data198 === "string"){if(!pattern0.test(data198)){const err387 = {};if(vErrors === null){vErrors = [err387];}else {vErrors.push(err387);}errors++;}}var valid135 = _errs516 === errors;if(valid135){const err388 = {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 = [err388];}else {vErrors.push(err388);}errors++;}else {errors = _errs515;if(vErrors !== null){if(_errs515){vErrors.length = _errs515;}else {vErrors = null;}}}if(typeof data198 === "string"){if(func2(data198) < 1){const err389 = {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 = [err389];}else {vErrors.push(err389);}errors++;}}else {const err390 = {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 = [err390];}else {vErrors.push(err390);}errors++;}}if(data196.tolerance !== undefined){let data199 = data196.tolerance;if(data199 && typeof data199 == "object" && !Array.isArray(data199)){if(data199.kind === undefined){const err391 = {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 = [err391];}else {vErrors.push(err391);}errors++;}if(data199.value === undefined){const err392 = {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 = [err392];}else {vErrors.push(err392);}errors++;}for(const key59 in data199){if(!((key59 === "kind") || (key59 === "value"))){const err393 = {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: key59},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err393];}else {vErrors.push(err393);}errors++;}}if(data199.kind !== undefined){let data200 = data199.kind;if(typeof data200 !== "string"){const err394 = {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 = [err394];}else {vErrors.push(err394);}errors++;}if(!((data200 === "absolute") || (data200 === "percent"))){const err395 = {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 = [err395];}else {vErrors.push(err395);}errors++;}}if(data199.value !== undefined){let data201 = data199.value;if((typeof data201 == "number") && (isFinite(data201))){if(data201 < 0 || isNaN(data201)){const err396 = {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 = [err396];}else {vErrors.push(err396);}errors++;}}else {const err397 = {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 = [err397];}else {vErrors.push(err397);}errors++;}}}else {const err398 = {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 = [err398];}else {vErrors.push(err398);}errors++;}}if(data196.floors !== undefined){let data202 = data196.floors;if(data202 && typeof data202 == "object" && !Array.isArray(data202)){for(const key60 in data202){let data203 = data202[key60];if(data203 && typeof data203 == "object" && !Array.isArray(data203)){for(const key61 in data203){let data204 = data203[key61];if(!((typeof data204 == "number") && (isFinite(data204)))){const err399 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key60.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key61.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 = [err399];}else {vErrors.push(err399);}errors++;}}}else {const err400 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key60.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 = [err400];}else {vErrors.push(err400);}errors++;}}}else {const err401 = {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 = [err401];}else {vErrors.push(err401);}errors++;}}if(data196.components !== undefined){let data205 = data196.components;if(data205 && typeof data205 == "object" && !Array.isArray(data205)){for(const key62 in data205){let data206 = data205[key62];if(Array.isArray(data206)){const len24 = data206.length;for(let i26=0; i26<len24; i26++){let data207 = data206[i26];if(typeof data207 === "string"){if(func2(data207) < 1){const err402 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key62.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i26,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 = [err402];}else {vErrors.push(err402);}errors++;}}else {const err403 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key62.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i26,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 = [err403];}else {vErrors.push(err403);}errors++;}}}else {const err404 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key62.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 = [err404];}else {vErrors.push(err404);}errors++;}}}else {const err405 = {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 = [err405];}else {vErrors.push(err405);}errors++;}}if(data196.bundles !== undefined){let data208 = data196.bundles;if(Array.isArray(data208)){const len25 = data208.length;for(let i27=0; i27<len25; i27++){let data209 = data208[i27];if(data209 && typeof data209 == "object" && !Array.isArray(data209)){if(data209.name === undefined){const err406 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err406];}else {vErrors.push(err406);}errors++;}if(data209.path === undefined){const err407 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err407];}else {vErrors.push(err407);}errors++;}if(data209.limit === undefined){const err408 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err408];}else {vErrors.push(err408);}errors++;}for(const key63 in data209){if(!(((key63 === "name") || (key63 === "path")) || (key63 === "limit"))){const err409 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err409];}else {vErrors.push(err409);}errors++;}}if(data209.name !== undefined){let data210 = data209.name;if(typeof data210 === "string"){if(func2(data210) < 1){const err410 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err410];}else {vErrors.push(err410);}errors++;}}else {const err411 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err411];}else {vErrors.push(err411);}errors++;}}if(data209.path !== undefined){let data211 = data209.path;if(typeof data211 === "string"){if(func2(data211) < 1){const err412 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err412];}else {vErrors.push(err412);}errors++;}}else {const err413 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err413];}else {vErrors.push(err413);}errors++;}}if(data209.limit !== undefined){let data212 = data209.limit;if(typeof data212 === "string"){if(func2(data212) < 1){const err414 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err414];}else {vErrors.push(err414);}errors++;}}else {const err415 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err415];}else {vErrors.push(err415);}errors++;}}}else {const err416 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err416];}else {vErrors.push(err416);}errors++;}}}else {const err417 = {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 = [err417];}else {vErrors.push(err417);}errors++;}}}else {const err418 = {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 = [err418];}else {vErrors.push(err418);}errors++;}}if(data85.duplication !== undefined){let data213 = data85.duplication;if(data213 && typeof data213 == "object" && !Array.isArray(data213)){for(const key64 in data213){if(!((((((((key64 === "enabled") || (key64 === "baselinePath")) || (key64 === "tolerance")) || (key64 === "floors")) || (key64 === "components")) || (key64 === "targetDirs")) || (key64 === "refreshTimeoutMs")) || (key64 === "ignoreGlobs"))){const err419 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key64},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err419];}else {vErrors.push(err419);}errors++;}}if(data213.enabled !== undefined){if(typeof data213.enabled !== "boolean"){const err420 = {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 = [err420];}else {vErrors.push(err420);}errors++;}}if(data213.baselinePath !== undefined){let data215 = data213.baselinePath;const _errs557 = errors;const _errs558 = errors;if(typeof data215 === "string"){if(!pattern0.test(data215)){const err421 = {};if(vErrors === null){vErrors = [err421];}else {vErrors.push(err421);}errors++;}}var valid146 = _errs558 === errors;if(valid146){const err422 = {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 = [err422];}else {vErrors.push(err422);}errors++;}else {errors = _errs557;if(vErrors !== null){if(_errs557){vErrors.length = _errs557;}else {vErrors = null;}}}if(typeof data215 === "string"){if(func2(data215) < 1){const err423 = {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 = [err423];}else {vErrors.push(err423);}errors++;}}else {const err424 = {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 = [err424];}else {vErrors.push(err424);}errors++;}}if(data213.tolerance !== undefined){let data216 = data213.tolerance;if(data216 && typeof data216 == "object" && !Array.isArray(data216)){if(data216.kind === undefined){const err425 = {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 = [err425];}else {vErrors.push(err425);}errors++;}if(data216.value === undefined){const err426 = {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 = [err426];}else {vErrors.push(err426);}errors++;}for(const key65 in data216){if(!((key65 === "kind") || (key65 === "value"))){const err427 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key65},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err427];}else {vErrors.push(err427);}errors++;}}if(data216.kind !== undefined){let data217 = data216.kind;if(typeof data217 !== "string"){const err428 = {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 = [err428];}else {vErrors.push(err428);}errors++;}if(!((data217 === "absolute") || (data217 === "percent"))){const err429 = {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 = [err429];}else {vErrors.push(err429);}errors++;}}if(data216.value !== undefined){let data218 = data216.value;if((typeof data218 == "number") && (isFinite(data218))){if(data218 < 0 || isNaN(data218)){const err430 = {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 = [err430];}else {vErrors.push(err430);}errors++;}}else {const err431 = {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 = [err431];}else {vErrors.push(err431);}errors++;}}}else {const err432 = {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 = [err432];}else {vErrors.push(err432);}errors++;}}if(data213.floors !== undefined){let data219 = data213.floors;if(data219 && typeof data219 == "object" && !Array.isArray(data219)){for(const key66 in data219){let data220 = data219[key66];if(data220 && typeof data220 == "object" && !Array.isArray(data220)){for(const key67 in data220){let data221 = data220[key67];if(!((typeof data221 == "number") && (isFinite(data221)))){const err433 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key66.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key67.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 = [err433];}else {vErrors.push(err433);}errors++;}}}else {const err434 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key66.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 = [err434];}else {vErrors.push(err434);}errors++;}}}else {const err435 = {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 = [err435];}else {vErrors.push(err435);}errors++;}}if(data213.components !== undefined){let data222 = data213.components;if(data222 && typeof data222 == "object" && !Array.isArray(data222)){for(const key68 in data222){let data223 = data222[key68];if(Array.isArray(data223)){const len26 = data223.length;for(let i28=0; i28<len26; i28++){let data224 = data223[i28];if(typeof data224 === "string"){if(func2(data224) < 1){const err436 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i28,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 = [err436];}else {vErrors.push(err436);}errors++;}}else {const err437 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i28,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 = [err437];}else {vErrors.push(err437);}errors++;}}}else {const err438 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key68.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 = [err438];}else {vErrors.push(err438);}errors++;}}}else {const err439 = {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 = [err439];}else {vErrors.push(err439);}errors++;}}if(data213.targetDirs !== undefined){let data225 = data213.targetDirs;const _errs582 = errors;let valid153 = false;let passing2 = null;const _errs583 = errors;if(Array.isArray(data225)){const len27 = data225.length;for(let i29=0; i29<len27; i29++){if(typeof data225[i29] !== "string"){const err440 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i29,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 = [err440];}else {vErrors.push(err440);}errors++;}}}else {const err441 = {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 = [err441];}else {vErrors.push(err441);}errors++;}var _valid3 = _errs583 === errors;if(_valid3){valid153 = true;passing2 = 0;}const _errs587 = errors;if(data225 && typeof data225 == "object" && !Array.isArray(data225)){for(const key69 in data225){if(!((key69 === "append") || (key69 === "prepend"))){const err442 = {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: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err442];}else {vErrors.push(err442);}errors++;}}if(data225.append !== undefined){let data227 = data225.append;if(Array.isArray(data227)){const len28 = data227.length;for(let i30=0; i30<len28; i30++){if(typeof data227[i30] !== "string"){const err443 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i30,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 = [err443];}else {vErrors.push(err443);}errors++;}}}else {const err444 = {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 = [err444];}else {vErrors.push(err444);}errors++;}}if(data225.prepend !== undefined){let data229 = data225.prepend;if(Array.isArray(data229)){const len29 = data229.length;for(let i31=0; i31<len29; i31++){if(typeof data229[i31] !== "string"){const err445 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i31,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 = [err445];}else {vErrors.push(err445);}errors++;}}}else {const err446 = {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 = [err446];}else {vErrors.push(err446);}errors++;}}}else {const err447 = {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 = [err447];}else {vErrors.push(err447);}errors++;}var _valid3 = _errs587 === errors;if(_valid3 && valid153){valid153 = false;passing2 = [passing2, 1];}else {if(_valid3){valid153 = true;passing2 = 1;}}if(!valid153){const err448 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err448];}else {vErrors.push(err448);}errors++;}else {errors = _errs582;if(vErrors !== null){if(_errs582){vErrors.length = _errs582;}else {vErrors = null;}}}}if(data213.refreshTimeoutMs !== undefined){let data231 = data213.refreshTimeoutMs;if(!(((typeof data231 == "number") && (!(data231 % 1) && !isNaN(data231))) && (isFinite(data231)))){const err449 = {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 = [err449];}else {vErrors.push(err449);}errors++;}if((typeof data231 == "number") && (isFinite(data231))){if(data231 < 1 || isNaN(data231)){const err450 = {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 = [err450];}else {vErrors.push(err450);}errors++;}}}if(data213.ignoreGlobs !== undefined){let data232 = data213.ignoreGlobs;if(Array.isArray(data232)){const len30 = data232.length;for(let i32=0; i32<len30; i32++){let data233 = data232[i32];if(typeof data233 === "string"){if(func2(data233) < 1){const err451 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i32,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 = [err451];}else {vErrors.push(err451);}errors++;}}else {const err452 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i32,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 = [err452];}else {vErrors.push(err452);}errors++;}}}else {const err453 = {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 = [err453];}else {vErrors.push(err453);}errors++;}}}else {const err454 = {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 = [err454];}else {vErrors.push(err454);}errors++;}}}else {const err455 = {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 = [err455];}else {vErrors.push(err455);}errors++;}}if(data81.formatAutofix !== undefined){let data234 = data81.formatAutofix;if(data234 && typeof data234 == "object" && !Array.isArray(data234)){for(const key70 in data234){if(!(key70 === "timeoutMs")){const err456 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key70},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err456];}else {vErrors.push(err456);}errors++;}}if(data234.timeoutMs !== undefined){let data235 = data234.timeoutMs;if(!(((typeof data235 == "number") && (!(data235 % 1) && !isNaN(data235))) && (isFinite(data235)))){const err457 = {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 = [err457];}else {vErrors.push(err457);}errors++;}if((typeof data235 == "number") && (isFinite(data235))){if(data235 < 1 || isNaN(data235)){const err458 = {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 = [err458];}else {vErrors.push(err458);}errors++;}}}}else {const err459 = {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 = [err459];}else {vErrors.push(err459);}errors++;}}if(data81.codingGuardrails !== undefined){let data236 = data81.codingGuardrails;if(data236 && typeof data236 == "object" && !Array.isArray(data236)){for(const key71 in data236){if(!((key71 === "cyclomaticFlag") || (key71 === "requireSiblingTest"))){const err460 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key71},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err460];}else {vErrors.push(err460);}errors++;}}if(data236.cyclomaticFlag !== undefined){let data237 = data236.cyclomaticFlag;if(!(((typeof data237 == "number") && (!(data237 % 1) && !isNaN(data237))) && (isFinite(data237)))){const err461 = {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 = [err461];}else {vErrors.push(err461);}errors++;}if((typeof data237 == "number") && (isFinite(data237))){if(data237 < 1 || isNaN(data237)){const err462 = {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 = [err462];}else {vErrors.push(err462);}errors++;}}}if(data236.requireSiblingTest !== undefined){if(typeof data236.requireSiblingTest !== "boolean"){const err463 = {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 = [err463];}else {vErrors.push(err463);}errors++;}}}else {const err464 = {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 = [err464];}else {vErrors.push(err464);}errors++;}}if(data81.autoRefresh !== undefined){let data239 = data81.autoRefresh;if(data239 && typeof data239 == "object" && !Array.isArray(data239)){for(const key72 in data239){if(!(((key72 === "enabled") || (key72 === "crapJumpCap")) || (key72 === "scope"))){const err465 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key72},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err465];}else {vErrors.push(err465);}errors++;}}if(data239.enabled !== undefined){if(typeof data239.enabled !== "boolean"){const err466 = {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 = [err466];}else {vErrors.push(err466);}errors++;}}if(data239.crapJumpCap !== undefined){let data241 = data239.crapJumpCap;if((typeof data241 == "number") && (isFinite(data241))){if(data241 < 0 || isNaN(data241)){const err467 = {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 = [err467];}else {vErrors.push(err467);}errors++;}}else {const err468 = {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 = [err468];}else {vErrors.push(err468);}errors++;}}if(data239.scope !== undefined){let data242 = data239.scope;if(typeof data242 !== "string"){const err469 = {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 = [err469];}else {vErrors.push(err469);}errors++;}if(!((data242 === "diff") || (data242 === "full"))){const err470 = {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 = [err470];}else {vErrors.push(err470);}errors++;}}}else {const err471 = {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 = [err471];}else {vErrors.push(err471);}errors++;}}if(data81.baselineEpsilon !== undefined){let data243 = data81.baselineEpsilon;if(data243 && typeof data243 == "object" && !Array.isArray(data243)){for(const key73 in data243){if(!((((((((key73 === "maintainability") || (key73 === "crap")) || (key73 === "coverage")) || (key73 === "mutation")) || (key73 === "lint")) || (key73 === "lighthouse")) || (key73 === "bundle-size")) || (key73 === "duplication"))){const err472 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key73},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err472];}else {vErrors.push(err472);}errors++;}}if(data243.maintainability !== undefined){let data244 = data243.maintainability;if((typeof data244 == "number") && (isFinite(data244))){if(data244 < 0 || isNaN(data244)){const err473 = {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 = [err473];}else {vErrors.push(err473);}errors++;}}else {const err474 = {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 = [err474];}else {vErrors.push(err474);}errors++;}}if(data243.crap !== undefined){let data245 = data243.crap;if((typeof data245 == "number") && (isFinite(data245))){if(data245 < 0 || isNaN(data245)){const err475 = {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 = [err475];}else {vErrors.push(err475);}errors++;}}else {const err476 = {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 = [err476];}else {vErrors.push(err476);}errors++;}}if(data243.coverage !== undefined){let data246 = data243.coverage;if((typeof data246 == "number") && (isFinite(data246))){if(data246 < 0 || isNaN(data246)){const err477 = {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 = [err477];}else {vErrors.push(err477);}errors++;}}else {const err478 = {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 = [err478];}else {vErrors.push(err478);}errors++;}}if(data243.mutation !== undefined){let data247 = data243.mutation;if((typeof data247 == "number") && (isFinite(data247))){if(data247 < 0 || isNaN(data247)){const err479 = {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 = [err479];}else {vErrors.push(err479);}errors++;}}else {const err480 = {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 = [err480];}else {vErrors.push(err480);}errors++;}}if(data243.lint !== undefined){let data248 = data243.lint;if((typeof data248 == "number") && (isFinite(data248))){if(data248 < 0 || isNaN(data248)){const err481 = {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 = [err481];}else {vErrors.push(err481);}errors++;}}else {const err482 = {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 = [err482];}else {vErrors.push(err482);}errors++;}}if(data243.lighthouse !== undefined){let data249 = data243.lighthouse;if((typeof data249 == "number") && (isFinite(data249))){if(data249 < 0 || isNaN(data249)){const err483 = {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 = [err483];}else {vErrors.push(err483);}errors++;}}else {const err484 = {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 = [err484];}else {vErrors.push(err484);}errors++;}}if(data243["bundle-size"] !== undefined){let data250 = data243["bundle-size"];if((typeof data250 == "number") && (isFinite(data250))){if(data250 < 0 || isNaN(data250)){const err485 = {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 = [err485];}else {vErrors.push(err485);}errors++;}}else {const err486 = {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 = [err486];}else {vErrors.push(err486);}errors++;}}if(data243.duplication !== undefined){let data251 = data243.duplication;if((typeof data251 == "number") && (isFinite(data251))){if(data251 < 0 || isNaN(data251)){const err487 = {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 = [err487];}else {vErrors.push(err487);}errors++;}}else {const err488 = {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 = [err488];}else {vErrors.push(err488);}errors++;}}}else {const err489 = {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 = [err489];}else {vErrors.push(err489);}errors++;}}if(data81.requireBaselines !== undefined){if(typeof data81.requireBaselines !== "boolean"){const err490 = {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 = [err490];}else {vErrors.push(err490);}errors++;}}if(data81.navigability !== undefined){let data253 = data81.navigability;if(data253 && typeof data253 == "object" && !Array.isArray(data253)){for(const key74 in data253){if(!(((key74 === "routeGlobs") || (key74 === "navRegistry")) || (key74 === "journeySuite"))){const err491 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err491];}else {vErrors.push(err491);}errors++;}}if(data253.routeGlobs !== undefined){let data254 = data253.routeGlobs;if(Array.isArray(data254)){const len31 = data254.length;for(let i33=0; i33<len31; i33++){if(typeof data254[i33] !== "string"){const err492 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err492];}else {vErrors.push(err492);}errors++;}}}else {const err493 = {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 = [err493];}else {vErrors.push(err493);}errors++;}}if(data253.navRegistry !== undefined){let data256 = data253.navRegistry;if(Array.isArray(data256)){const len32 = data256.length;for(let i34=0; i34<len32; i34++){if(typeof data256[i34] !== "string"){const err494 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i34,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err494];}else {vErrors.push(err494);}errors++;}}}else {const err495 = {instancePath:instancePath+"/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 = [err495];}else {vErrors.push(err495);}errors++;}}if(data253.journeySuite !== undefined){if(typeof data253.journeySuite !== "string"){const err496 = {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 = [err496];}else {vErrors.push(err496);}errors++;}}}else {const err497 = {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 = [err497];}else {vErrors.push(err497);}errors++;}}}else {const err498 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err498];}else {vErrors.push(err498);}errors++;}}if(data52.mergeWatch !== undefined){let data259 = data52.mergeWatch;if(data259 && typeof data259 == "object" && !Array.isArray(data259)){for(const key75 in data259){if(!(((((key75 === "mode") || (key75 === "intervalSeconds")) || (key75 === "maxWaitSeconds")) || (key75 === "maxBudgetSeconds")) || (key75 === "updateAttempts"))){const err499 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err499];}else {vErrors.push(err499);}errors++;}}if(data259.mode !== undefined){let data260 = data259.mode;if(typeof data260 !== "string"){const err500 = {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 = [err500];}else {vErrors.push(err500);}errors++;}if(!((data260 === "sync") || (data260 === "async"))){const err501 = {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 = [err501];}else {vErrors.push(err501);}errors++;}}if(data259.intervalSeconds !== undefined){let data261 = data259.intervalSeconds;if(!(((typeof data261 == "number") && (!(data261 % 1) && !isNaN(data261))) && (isFinite(data261)))){const err502 = {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 = [err502];}else {vErrors.push(err502);}errors++;}if((typeof data261 == "number") && (isFinite(data261))){if(data261 < 1 || isNaN(data261)){const err503 = {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 = [err503];}else {vErrors.push(err503);}errors++;}}}if(data259.maxWaitSeconds !== undefined){let data262 = data259.maxWaitSeconds;if(!(((typeof data262 == "number") && (!(data262 % 1) && !isNaN(data262))) && (isFinite(data262)))){const err504 = {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 = [err504];}else {vErrors.push(err504);}errors++;}if((typeof data262 == "number") && (isFinite(data262))){if(data262 < 1 || isNaN(data262)){const err505 = {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 = [err505];}else {vErrors.push(err505);}errors++;}}}if(data259.maxBudgetSeconds !== undefined){let data263 = data259.maxBudgetSeconds;if(!(((typeof data263 == "number") && (!(data263 % 1) && !isNaN(data263))) && (isFinite(data263)))){const err506 = {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 = [err506];}else {vErrors.push(err506);}errors++;}if((typeof data263 == "number") && (isFinite(data263))){if(data263 < 1 || isNaN(data263)){const err507 = {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 = [err507];}else {vErrors.push(err507);}errors++;}}}if(data259.updateAttempts !== undefined){let data264 = data259.updateAttempts;if(!(((typeof data264 == "number") && (!(data264 % 1) && !isNaN(data264))) && (isFinite(data264)))){const err508 = {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 = [err508];}else {vErrors.push(err508);}errors++;}if((typeof data264 == "number") && (isFinite(data264))){if(data264 < 0 || isNaN(data264)){const err509 = {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 = [err509];}else {vErrors.push(err509);}errors++;}}}}else {const err510 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err510];}else {vErrors.push(err510);}errors++;}}if(data52.codeReview !== undefined){let data265 = data52.codeReview;if(data265 && typeof data265 == "object" && !Array.isArray(data265)){for(const key76 in data265){if(!((((key76 === "providers") || (key76 === "providerConfig")) || (key76 === "maxFixAttempts")) || (key76 === "autoFixSeverity"))){const err511 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key76},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err511];}else {vErrors.push(err511);}errors++;}}if(data265.providers !== undefined){let data266 = data265.providers;if(Array.isArray(data266)){const len33 = data266.length;for(let i35=0; i35<len33; i35++){let data267 = data266[i35];if(data267 && typeof data267 == "object" && !Array.isArray(data267)){if(data267.name === undefined){const err512 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err512];}else {vErrors.push(err512);}errors++;}for(const key77 in data267){if(!(((((key77 === "name") || (key77 === "scopes")) || (key77 === "optional")) || (key77 === "manualPrompt")) || (key77 === "when"))){const err513 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err513];}else {vErrors.push(err513);}errors++;}}if(data267.name !== undefined){let data268 = data267.name;if(typeof data268 !== "string"){const err514 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err514];}else {vErrors.push(err514);}errors++;}if(!((((data268 === "native") || (data268 === "codex")) || (data268 === "security-review")) || (data268 === "ultrareview"))){const err515 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err515];}else {vErrors.push(err515);}errors++;}}if(data267.scopes !== undefined){let data269 = data267.scopes;if(Array.isArray(data269)){const len34 = data269.length;for(let i36=0; i36<len34; i36++){let data270 = data269[i36];if(typeof data270 !== "string"){const err516 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/scopes/" + i36,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 = [err516];}else {vErrors.push(err516);}errors++;}if(!((data270 === "story") || (data270 === "epic"))){const err517 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/scopes/" + i36,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 = [err517];}else {vErrors.push(err517);}errors++;}}}else {const err518 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err518];}else {vErrors.push(err518);}errors++;}}if(data267.optional !== undefined){if(typeof data267.optional !== "boolean"){const err519 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err519];}else {vErrors.push(err519);}errors++;}}if(data267.manualPrompt !== undefined){if(typeof data267.manualPrompt !== "boolean"){const err520 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err520];}else {vErrors.push(err520);}errors++;}}if(data267.when !== undefined){let data273 = data267.when;if(data273 && typeof data273 == "object" && !Array.isArray(data273)){for(const key78 in data273){if(!((key78 === "label") || (key78 === "labelAny"))){const err521 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key78},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err521];}else {vErrors.push(err521);}errors++;}}if(data273.label !== undefined){let data274 = data273.label;if(typeof data274 === "string"){if(func2(data274) < 1){const err522 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err522];}else {vErrors.push(err522);}errors++;}}else {const err523 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err523];}else {vErrors.push(err523);}errors++;}}if(data273.labelAny !== undefined){let data275 = data273.labelAny;if(Array.isArray(data275)){if(data275.length < 1){const err524 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err524];}else {vErrors.push(err524);}errors++;}const len35 = data275.length;for(let i37=0; i37<len35; i37++){let data276 = data275[i37];if(typeof data276 === "string"){if(func2(data276) < 1){const err525 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/when/labelAny/" + i37,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 = [err525];}else {vErrors.push(err525);}errors++;}}else {const err526 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/when/labelAny/" + i37,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 = [err526];}else {vErrors.push(err526);}errors++;}}}else {const err527 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err527];}else {vErrors.push(err527);}errors++;}}}else {const err528 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err528];}else {vErrors.push(err528);}errors++;}}}else {const err529 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err529];}else {vErrors.push(err529);}errors++;}}}else {const err530 = {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 = [err530];}else {vErrors.push(err530);}errors++;}}if(data265.providerConfig !== undefined){let data277 = data265.providerConfig;if(data277 && typeof data277 == "object" && !Array.isArray(data277)){}else {const err531 = {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 = [err531];}else {vErrors.push(err531);}errors++;}}if(data265.maxFixAttempts !== undefined){let data278 = data265.maxFixAttempts;if(!(((typeof data278 == "number") && (!(data278 % 1) && !isNaN(data278))) && (isFinite(data278)))){const err532 = {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 = [err532];}else {vErrors.push(err532);}errors++;}if((typeof data278 == "number") && (isFinite(data278))){if(data278 < 0 || isNaN(data278)){const err533 = {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 = [err533];}else {vErrors.push(err533);}errors++;}}}if(data265.autoFixSeverity !== undefined){let data279 = data265.autoFixSeverity;if(typeof data279 !== "string"){const err534 = {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 = [err534];}else {vErrors.push(err534);}errors++;}if(!((data279 === "high") || (data279 === "medium"))){const err535 = {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 = [err535];}else {vErrors.push(err535);}errors++;}}}else {const err536 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err536];}else {vErrors.push(err536);}errors++;}}if(data52.review !== undefined){let data280 = data52.review;if(data280 && typeof data280 == "object" && !Array.isArray(data280)){for(const key79 in data280){if(!(key79 === "lensDiffFloor")){const err537 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key79},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err537];}else {vErrors.push(err537);}errors++;}}if(data280.lensDiffFloor !== undefined){let data281 = data280.lensDiffFloor;if(!(((typeof data281 == "number") && (!(data281 % 1) && !isNaN(data281))) && (isFinite(data281)))){const err538 = {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 = [err538];}else {vErrors.push(err538);}errors++;}if((typeof data281 == "number") && (isFinite(data281))){if(data281 < 0 || isNaN(data281)){const err539 = {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 = [err539];}else {vErrors.push(err539);}errors++;}}}}else {const err540 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err540];}else {vErrors.push(err540);}errors++;}}if(data52.refactorStage !== undefined){let data282 = data52.refactorStage;if(data282 && typeof data282 == "object" && !Array.isArray(data282)){for(const key80 in data282){if(!(key80 === "enabled")){const err541 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key80},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err541];}else {vErrors.push(err541);}errors++;}}if(data282.enabled !== undefined){if(typeof data282.enabled !== "boolean"){const err542 = {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 = [err542];}else {vErrors.push(err542);}errors++;}}}else {const err543 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err543];}else {vErrors.push(err543);}errors++;}}if(data52.acceptanceEval !== undefined){let data284 = data52.acceptanceEval;if(data284 && typeof data284 == "object" && !Array.isArray(data284)){for(const key81 in data284){if(!(key81 === "maxRounds")){const err544 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key81},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err544];}else {vErrors.push(err544);}errors++;}}if(data284.maxRounds !== undefined){let data285 = data284.maxRounds;if(!(((typeof data285 == "number") && (!(data285 % 1) && !isNaN(data285))) && (isFinite(data285)))){const err545 = {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 = [err545];}else {vErrors.push(err545);}errors++;}if((typeof data285 == "number") && (isFinite(data285))){if(data285 < 0 || isNaN(data285)){const err546 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err546];}else {vErrors.push(err546);}errors++;}}}}else {const err547 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err547];}else {vErrors.push(err547);}errors++;}}if(data52.feedbackLoop !== undefined){let data286 = data52.feedbackLoop;if(data286 && typeof data286 == "object" && !Array.isArray(data286)){for(const key82 in data286){if(!(((key82 === "auditResultsAutoFile") || (key82 === "retroProposals")) || (key82 === "frictionWindowDays"))){const err548 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key82},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err548];}else {vErrors.push(err548);}errors++;}}if(data286.auditResultsAutoFile !== undefined){if(typeof data286.auditResultsAutoFile !== "boolean"){const err549 = {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 = [err549];}else {vErrors.push(err549);}errors++;}}if(data286.retroProposals !== undefined){if(typeof data286.retroProposals !== "boolean"){const err550 = {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 = [err550];}else {vErrors.push(err550);}errors++;}}if(data286.frictionWindowDays !== undefined){let data289 = data286.frictionWindowDays;if(!(((typeof data289 == "number") && (!(data289 % 1) && !isNaN(data289))) && (isFinite(data289)))){const err551 = {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 = [err551];}else {vErrors.push(err551);}errors++;}if((typeof data289 == "number") && (isFinite(data289))){if(data289 < 1 || isNaN(data289)){const err552 = {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 = [err552];}else {vErrors.push(err552);}errors++;}}}}else {const err553 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err553];}else {vErrors.push(err553);}errors++;}}if(data52.auditToStories !== undefined){let data290 = data52.auditToStories;if(data290 && typeof data290 == "object" && !Array.isArray(data290)){for(const key83 in data290){if(!((key83 === "severityFloor") || (key83 === "autoComment"))){const err554 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key83},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err554];}else {vErrors.push(err554);}errors++;}}if(data290.severityFloor !== undefined){let data291 = data290.severityFloor;if(typeof data291 !== "string"){const err555 = {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 = [err555];}else {vErrors.push(err555);}errors++;}if(!(((((data291 === "critical") || (data291 === "high")) || (data291 === "medium")) || (data291 === "low")) || (data291 === "all"))){const err556 = {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 = [err556];}else {vErrors.push(err556);}errors++;}}if(data290.autoComment !== undefined){if(typeof data290.autoComment !== "boolean"){const err557 = {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 = [err557];}else {vErrors.push(err557);}errors++;}}}else {const err558 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err558];}else {vErrors.push(err558);}errors++;}}if(data52.ci !== undefined){let data293 = data52.ci;if(data293 && typeof data293 == "object" && !Array.isArray(data293)){for(const key84 in data293){if(!(((((key84 === "watch") || (key84 === "autoMerge")) || (key84 === "blockOnAdvisoryFailure")) || (key84 === "advisoryAllowlist")) || (key84 === "rerunAdvisory"))){const err559 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key84},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err559];}else {vErrors.push(err559);}errors++;}}if(data293.watch !== undefined){let data294 = data293.watch;if(data294 && typeof data294 == "object" && !Array.isArray(data294)){for(const key85 in data294){if(!((((key85 === "pollIntervalMs") || (key85 === "maxPolls")) || (key85 === "maxResumes")) || (key85 === "attachWindowMs"))){const err560 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key85},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err560];}else {vErrors.push(err560);}errors++;}}if(data294.pollIntervalMs !== undefined){let data295 = data294.pollIntervalMs;if(!(((typeof data295 == "number") && (!(data295 % 1) && !isNaN(data295))) && (isFinite(data295)))){const err561 = {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 = [err561];}else {vErrors.push(err561);}errors++;}if((typeof data295 == "number") && (isFinite(data295))){if(data295 < 1 || isNaN(data295)){const err562 = {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 = [err562];}else {vErrors.push(err562);}errors++;}}}if(data294.maxPolls !== undefined){let data296 = data294.maxPolls;if(!(((typeof data296 == "number") && (!(data296 % 1) && !isNaN(data296))) && (isFinite(data296)))){const err563 = {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 = [err563];}else {vErrors.push(err563);}errors++;}if((typeof data296 == "number") && (isFinite(data296))){if(data296 < 1 || isNaN(data296)){const err564 = {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 = [err564];}else {vErrors.push(err564);}errors++;}}}if(data294.maxResumes !== undefined){let data297 = data294.maxResumes;if(!(((typeof data297 == "number") && (!(data297 % 1) && !isNaN(data297))) && (isFinite(data297)))){const err565 = {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 = [err565];}else {vErrors.push(err565);}errors++;}if((typeof data297 == "number") && (isFinite(data297))){if(data297 < 0 || isNaN(data297)){const err566 = {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 = [err566];}else {vErrors.push(err566);}errors++;}}}if(data294.attachWindowMs !== undefined){let data298 = data294.attachWindowMs;if(!(((typeof data298 == "number") && (!(data298 % 1) && !isNaN(data298))) && (isFinite(data298)))){const err567 = {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 = [err567];}else {vErrors.push(err567);}errors++;}if((typeof data298 == "number") && (isFinite(data298))){if(data298 < 1 || isNaN(data298)){const err568 = {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 = [err568];}else {vErrors.push(err568);}errors++;}}}}else {const err569 = {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 = [err569];}else {vErrors.push(err569);}errors++;}}if(data293.autoMerge !== undefined){let data299 = data293.autoMerge;if(typeof data299 !== "string"){const err570 = {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 = [err570];}else {vErrors.push(err570);}errors++;}if(!((data299 === "trust-ci") || (data299 === "strict"))){const err571 = {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 = [err571];}else {vErrors.push(err571);}errors++;}}if(data293.blockOnAdvisoryFailure !== undefined){if(typeof data293.blockOnAdvisoryFailure !== "boolean"){const err572 = {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 = [err572];}else {vErrors.push(err572);}errors++;}}if(data293.advisoryAllowlist !== undefined){let data301 = data293.advisoryAllowlist;if(Array.isArray(data301)){const len36 = data301.length;for(let i38=0; i38<len36; i38++){if(typeof data301[i38] !== "string"){const err573 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i38,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err573];}else {vErrors.push(err573);}errors++;}}}else {const err574 = {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 = [err574];}else {vErrors.push(err574);}errors++;}}if(data293.rerunAdvisory !== undefined){let data303 = data293.rerunAdvisory;if(!(((typeof data303 == "number") && (!(data303 % 1) && !isNaN(data303))) && (isFinite(data303)))){const err575 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err575];}else {vErrors.push(err575);}errors++;}if((typeof data303 == "number") && (isFinite(data303))){if(data303 < 0 || isNaN(data303)){const err576 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err576];}else {vErrors.push(err576);}errors++;}}}}else {const err577 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err577];}else {vErrors.push(err577);}errors++;}}if(data52.routing !== undefined){let data304 = data52.routing;if(data304 && typeof data304 == "object" && !Array.isArray(data304)){for(const key86 in data304){if(!(((key86 === "roleScopedAgents") || (key86 === "ceremonyProfile")) || (key86 === "closeAndLand"))){const err578 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key86},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err578];}else {vErrors.push(err578);}errors++;}}if(data304.roleScopedAgents !== undefined){if(typeof data304.roleScopedAgents !== "boolean"){const err579 = {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 = [err579];}else {vErrors.push(err579);}errors++;}}if(data304.ceremonyProfile !== undefined){let data306 = data304.ceremonyProfile;if(typeof data306 !== "string"){const err580 = {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 = [err580];}else {vErrors.push(err580);}errors++;}if(!(((data306 === "minimal") || (data306 === "standard")) || (data306 === "strict"))){const err581 = {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 = [err581];}else {vErrors.push(err581);}errors++;}}if(data304.closeAndLand !== undefined){if(typeof data304.closeAndLand !== "boolean"){const err582 = {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 = [err582];}else {vErrors.push(err582);}errors++;}}}else {const err583 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err583];}else {vErrors.push(err583);}errors++;}}}else {const err584 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err584];}else {vErrors.push(err584);}errors++;}}if(data.qa !== undefined){let data308 = data.qa;if(data308 && typeof data308 == "object" && !Array.isArray(data308)){for(const key87 in data308){if(!(((((((key87 === "featureRoot") || (key87 === "fixturesManifest")) || (key87 === "environments")) || (key87 === "personas")) || (key87 === "gherkinLint")) || (key87 === "consoleAllowlist")) || (key87 === "designTokens"))){const err585 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key87},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err585];}else {vErrors.push(err585);}errors++;}}if(data308.featureRoot !== undefined){let data309 = data308.featureRoot;const _errs775 = errors;const _errs776 = errors;if(typeof data309 === "string"){if(!pattern0.test(data309)){const err586 = {};if(vErrors === null){vErrors = [err586];}else {vErrors.push(err586);}errors++;}}var valid193 = _errs776 === errors;if(valid193){const err587 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err587];}else {vErrors.push(err587);}errors++;}else {errors = _errs775;if(vErrors !== null){if(_errs775){vErrors.length = _errs775;}else {vErrors = null;}}}if(typeof data309 === "string"){if(func2(data309) < 1){const err588 = {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 = [err588];}else {vErrors.push(err588);}errors++;}}else {const err589 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err589];}else {vErrors.push(err589);}errors++;}}if(data308.fixturesManifest !== undefined){let data310 = data308.fixturesManifest;const _errs779 = errors;const _errs780 = errors;if(typeof data310 === "string"){if(!pattern0.test(data310)){const err590 = {};if(vErrors === null){vErrors = [err590];}else {vErrors.push(err590);}errors++;}}var valid194 = _errs780 === errors;if(valid194){const err591 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err591];}else {vErrors.push(err591);}errors++;}else {errors = _errs779;if(vErrors !== null){if(_errs779){vErrors.length = _errs779;}else {vErrors = null;}}}if(typeof data310 === "string"){if(func2(data310) < 1){const err592 = {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 = [err592];}else {vErrors.push(err592);}errors++;}}else {const err593 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err593];}else {vErrors.push(err593);}errors++;}}if(data308.environments !== undefined){let data311 = data308.environments;if(data311 && typeof data311 == "object" && !Array.isArray(data311)){if(Object.keys(data311).length < 1){const err594 = {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 = [err594];}else {vErrors.push(err594);}errors++;}for(const key88 in data311){let data312 = data311[key88];if(data312 && typeof data312 == "object" && !Array.isArray(data312)){if(data312.baseUrl === undefined){const err595 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err595];}else {vErrors.push(err595);}errors++;}for(const key89 in data312){if(!(((key89 === "baseUrl") || (key89 === "signInSeam")) || (key89 === "allowWrites"))){const err596 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key89},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err596];}else {vErrors.push(err596);}errors++;}}if(data312.baseUrl !== undefined){let data313 = data312.baseUrl;const _errs789 = errors;const _errs790 = errors;if(typeof data313 === "string"){if(!pattern0.test(data313)){const err597 = {};if(vErrors === null){vErrors = [err597];}else {vErrors.push(err597);}errors++;}}var valid197 = _errs790 === errors;if(valid197){const err598 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err598];}else {vErrors.push(err598);}errors++;}else {errors = _errs789;if(vErrors !== null){if(_errs789){vErrors.length = _errs789;}else {vErrors = null;}}}if(typeof data313 === "string"){if(func2(data313) < 1){const err599 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err599];}else {vErrors.push(err599);}errors++;}}else {const err600 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err600];}else {vErrors.push(err600);}errors++;}}if(data312.signInSeam !== undefined){let data314 = data312.signInSeam;const _errs792 = errors;let valid198 = false;let passing3 = null;const _errs793 = errors;if(data314 && typeof data314 == "object" && !Array.isArray(data314)){if(data314.urlTemplate === undefined){const err601 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err601];}else {vErrors.push(err601);}errors++;}for(const key90 in data314){if(!(key90 === "urlTemplate")){const err602 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key90},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err602];}else {vErrors.push(err602);}errors++;}}if(data314.urlTemplate !== undefined){let data315 = data314.urlTemplate;const _errs798 = errors;const _errs799 = errors;if(typeof data315 === "string"){if(!pattern0.test(data315)){const err603 = {};if(vErrors === null){vErrors = [err603];}else {vErrors.push(err603);}errors++;}}var valid200 = _errs799 === errors;if(valid200){const err604 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err604];}else {vErrors.push(err604);}errors++;}else {errors = _errs798;if(vErrors !== null){if(_errs798){vErrors.length = _errs798;}else {vErrors = null;}}}if(typeof data315 === "string"){if(func2(data315) < 1){const err605 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err605];}else {vErrors.push(err605);}errors++;}}else {const err606 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err606];}else {vErrors.push(err606);}errors++;}}}else {const err607 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err607];}else {vErrors.push(err607);}errors++;}var _valid4 = _errs793 === errors;if(_valid4){valid198 = true;passing3 = 0;}const _errs800 = errors;if(data314 && typeof data314 == "object" && !Array.isArray(data314)){if(data314.skill === undefined){const err608 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err608];}else {vErrors.push(err608);}errors++;}for(const key91 in data314){if(!(key91 === "skill")){const err609 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key91},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err609];}else {vErrors.push(err609);}errors++;}}if(data314.skill !== undefined){let data316 = data314.skill;const _errs805 = errors;const _errs806 = errors;if(typeof data316 === "string"){if(!pattern0.test(data316)){const err610 = {};if(vErrors === null){vErrors = [err610];}else {vErrors.push(err610);}errors++;}}var valid202 = _errs806 === errors;if(valid202){const err611 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err611];}else {vErrors.push(err611);}errors++;}else {errors = _errs805;if(vErrors !== null){if(_errs805){vErrors.length = _errs805;}else {vErrors = null;}}}if(typeof data316 === "string"){if(func2(data316) < 1){const err612 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err612];}else {vErrors.push(err612);}errors++;}if(!pattern31.test(data316)){const err613 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/pattern",keyword:"pattern",params:{pattern: "^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"},message:"must match pattern \""+"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"+"\""};if(vErrors === null){vErrors = [err613];}else {vErrors.push(err613);}errors++;}}else {const err614 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err614];}else {vErrors.push(err614);}errors++;}}}else {const err615 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err615];}else {vErrors.push(err615);}errors++;}var _valid4 = _errs800 === errors;if(_valid4 && valid198){valid198 = false;passing3 = [passing3, 1];}else {if(_valid4){valid198 = true;passing3 = 1;}}if(!valid198){const err616 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err616];}else {vErrors.push(err616);}errors++;}else {errors = _errs792;if(vErrors !== null){if(_errs792){vErrors.length = _errs792;}else {vErrors = null;}}}}if(data312.allowWrites !== undefined){if(typeof data312.allowWrites !== "boolean"){const err617 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err617];}else {vErrors.push(err617);}errors++;}}}else {const err618 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err618];}else {vErrors.push(err618);}errors++;}}}else {const err619 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err619];}else {vErrors.push(err619);}errors++;}}if(data308.personas !== undefined){let data318 = data308.personas;const _errs810 = errors;let valid203 = false;let passing4 = null;const _errs811 = errors;if(Array.isArray(data318)){if(data318.length < 1){const err620 = {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 = [err620];}else {vErrors.push(err620);}errors++;}const len37 = data318.length;for(let i39=0; i39<len37; i39++){let data319 = data318[i39];const _errs815 = errors;const _errs816 = errors;if(typeof data319 === "string"){if(!pattern0.test(data319)){const err621 = {};if(vErrors === null){vErrors = [err621];}else {vErrors.push(err621);}errors++;}}var valid206 = _errs816 === errors;if(valid206){const err622 = {instancePath:instancePath+"/qa/personas/" + i39,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err622];}else {vErrors.push(err622);}errors++;}else {errors = _errs815;if(vErrors !== null){if(_errs815){vErrors.length = _errs815;}else {vErrors = null;}}}if(typeof data319 === "string"){if(func2(data319) < 1){const err623 = {instancePath:instancePath+"/qa/personas/" + i39,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 = [err623];}else {vErrors.push(err623);}errors++;}}else {const err624 = {instancePath:instancePath+"/qa/personas/" + i39,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err624];}else {vErrors.push(err624);}errors++;}}}else {const err625 = {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 = [err625];}else {vErrors.push(err625);}errors++;}var _valid5 = _errs811 === errors;if(_valid5){valid203 = true;passing4 = 0;}const _errs817 = errors;if(data318 && typeof data318 == "object" && !Array.isArray(data318)){if(Object.keys(data318).length < 1){const err626 = {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 = [err626];}else {vErrors.push(err626);}errors++;}for(const key92 in data318){let data320 = data318[key92];const _errs821 = errors;let valid208 = false;let passing5 = null;const _errs822 = errors;if(data320 && typeof data320 == "object" && !Array.isArray(data320)){if(data320.credentialRef === undefined){const err627 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err627];}else {vErrors.push(err627);}errors++;}for(const key93 in data320){if(!(key93 === "credentialRef")){const err628 = {instancePath:instancePath+"/qa/personas/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key93},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err628];}else {vErrors.push(err628);}errors++;}}if(data320.credentialRef !== undefined){let data321 = data320.credentialRef;const _errs827 = errors;const _errs828 = errors;if(typeof data321 === "string"){if(!pattern0.test(data321)){const err629 = {};if(vErrors === null){vErrors = [err629];}else {vErrors.push(err629);}errors++;}}var valid210 = _errs828 === errors;if(valid210){const err630 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err630];}else {vErrors.push(err630);}errors++;}else {errors = _errs827;if(vErrors !== null){if(_errs827){vErrors.length = _errs827;}else {vErrors = null;}}}if(typeof data321 === "string"){if(func2(data321) < 1){const err631 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err631];}else {vErrors.push(err631);}errors++;}}else {const err632 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err632];}else {vErrors.push(err632);}errors++;}}}else {const err633 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err633];}else {vErrors.push(err633);}errors++;}var _valid6 = _errs822 === errors;if(_valid6){valid208 = true;passing5 = 0;}const _errs829 = errors;if(data320 && typeof data320 == "object" && !Array.isArray(data320)){if(data320.signInSkill === undefined){const err634 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err634];}else {vErrors.push(err634);}errors++;}for(const key94 in data320){if(!(key94 === "signInSkill")){const err635 = {instancePath:instancePath+"/qa/personas/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key94},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err635];}else {vErrors.push(err635);}errors++;}}if(data320.signInSkill !== undefined){let data322 = data320.signInSkill;const _errs834 = errors;const _errs835 = errors;if(typeof data322 === "string"){if(!pattern0.test(data322)){const err636 = {};if(vErrors === null){vErrors = [err636];}else {vErrors.push(err636);}errors++;}}var valid212 = _errs835 === errors;if(valid212){const err637 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err637];}else {vErrors.push(err637);}errors++;}else {errors = _errs834;if(vErrors !== null){if(_errs834){vErrors.length = _errs834;}else {vErrors = null;}}}if(typeof data322 === "string"){if(func2(data322) < 1){const err638 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err638];}else {vErrors.push(err638);}errors++;}}else {const err639 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err639];}else {vErrors.push(err639);}errors++;}}}else {const err640 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err640];}else {vErrors.push(err640);}errors++;}var _valid6 = _errs829 === errors;if(_valid6 && valid208){valid208 = false;passing5 = [passing5, 1];}else {if(_valid6){valid208 = true;passing5 = 1;}}if(!valid208){const err641 = {instancePath:instancePath+"/qa/personas/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err641];}else {vErrors.push(err641);}errors++;}else {errors = _errs821;if(vErrors !== null){if(_errs821){vErrors.length = _errs821;}else {vErrors = null;}}}}}else {const err642 = {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 = [err642];}else {vErrors.push(err642);}errors++;}var _valid5 = _errs817 === errors;if(_valid5 && valid203){valid203 = false;passing4 = [passing4, 1];}else {if(_valid5){valid203 = true;passing4 = 1;}}if(!valid203){const err643 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err643];}else {vErrors.push(err643);}errors++;}else {errors = _errs810;if(vErrors !== null){if(_errs810){vErrors.length = _errs810;}else {vErrors = null;}}}}if(data308.gherkinLint !== undefined){let data323 = data308.gherkinLint;if(data323 && typeof data323 == "object" && !Array.isArray(data323)){if(data323.scopes === undefined){const err644 = {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 = [err644];}else {vErrors.push(err644);}errors++;}for(const key95 in data323){if(!(((key95 === "scopes") || (key95 === "exemptionTags")) || (key95 === "stepWaivers"))){const err645 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key95},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err645];}else {vErrors.push(err645);}errors++;}}if(data323.scopes !== undefined){let data324 = data323.scopes;if(data324 && typeof data324 == "object" && !Array.isArray(data324)){if(Object.keys(data324).length < 1){const err646 = {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 = [err646];}else {vErrors.push(err646);}errors++;}for(const key96 in data324){let data325 = data324[key96];if(data325 && typeof data325 == "object" && !Array.isArray(data325)){if(data325.featureRoots === undefined){const err647 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err647];}else {vErrors.push(err647);}errors++;}if(data325.stepRoots === undefined){const err648 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err648];}else {vErrors.push(err648);}errors++;}for(const key97 in data325){if(!((key97 === "featureRoots") || (key97 === "stepRoots"))){const err649 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key97},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err649];}else {vErrors.push(err649);}errors++;}}if(data325.featureRoots !== undefined){let data326 = data325.featureRoots;if(Array.isArray(data326)){if(data326.length < 1){const err650 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err650];}else {vErrors.push(err650);}errors++;}const len38 = data326.length;for(let i40=0; i40<len38; i40++){let data327 = data326[i40];const _errs849 = errors;const _errs850 = errors;if(typeof data327 === "string"){if(!pattern0.test(data327)){const err651 = {};if(vErrors === null){vErrors = [err651];}else {vErrors.push(err651);}errors++;}}var valid218 = _errs850 === errors;if(valid218){const err652 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i40,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err652];}else {vErrors.push(err652);}errors++;}else {errors = _errs849;if(vErrors !== null){if(_errs849){vErrors.length = _errs849;}else {vErrors = null;}}}if(typeof data327 === "string"){if(func2(data327) < 1){const err653 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i40,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 = [err653];}else {vErrors.push(err653);}errors++;}}else {const err654 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i40,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 = [err654];}else {vErrors.push(err654);}errors++;}}}else {const err655 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err655];}else {vErrors.push(err655);}errors++;}}if(data325.stepRoots !== undefined){let data328 = data325.stepRoots;if(Array.isArray(data328)){if(data328.length < 1){const err656 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err656];}else {vErrors.push(err656);}errors++;}const len39 = data328.length;for(let i41=0; i41<len39; i41++){let data329 = data328[i41];const _errs855 = errors;const _errs856 = errors;if(typeof data329 === "string"){if(!pattern0.test(data329)){const err657 = {};if(vErrors === null){vErrors = [err657];}else {vErrors.push(err657);}errors++;}}var valid221 = _errs856 === errors;if(valid221){const err658 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i41,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err658];}else {vErrors.push(err658);}errors++;}else {errors = _errs855;if(vErrors !== null){if(_errs855){vErrors.length = _errs855;}else {vErrors = null;}}}if(typeof data329 === "string"){if(func2(data329) < 1){const err659 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i41,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 = [err659];}else {vErrors.push(err659);}errors++;}}else {const err660 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i41,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 = [err660];}else {vErrors.push(err660);}errors++;}}}else {const err661 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err661];}else {vErrors.push(err661);}errors++;}}}else {const err662 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err662];}else {vErrors.push(err662);}errors++;}}}else {const err663 = {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 = [err663];}else {vErrors.push(err663);}errors++;}}if(data323.exemptionTags !== undefined){let data330 = data323.exemptionTags;if(Array.isArray(data330)){const len40 = data330.length;for(let i42=0; i42<len40; i42++){let data331 = data330[i42];const _errs861 = errors;const _errs862 = errors;if(typeof data331 === "string"){if(!pattern0.test(data331)){const err664 = {};if(vErrors === null){vErrors = [err664];}else {vErrors.push(err664);}errors++;}}var valid224 = _errs862 === errors;if(valid224){const err665 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i42,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err665];}else {vErrors.push(err665);}errors++;}else {errors = _errs861;if(vErrors !== null){if(_errs861){vErrors.length = _errs861;}else {vErrors = null;}}}if(typeof data331 === "string"){if(func2(data331) < 1){const err666 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i42,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 = [err666];}else {vErrors.push(err666);}errors++;}}else {const err667 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i42,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err667];}else {vErrors.push(err667);}errors++;}}}else {const err668 = {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 = [err668];}else {vErrors.push(err668);}errors++;}}if(data323.stepWaivers !== undefined){let data332 = data323.stepWaivers;if(Array.isArray(data332)){const len41 = data332.length;for(let i43=0; i43<len41; i43++){let data333 = data332[i43];if(typeof data333 === "string"){if(func2(data333) < 1){const err669 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i43,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 = [err669];}else {vErrors.push(err669);}errors++;}}else {const err670 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i43,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err670];}else {vErrors.push(err670);}errors++;}}}else {const err671 = {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 = [err671];}else {vErrors.push(err671);}errors++;}}}else {const err672 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err672];}else {vErrors.push(err672);}errors++;}}if(data308.consoleAllowlist !== undefined){let data334 = data308.consoleAllowlist;if(Array.isArray(data334)){const len42 = data334.length;for(let i44=0; i44<len42; i44++){let data335 = data334[i44];const _errs871 = errors;const _errs872 = errors;if(typeof data335 === "string"){if(!pattern0.test(data335)){const err673 = {};if(vErrors === null){vErrors = [err673];}else {vErrors.push(err673);}errors++;}}var valid229 = _errs872 === errors;if(valid229){const err674 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i44,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err674];}else {vErrors.push(err674);}errors++;}else {errors = _errs871;if(vErrors !== null){if(_errs871){vErrors.length = _errs871;}else {vErrors = null;}}}if(typeof data335 === "string"){if(func2(data335) < 1){const err675 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i44,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err675];}else {vErrors.push(err675);}errors++;}}else {const err676 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i44,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err676];}else {vErrors.push(err676);}errors++;}}}else {const err677 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err677];}else {vErrors.push(err677);}errors++;}}if(data308.designTokens !== undefined){let data336 = data308.designTokens;const _errs875 = errors;const _errs876 = errors;if(typeof data336 === "string"){if(!pattern0.test(data336)){const err678 = {};if(vErrors === null){vErrors = [err678];}else {vErrors.push(err678);}errors++;}}var valid230 = _errs876 === errors;if(valid230){const err679 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err679];}else {vErrors.push(err679);}errors++;}else {errors = _errs875;if(vErrors !== null){if(_errs875){vErrors.length = _errs875;}else {vErrors = null;}}}if(typeof data336 === "string"){if(func2(data336) < 1){const err680 = {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 = [err680];}else {vErrors.push(err680);}errors++;}}else {const err681 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/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",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err682];}else {vErrors.push(err682);}errors++;}}}else {const err683 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err683];}else {vErrors.push(err683);}errors++;}validate10.errors = vErrors;return errors === 0;}
|
|
16
|
+
"use strict";export const validate = validate10;export default validate10;const schema11 = {"type":"object","required":["project"],"properties":{"$schema":{"type":"string","description":"Editor pointer at the shipped JSON-Schema mirror. Not read by the runtime."},"project":{"type":"object","description":"Project identity, filesystem roots, planner docs context, and the commands the close-validation chain spawns.","required":["paths"],"properties":{"baseBranch":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"description":"Branch every `story-<id>` branch is seeded from and every Story PR targets.","default":"main"},"paths":{"type":"object","description":"The three required filesystem roots. Every `${dir}Root` the framework needs is derived at runtime as `${agentRoot}/<dir>`, and the audit output dir as `${tempRoot}/audits`.","required":["agentRoot","docsRoot","tempRoot"],"properties":{"agentRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the materialized framework tree (`mandrel sync` writes here).","default":".agents"},"docsRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative root of the project documentation the planner reads for context.","default":"docs"},"tempRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative gitignored scratch root. Every temporary artifact — gate transcripts, audit reports, plan authoring dirs — lands under it.","default":"temp"}},"additionalProperties":false},"docsContextFiles":{"type":"array","items":{"type":"string"},"description":"Files under `paths.docsRoot` the planner treats as standing context. Read digest-first — the docs digest names the file and the line range, and only the named section is pulled.","default":["architecture.md","data-dictionary.md","decisions.md","patterns.md"]},"commands":{"type":"object","description":"Shell commands the close-validation chain spawns. Each is run from the repo root.","properties":{"test":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Full test-suite command run by the close-validation chain.","default":"npm test"},"typecheck":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Static type-check command. `null` disables the gate for projects with no type layer; the empty string is rejected so a typo cannot silently disable it.","default":null},"lint":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Lint command run as a close-validation gate. `null` (the default) uses `npm run lint`; the gate is mandatory, so unlike `typecheck` this key cannot disable it. Point it at the scoped command your hooks already run to stop paying for a third whole-repo lint at close — the gate still lints the diff, and CI still owns whole-repo drift. Like every command here it must be a single argv (no `;`, `&&`, pipes or substitution), so wrap a multi-linter pair in one npm script and name that.","default":null},"formatCheck":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Non-mutating format verification run as a close-validation gate.","default":"npx biome format ."},"formatWrite":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Mutating format command the close-time format-autofix step spawns.","default":"npx biome format --write ."}},"additionalProperties":false}},"additionalProperties":false},"github":{"type":"object","description":"GitHub provider identity plus the remote stance the bootstrap enforces. `owner`, `repo`, and `operatorHandle` are operator identity — the shipped values are placeholders, not usable defaults.","required":["owner","repo","operatorHandle"],"properties":{"owner":{"type":"string","minLength":1,"description":"GitHub owner (user or org) that hosts the repository.","default":"[OWNER]"},"repo":{"type":"string","minLength":1,"description":"Repository name under `owner`.","default":"[REPO]"},"projectNumber":{"type":["integer","null"],"minimum":1,"description":"Projects V2 board number the orchestrator syncs Story status onto. `null` disables board sync.","default":null},"projectOwner":{"type":["string","null"],"minLength":1,"description":"Owner of the Projects V2 board when it lives outside `owner` (an org board fed by a user repo). `null` means the board shares `owner`.","default":null},"operatorHandle":{"type":"string","pattern":"^@.+","description":"The human the framework escalates to, `@`-prefixed. Used for HITL @-mentions on `agent::blocked`.","default":"@[USERNAME]"},"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},"followUpRepos":{"type":"object","description":"Repository slugs for the non-consumer follow-up ownership buckets, used when a CI gap, retro proposal, or audit finding belongs to someone other than the repo that surfaced it.","properties":{"framework":{"type":"string","pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` that owns framework-level defects. Defaults to the Mandrel mirror — the one bucket with a knowable default.","default":"dsj1984/mandrel"},"platform":{"type":["string","null"],"pattern":"^[^/\\s]+/[^/\\s]+$","description":"`<owner>/<repo>` for a shared platform or infrastructure tracker (a shared base config, a runner fleet, a cross-repo toolchain). No default — nothing can guess a shared repo. Left unset, platform-owned findings file locally and say so.","default":null}},"additionalProperties":false},"branchProtection":{"type":"object","description":"Branch-protection stance applied to `project.baseBranch` by the GitHub bootstrap, and reproduced locally before every push.","properties":{"enforce":{"type":"boolean","description":"When true, the GitHub bootstrap writes the required-check ruleset. False leaves the remote stance alone.","default":true},"requiredChecks":{"type":"array","items":{"type":"object","description":"One required status check: the context name GitHub gates the merge on, plus the argv the framework runs locally to reproduce it.","required":["name","cmd"],"properties":{"name":{"type":"string","minLength":1,"description":"Required status-check context name as GitHub reports it."},"cmd":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"argv array (never a shell string) the local pre-push validation runs to reproduce the check."}},"additionalProperties":false},"description":"Checks that must pass before a Story PR merges. Each entry carries both the remote context name and the local argv.","default":[{"name":"lint","cmd":["npm","run","lint"]},{"name":"test","cmd":["npm","test"]},{"name":"baselines","cmd":["node",".agents/scripts/check-baselines.js"]}]}},"additionalProperties":false},"mergeMethods":{"type":"object","description":"Repository merge-method stance the GitHub bootstrap enforces. The framework ships squash-only with auto-merge on, which is what the one-PR-per-Story model needs for release-please to parse each landed subject.","properties":{"allow_squash_merge":{"type":"boolean","default":true},"allow_rebase_merge":{"type":"boolean","default":false},"allow_merge_commit":{"type":"boolean","default":false},"allow_auto_merge":{"type":"boolean","default":true},"delete_branch_on_merge":{"type":"boolean","default":true}},"additionalProperties":false},"notifications":{"type":"object","description":"Allowlist-gated notification channels. An event fires on a channel only when it is named in that channel's array.","properties":{"mentionOperator":{"type":"boolean","description":"When true, `github.operatorHandle` is @-mentioned in the comments the notifier posts.","default":false},"commentEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message"]},"uniqueItems":true,"description":"Events mirrored onto the Story issue as a comment. Deliberately narrower than `webhookEvents`: only Story-scoped events whose message reads as narrative an operator wants durably on the ticket belong here.","default":["state-transition","story-merged","operator-message"]},"webhookEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]},"uniqueItems":true,"description":"Events dispatched to the configured webhook. The vocabulary is the allowlist the webhook channel gates on; `merge.unlanded` and `merge.flip-failed` are allowlistable but reach the run ledger rather than `notify()` today.","default":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]}},"additionalProperties":false}},"additionalProperties":false},"planning":{"type":"object","description":"Inputs to `/mandrel-plan`: the memory-hygiene advisory ceiling and the opt-in navigability reachability gate.","properties":{"memoryPool":{"type":"object","description":"Threshold for the memory-hygiene advisory `/mandrel-plan` surfaces at Gate #1. Advisory only: it recommends `/memory-consolidate` and never gates, reroutes, or mutates the memory pool.","properties":{"indexByteCeiling":{"type":"integer","minimum":1,"description":"Recommend a consolidation pass once the pool's `MEMORY.md` index exceeds this many bytes. The harness truncates the index it loads into each session at its own byte cap, so an oversized index is a loss already happening — every entry listed after the cut is invisible — rather than a hygiene forecast. Default 24576, the harness cap itself.","default":24576}},"additionalProperties":false},"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, 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},"requireCreditedCapture":{"type":"boolean","description":"Refuse a full-suite coverage capture that no committed stamp covers, instead of paying for it. Default false — the run is announced (a warning naming the crediting invocation, emitted before the spawn) and then executed, which is the pre-existing behaviour. Set true when the whole-suite cost is large enough that a close should stop at zero seconds rather than absorb it silently.","default":false}},"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"]}}]},"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":"Default git ref the changed-file set is computed against, for a caller that passes no `--ref`. A `--ref` the caller named wins over this value, so a caller that anchors another gate on the same ref — `.husky/pre-push`, which passes `--ref origin/main` and then previews `--changed-since origin/main` — resolves ONE scope for both steps (Story #5365). Omitted and unpassed, the gate’s own default `main` applies."}},"additionalProperties":false}},"additionalProperties":false},"maintainability":{"type":"object","description":"Maintainability-index ratchet. Scores per file as the average over its methods, so deleting a small high-MI method can legitimately lower a file’s score.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/maintainability.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.5}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"min":70}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the maintainability gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/` plus `tests/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":[]},"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},"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},"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 (0 = scored once, no redraft), then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the scoring pass is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":0,"description":"Maximum number of redraft rounds before escalation. Default 2; 0 means the verdict is scored once with no redraft round (Story #5313 dropped the hard ceiling and the floor-of-one clamp).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-in toggle for the close-time retro auto-file graduator, plus the friction recurrence window. Auto-filing defaults to OFF (Story #5341).","properties":{"retroProposals":{"type":"boolean","description":"When true, the retro auto-files its actionable routed proposals as meta::<framework-gap|consumer-improvement> + friction::<category> issues via the graduator pre-parsed-findings seam, and the rendered retro sections list the filed issue numbers instead of paste-ready gh command stanzas. Defaults to false (Story #5341), which renders the command stanzas instead.","default":false},"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":[]},"rerunAdvisory":{"type":"integer","minimum":0,"description":"Story #5266. How many times close may re-run a failed advisory workflow run before blocking on it, per close invocation. Default 0: close spends no CI minutes and issues no GitHub mutation on an advisory red unless asked. At n > 0 the failed run(s) are re-run within that allowance and the merge wait re-polls inside its existing budget, landing or blocking on the re-run verdict. Overridden per invocation by --rerun-advisory <n>.","default":0}},"additionalProperties":false},"routing":{"type":"object","description":"v2 delivery-spawn routing: role-scoped boot contexts and the ceremony profile. The v1 singleDelivery epic-route kill-switch was removed in Stage 6; the freshCriticSampleRate sampling floor was retired in Story #5313 and the derived-level ceremony routing in Story #5343.","properties":{"roleScopedAgents":{"type":"boolean","description":"Epic #4478 (M7-B). Kill-switch for the role-scoped boot contexts. When true (default), a converted delivery spawn (`story-worker`, `acceptance-critic`) boots on its own `.claude/agents/<role>.md` system prompt instead of re-paying the full CLAUDE.md @-import closure. When false, every converted spawn falls back to `subagent_type: general-purpose` — the instant, code-rollback-free per-consumer revert, and the universal escape for hosts that ignore `.claude/agents/`. The fallback is the full-closure agent that ran before M7-B, so flipping it off never drops a gate.","default":true},"ceremonyProfile":{"type":"string","enum":["minimal","standard","strict"],"description":"Acceptance-ceremony depth — who authors the Story acceptance verdict. minimal and standard (default) = the inline self-eval, whatever the diff touches; strict = a fresh-context maker-blind critic. Review depth is a separate decision and still derives `deep` for any sensitive path (review-depth.js).","default":"standard"},"closeAndLand":{"type":"boolean","description":"When true (default), single-story-close lands through merge in one close. Opt out per-run with --no-wait-merge.","default":true}},"additionalProperties":false}},"additionalProperties":false},"qa":{"type":"object","description":"Agent-driven QA harness contract (Epic #3214; environment-keyed by Epic #4326). Optional top-level block. All filesystem-pointer fields (featureRoot, fixturesManifest, designTokens) carry safeString guards rejecting shell-injection metacharacters. environments is a map of named deployment targets (each with a baseUrl, a per-environment url-template/skill sign-in seam, and an optional allowWrites gate); personas resolve to a stored credential reference or a sign-in skill, never an inline secret.","properties":{"featureRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Directory holding the Gherkin feature files the QA sweep drives.","default":"tests/features"},"fixturesManifest":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the persona/fixture manifest the harness seeds from.","default":"tests/fixtures/personas.json"},"environments":{"type":"object","description":"Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.","default":{"local":{"baseUrl":"http://localhost:3000","signInSeam":{"urlTemplate":"/dev/sign-in-as/{persona}"}},"staging":{"baseUrl":"https://staging.example.test","allowWrites":false}},"minProperties":1,"additionalProperties":{"type":"object","properties":{"baseUrl":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"signInSeam":{"oneOf":[{"type":"object","properties":{"urlTemplate":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["urlTemplate"],"additionalProperties":false},{"type":"object","properties":{"skill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"pattern":"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$","description":"Tier-relative skill id, e.g. `stack/qa/acme-sso`: lowercase segments of letters, digits, `.`, `_` or `-`, at least two of them, separated by `/`. A traversal (`../..`), an absolute path, a backslash or an uppercase segment is rejected here rather than normalized."}},"required":["skill"],"additionalProperties":false}]},"allowWrites":{"type":"boolean"}},"required":["baseUrl"],"additionalProperties":false}},"personas":{"description":"Personas the QA-harness sign-in seam accepts. Two accepted shapes: (1) a plain array of persona names — the honest shape for a `urlTemplate` dev-impersonation seam, where the persona name is the sole input the workflow consumes; (2) the object-map form keyed by persona name, where each entry carries per-persona auth material (`credentialRef` or `signInSkill`) consulted only under a skill-based or credential-based seam.","default":{"admin":{"credentialRef":"QA_ADMIN_CREDENTIAL"},"member":{"credentialRef":"QA_MEMBER_CREDENTIAL"}},"oneOf":[{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},{"type":"object","minProperties":1,"additionalProperties":{"oneOf":[{"type":"object","properties":{"credentialRef":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["credentialRef"],"additionalProperties":false},{"type":"object","properties":{"signInSkill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["signInSkill"],"additionalProperties":false}]}}]},"gherkinLint":{"type":"object","description":"Static Gherkin corpus gate (Story #5013). Optional; the gate runs only when this block is present, so an upgrade never reddens the lint of a consumer that never asked the framework to police its `.feature` files. Inside the opt-in it fails closed: an unresolvable `@cucumber/gherkin` parser, or a scope resolving zero step definitions, exits 1 rather than reporting a clean run.","default":{"scopes":{"web":{"featureRoots":["apps/web/tests/features"],"stepRoots":["apps/web/tests/steps"]}},"exemptionTags":["@skip"],"stepWaivers":[]},"properties":{"scopes":{"type":"object","description":"Binding scopes, keyed by name. Each scope resolves its own features against its own step definitions only — pooling every step root into one matcher list is what makes a cross-app false bind possible, where a step defined solely in app B silently vouches for app A. The scope name appears verbatim in every unbound finding.","minProperties":1,"additionalProperties":{"type":"object","properties":{"featureRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the `.feature` files of this scope, walked recursively."},"stepRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the step definitions of this scope, walked recursively. Resolving zero definitions here is a fail-closed error, not a clean run."}},"required":["featureRoots","stepRoots"],"additionalProperties":false}},"exemptionTags":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Tags marking a scenario as intentionally non-binding, so must-bind skips it. Never an escape from must-compile: a parse error in the file still fails the run. Default: [\"@skip\"].","default":["@skip"]},"stepWaivers":{"type":"array","items":{"type":"string","minLength":1},"description":"Exact step texts must-bind never reports as unbound. The step index is a source scan and therefore heuristic while the parser is exact, so a false unbound must always have an escape that does not require switching the gate off. Default: [].","default":[]}},"required":["scopes"],"additionalProperties":false},"consoleAllowlist":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Console-message substrings the QA run tolerates instead of reporting as a finding (framework dev-mode chatter).","default":["Download the React DevTools","[HMR]"]},"designTokens":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the design-token SSOT the UX/UI lens checks rendered styles against.","default":"src/styles/tokens.css"}},"additionalProperties":false}},"additionalProperties":false};const pattern0 = new RegExp("([;&|`]|\\$\\()", "u");const pattern9 = new RegExp("^@.+", "u");const pattern10 = new RegExp("^[^/\\s]+/[^/\\s]+$", "u");const pattern31 = new RegExp("^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$", "u");const func2 = require("ajv/dist/runtime/ucs2length").default;const func10 = Object.prototype.hasOwnProperty;function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(data && typeof data == "object" && !Array.isArray(data)){if(data.project === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "project"},message:"must have required property '"+"project"+"'"};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}for(const key0 in data){if(!((((((key0 === "$schema") || (key0 === "project")) || (key0 === "github")) || (key0 === "planning")) || (key0 === "delivery")) || (key0 === "qa"))){const err1 = {instancePath,schemaPath:"#/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key0},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.$schema !== undefined){if(typeof data.$schema !== "string"){const err2 = {instancePath:instancePath+"/$schema",schemaPath:"#/properties/%24schema/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}if(data.project !== undefined){let data1 = data.project;if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.paths === undefined){const err3 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/required",keyword:"required",params:{missingProperty: "paths"},message:"must have required property '"+"paths"+"'"};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}for(const key1 in data1){if(!((((key1 === "baseBranch") || (key1 === "paths")) || (key1 === "docsContextFiles")) || (key1 === "commands"))){const err4 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key1},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data1.baseBranch !== undefined){let data2 = data1.baseBranch;if(typeof data2 !== "string"){const err5 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const _errs9 = errors;const _errs10 = errors;if(typeof data2 === "string"){if(!pattern0.test(data2)){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}var valid2 = _errs10 === errors;if(valid2){const err7 = {instancePath:instancePath+"/project/baseBranch",schemaPath:"#/properties/project/properties/baseBranch/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}else {errors = _errs9;if(vErrors !== null){if(_errs9){vErrors.length = _errs9;}else {vErrors = null;}}}}if(data1.paths !== undefined){let data3 = data1.paths;if(data3 && typeof data3 == "object" && !Array.isArray(data3)){if(data3.agentRoot === undefined){const err8 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "agentRoot"},message:"must have required property '"+"agentRoot"+"'"};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data3.docsRoot === undefined){const err9 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "docsRoot"},message:"must have required property '"+"docsRoot"+"'"};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data3.tempRoot === undefined){const err10 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/required",keyword:"required",params:{missingProperty: "tempRoot"},message:"must have required property '"+"tempRoot"+"'"};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key2 in data3){if(!(((key2 === "agentRoot") || (key2 === "docsRoot")) || (key2 === "tempRoot"))){const err11 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key2},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data3.agentRoot !== undefined){let data4 = data3.agentRoot;const _errs16 = errors;const _errs17 = errors;if(typeof data4 === "string"){if(!pattern0.test(data4)){const err12 = {};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}var valid4 = _errs17 === errors;if(valid4){const err13 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}else {errors = _errs16;if(vErrors !== null){if(_errs16){vErrors.length = _errs16;}else {vErrors = null;}}}if(typeof data4 === "string"){if(func2(data4) < 1){const err14 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/project/paths/agentRoot",schemaPath:"#/properties/project/properties/paths/properties/agentRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data3.docsRoot !== undefined){let data5 = data3.docsRoot;const _errs20 = errors;const _errs21 = errors;if(typeof data5 === "string"){if(!pattern0.test(data5)){const err16 = {};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}var valid5 = _errs21 === errors;if(valid5){const err17 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}else {errors = _errs20;if(vErrors !== null){if(_errs20){vErrors.length = _errs20;}else {vErrors = null;}}}if(typeof data5 === "string"){if(func2(data5) < 1){const err18 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}else {const err19 = {instancePath:instancePath+"/project/paths/docsRoot",schemaPath:"#/properties/project/properties/paths/properties/docsRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data3.tempRoot !== undefined){let data6 = data3.tempRoot;const _errs24 = errors;const _errs25 = errors;if(typeof data6 === "string"){if(!pattern0.test(data6)){const err20 = {};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}var valid6 = _errs25 === errors;if(valid6){const err21 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}else {errors = _errs24;if(vErrors !== null){if(_errs24){vErrors.length = _errs24;}else {vErrors = null;}}}if(typeof data6 === "string"){if(func2(data6) < 1){const err22 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+"/project/paths/tempRoot",schemaPath:"#/properties/project/properties/paths/properties/tempRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}else {const err24 = {instancePath:instancePath+"/project/paths",schemaPath:"#/properties/project/properties/paths/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data1.docsContextFiles !== undefined){let data7 = data1.docsContextFiles;if(Array.isArray(data7)){const len0 = data7.length;for(let i0=0; i0<len0; i0++){if(typeof data7[i0] !== "string"){const err25 = {instancePath:instancePath+"/project/docsContextFiles/" + i0,schemaPath:"#/properties/project/properties/docsContextFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}else {const err26 = {instancePath:instancePath+"/project/docsContextFiles",schemaPath:"#/properties/project/properties/docsContextFiles/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data1.commands !== undefined){let data9 = data1.commands;if(data9 && typeof data9 == "object" && !Array.isArray(data9)){for(const key3 in data9){if(!(((((key3 === "test") || (key3 === "typecheck")) || (key3 === "lint")) || (key3 === "formatCheck")) || (key3 === "formatWrite"))){const err27 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key3},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data9.test !== undefined){let data10 = data9.test;const _errs35 = errors;const _errs36 = errors;if(typeof data10 === "string"){if(!pattern0.test(data10)){const err28 = {};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}var valid10 = _errs36 === errors;if(valid10){const err29 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}else {errors = _errs35;if(vErrors !== null){if(_errs35){vErrors.length = _errs35;}else {vErrors = null;}}}if(typeof data10 === "string"){if(func2(data10) < 1){const err30 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {instancePath:instancePath+"/project/commands/test",schemaPath:"#/properties/project/properties/commands/properties/test/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}if(data9.typecheck !== undefined){let data11 = data9.typecheck;if((typeof data11 !== "string") && (data11 !== null)){const err32 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.typecheck.type},message:"must be string,null"};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}const _errs39 = errors;const _errs40 = errors;if(errors === _errs40){if(typeof data11 === "string"){if(!pattern0.test(data11)){const err33 = {};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}else {const err34 = {};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}var valid11 = _errs40 === errors;if(valid11){const err35 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}if(typeof data11 === "string"){if(func2(data11) < 1){const err36 = {instancePath:instancePath+"/project/commands/typecheck",schemaPath:"#/properties/project/properties/commands/properties/typecheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}}if(data9.lint !== undefined){let data12 = data9.lint;if((typeof data12 !== "string") && (data12 !== null)){const err37 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/type",keyword:"type",params:{type: schema11.properties.project.properties.commands.properties.lint.type},message:"must be string,null"};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}const _errs44 = errors;const _errs45 = errors;if(errors === _errs45){if(typeof data12 === "string"){if(!pattern0.test(data12)){const err38 = {};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}else {const err39 = {};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}var valid12 = _errs45 === errors;if(valid12){const err40 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}else {errors = _errs44;if(vErrors !== null){if(_errs44){vErrors.length = _errs44;}else {vErrors = null;}}}if(typeof data12 === "string"){if(func2(data12) < 1){const err41 = {instancePath:instancePath+"/project/commands/lint",schemaPath:"#/properties/project/properties/commands/properties/lint/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}}if(data9.formatCheck !== undefined){let data13 = data9.formatCheck;const _errs49 = errors;const _errs50 = errors;if(typeof data13 === "string"){if(!pattern0.test(data13)){const err42 = {};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}var valid13 = _errs50 === errors;if(valid13){const err43 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}else {errors = _errs49;if(vErrors !== null){if(_errs49){vErrors.length = _errs49;}else {vErrors = null;}}}if(typeof data13 === "string"){if(func2(data13) < 1){const err44 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+"/project/commands/formatCheck",schemaPath:"#/properties/project/properties/commands/properties/formatCheck/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data9.formatWrite !== undefined){let data14 = data9.formatWrite;const _errs53 = errors;const _errs54 = errors;if(typeof data14 === "string"){if(!pattern0.test(data14)){const err46 = {};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}}var valid14 = _errs54 === errors;if(valid14){const err47 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}else {errors = _errs53;if(vErrors !== null){if(_errs53){vErrors.length = _errs53;}else {vErrors = null;}}}if(typeof data14 === "string"){if(func2(data14) < 1){const err48 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}else {const err49 = {instancePath:instancePath+"/project/commands/formatWrite",schemaPath:"#/properties/project/properties/commands/properties/formatWrite/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}}else {const err50 = {instancePath:instancePath+"/project/commands",schemaPath:"#/properties/project/properties/commands/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}}else {const err51 = {instancePath:instancePath+"/project",schemaPath:"#/properties/project/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}}if(data.github !== undefined){let data15 = data.github;if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.owner === undefined){const err52 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "owner"},message:"must have required property '"+"owner"+"'"};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}if(data15.repo === undefined){const err53 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "repo"},message:"must have required property '"+"repo"+"'"};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}if(data15.operatorHandle === undefined){const err54 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/required",keyword:"required",params:{missingProperty: "operatorHandle"},message:"must have required property '"+"operatorHandle"+"'"};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}for(const key4 in data15){if(!(func10.call(schema11.properties.github.properties, key4))){const err55 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key4},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}if(data15.owner !== undefined){let data16 = data15.owner;if(typeof data16 === "string"){if(func2(data16) < 1){const err56 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}}else {const err57 = {instancePath:instancePath+"/github/owner",schemaPath:"#/properties/github/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}}if(data15.repo !== undefined){let data17 = data15.repo;if(typeof data17 === "string"){if(func2(data17) < 1){const err58 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}}else {const err59 = {instancePath:instancePath+"/github/repo",schemaPath:"#/properties/github/properties/repo/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}if(data15.projectNumber !== undefined){let data18 = data15.projectNumber;if((!(((typeof data18 == "number") && (!(data18 % 1) && !isNaN(data18))) && (isFinite(data18)))) && (data18 !== null)){const err60 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/type",keyword:"type",params:{type: schema11.properties.github.properties.projectNumber.type},message:"must be integer,null"};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}if((typeof data18 == "number") && (isFinite(data18))){if(data18 < 1 || isNaN(data18)){const err61 = {instancePath:instancePath+"/github/projectNumber",schemaPath:"#/properties/github/properties/projectNumber/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}}}if(data15.projectOwner !== undefined){let data19 = data15.projectOwner;if((typeof data19 !== "string") && (data19 !== null)){const err62 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/type",keyword:"type",params:{type: schema11.properties.github.properties.projectOwner.type},message:"must be string,null"};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}if(typeof data19 === "string"){if(func2(data19) < 1){const err63 = {instancePath:instancePath+"/github/projectOwner",schemaPath:"#/properties/github/properties/projectOwner/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}}if(data15.operatorHandle !== undefined){let data20 = data15.operatorHandle;if(typeof data20 === "string"){if(!pattern9.test(data20)){const err64 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/pattern",keyword:"pattern",params:{pattern: "^@.+"},message:"must match pattern \""+"^@.+"+"\""};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}}else {const err65 = {instancePath:instancePath+"/github/operatorHandle",schemaPath:"#/properties/github/properties/operatorHandle/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}}if(data15.defaultTimeoutMs !== undefined){let data21 = data15.defaultTimeoutMs;if(!(((typeof data21 == "number") && (!(data21 % 1) && !isNaN(data21))) && (isFinite(data21)))){const err66 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}if((typeof data21 == "number") && (isFinite(data21))){if(data21 < 1000 || isNaN(data21)){const err67 = {instancePath:instancePath+"/github/defaultTimeoutMs",schemaPath:"#/properties/github/properties/defaultTimeoutMs/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1000},message:"must be >= 1000"};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}}if(data15.followUpRepos !== undefined){let data22 = data15.followUpRepos;if(data22 && typeof data22 == "object" && !Array.isArray(data22)){for(const key5 in data22){if(!((key5 === "framework") || (key5 === "platform"))){const err68 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}if(data22.framework !== undefined){let data23 = data22.framework;if(typeof data23 === "string"){if(!pattern10.test(data23)){const err69 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}}else {const err70 = {instancePath:instancePath+"/github/followUpRepos/framework",schemaPath:"#/properties/github/properties/followUpRepos/properties/framework/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err70];}else {vErrors.push(err70);}errors++;}}if(data22.platform !== undefined){let data24 = data22.platform;if((typeof data24 !== "string") && (data24 !== null)){const err71 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/type",keyword:"type",params:{type: schema11.properties.github.properties.followUpRepos.properties.platform.type},message:"must be string,null"};if(vErrors === null){vErrors = [err71];}else {vErrors.push(err71);}errors++;}if(typeof data24 === "string"){if(!pattern10.test(data24)){const err72 = {instancePath:instancePath+"/github/followUpRepos/platform",schemaPath:"#/properties/github/properties/followUpRepos/properties/platform/pattern",keyword:"pattern",params:{pattern: "^[^/\\s]+/[^/\\s]+$"},message:"must match pattern \""+"^[^/\\s]+/[^/\\s]+$"+"\""};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}}}}else {const err73 = {instancePath:instancePath+"/github/followUpRepos",schemaPath:"#/properties/github/properties/followUpRepos/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err73];}else {vErrors.push(err73);}errors++;}}if(data15.branchProtection !== undefined){let data25 = data15.branchProtection;if(data25 && typeof data25 == "object" && !Array.isArray(data25)){for(const key6 in data25){if(!((key6 === "enforce") || (key6 === "requiredChecks"))){const err74 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err74];}else {vErrors.push(err74);}errors++;}}if(data25.enforce !== undefined){if(typeof data25.enforce !== "boolean"){const err75 = {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 = [err75];}else {vErrors.push(err75);}errors++;}}if(data25.requiredChecks !== undefined){let data27 = data25.requiredChecks;if(Array.isArray(data27)){const len1 = data27.length;for(let i1=0; i1<len1; i1++){let data28 = data27[i1];if(data28 && typeof data28 == "object" && !Array.isArray(data28)){if(data28.name === undefined){const err76 = {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 = [err76];}else {vErrors.push(err76);}errors++;}if(data28.cmd === undefined){const err77 = {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 = [err77];}else {vErrors.push(err77);}errors++;}for(const key7 in data28){if(!((key7 === "name") || (key7 === "cmd"))){const err78 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err78];}else {vErrors.push(err78);}errors++;}}if(data28.name !== undefined){let data29 = data28.name;if(typeof data29 === "string"){if(func2(data29) < 1){const err79 = {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 = [err79];}else {vErrors.push(err79);}errors++;}}else {const err80 = {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 = [err80];}else {vErrors.push(err80);}errors++;}}if(data28.cmd !== undefined){let data30 = data28.cmd;if(Array.isArray(data30)){if(data30.length < 1){const err81 = {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 = [err81];}else {vErrors.push(err81);}errors++;}const len2 = data30.length;for(let i2=0; i2<len2; i2++){let data31 = data30[i2];if(typeof data31 === "string"){if(func2(data31) < 1){const err82 = {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 = [err82];}else {vErrors.push(err82);}errors++;}}else {const err83 = {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 = [err83];}else {vErrors.push(err83);}errors++;}}}else {const err84 = {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 = [err84];}else {vErrors.push(err84);}errors++;}}}else {const err85 = {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 = [err85];}else {vErrors.push(err85);}errors++;}}}else {const err86 = {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 = [err86];}else {vErrors.push(err86);}errors++;}}}else {const err87 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err87];}else {vErrors.push(err87);}errors++;}}if(data15.mergeMethods !== undefined){let data32 = data15.mergeMethods;if(data32 && typeof data32 == "object" && !Array.isArray(data32)){for(const key8 in data32){if(!(((((key8 === "allow_squash_merge") || (key8 === "allow_rebase_merge")) || (key8 === "allow_merge_commit")) || (key8 === "allow_auto_merge")) || (key8 === "delete_branch_on_merge"))){const err88 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}}if(data32.allow_squash_merge !== undefined){if(typeof data32.allow_squash_merge !== "boolean"){const err89 = {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 = [err89];}else {vErrors.push(err89);}errors++;}}if(data32.allow_rebase_merge !== undefined){if(typeof data32.allow_rebase_merge !== "boolean"){const err90 = {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 = [err90];}else {vErrors.push(err90);}errors++;}}if(data32.allow_merge_commit !== undefined){if(typeof data32.allow_merge_commit !== "boolean"){const err91 = {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 = [err91];}else {vErrors.push(err91);}errors++;}}if(data32.allow_auto_merge !== undefined){if(typeof data32.allow_auto_merge !== "boolean"){const err92 = {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 = [err92];}else {vErrors.push(err92);}errors++;}}if(data32.delete_branch_on_merge !== undefined){if(typeof data32.delete_branch_on_merge !== "boolean"){const err93 = {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 = [err93];}else {vErrors.push(err93);}errors++;}}}else {const err94 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err94];}else {vErrors.push(err94);}errors++;}}if(data15.notifications !== undefined){let data38 = data15.notifications;if(data38 && typeof data38 == "object" && !Array.isArray(data38)){for(const key9 in data38){if(!(((key9 === "mentionOperator") || (key9 === "commentEvents")) || (key9 === "webhookEvents"))){const err95 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err95];}else {vErrors.push(err95);}errors++;}}if(data38.mentionOperator !== undefined){if(typeof data38.mentionOperator !== "boolean"){const err96 = {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 = [err96];}else {vErrors.push(err96);}errors++;}}if(data38.commentEvents !== undefined){let data40 = data38.commentEvents;if(Array.isArray(data40)){const len3 = data40.length;for(let i3=0; i3<len3; i3++){let data41 = data40[i3];if(typeof data41 !== "string"){const err97 = {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 = [err97];}else {vErrors.push(err97);}errors++;}if(!((((data41 === "state-transition") || (data41 === "story-merged")) || (data41 === "story-closing")) || (data41 === "operator-message"))){const err98 = {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 = [err98];}else {vErrors.push(err98);}errors++;}}let i4 = data40.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data40[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err99 = {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 = [err99];}else {vErrors.push(err99);}errors++;break;}indices0[item0] = i4;}}}else {const err100 = {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 = [err100];}else {vErrors.push(err100);}errors++;}}if(data38.webhookEvents !== undefined){let data42 = data38.webhookEvents;if(Array.isArray(data42)){const len4 = data42.length;for(let i5=0; i5<len4; i5++){let data43 = data42[i5];if(typeof data43 !== "string"){const err101 = {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 = [err101];}else {vErrors.push(err101);}errors++;}if(!((((((data43 === "state-transition") || (data43 === "story-merged")) || (data43 === "story-closing")) || (data43 === "operator-message")) || (data43 === "merge.unlanded")) || (data43 === "merge.flip-failed"))){const err102 = {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 = [err102];}else {vErrors.push(err102);}errors++;}}let i6 = data42.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data42[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err103 = {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 = [err103];}else {vErrors.push(err103);}errors++;break;}indices1[item1] = i6;}}}else {const err104 = {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 = [err104];}else {vErrors.push(err104);}errors++;}}}else {const err105 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}}}else {const err106 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data.planning !== undefined){let data44 = data.planning;if(data44 && typeof data44 == "object" && !Array.isArray(data44)){for(const key10 in data44){if(!((key10 === "memoryPool") || (key10 === "navigation"))){const err107 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}if(data44.memoryPool !== undefined){let data45 = data44.memoryPool;if(data45 && typeof data45 == "object" && !Array.isArray(data45)){for(const key11 in data45){if(!(key11 === "indexByteCeiling")){const err108 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}}if(data45.indexByteCeiling !== undefined){let data46 = data45.indexByteCeiling;if(!(((typeof data46 == "number") && (!(data46 % 1) && !isNaN(data46))) && (isFinite(data46)))){const err109 = {instancePath:instancePath+"/planning/memoryPool/indexByteCeiling",schemaPath:"#/properties/planning/properties/memoryPool/properties/indexByteCeiling/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}if((typeof data46 == "number") && (isFinite(data46))){if(data46 < 1 || isNaN(data46)){const err110 = {instancePath:instancePath+"/planning/memoryPool/indexByteCeiling",schemaPath:"#/properties/planning/properties/memoryPool/properties/indexByteCeiling/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}}}}else {const err111 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}if(data44.navigation !== undefined){let data47 = data44.navigation;if(data47 && typeof data47 == "object" && !Array.isArray(data47)){for(const key12 in data47){if(!((key12 === "routeGlobs") || (key12 === "navRegistry"))){const err112 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data47.routeGlobs !== undefined){let data48 = data47.routeGlobs;if(Array.isArray(data48)){const len5 = data48.length;for(let i7=0; i7<len5; i7++){if(typeof data48[i7] !== "string"){const err113 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i7,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}}}else {const err114 = {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 = [err114];}else {vErrors.push(err114);}errors++;}}if(data47.navRegistry !== undefined){let data50 = data47.navRegistry;if(Array.isArray(data50)){const len6 = data50.length;for(let i8=0; i8<len6; i8++){if(typeof data50[i8] !== "string"){const err115 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i8,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}}else {const err116 = {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 = [err116];}else {vErrors.push(err116);}errors++;}}}else {const err117 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}}}else {const err118 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}if(data.delivery !== undefined){let data52 = data.delivery;if(data52 && typeof data52 == "object" && !Array.isArray(data52)){for(const key13 in data52){if(!(func10.call(schema11.properties.delivery.properties, key13))){const err119 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}}if(data52.execution !== undefined){let data53 = data52.execution;if(data53 && typeof data53 == "object" && !Array.isArray(data53)){for(const key14 in data53){if(!(((key14 === "timeoutMs") || (key14 === "fullSuiteLock")) || (key14 === "requireCreditedCapture"))){const err120 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}}if(data53.timeoutMs !== undefined){let data54 = data53.timeoutMs;if(!(((typeof data54 == "number") && (!(data54 % 1) && !isNaN(data54))) && (isFinite(data54)))){const err121 = {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 = [err121];}else {vErrors.push(err121);}errors++;}if((typeof data54 == "number") && (isFinite(data54))){if(data54 < 1 || isNaN(data54)){const err122 = {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 = [err122];}else {vErrors.push(err122);}errors++;}}}if(data53.fullSuiteLock !== undefined){if(typeof data53.fullSuiteLock !== "boolean"){const err123 = {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 = [err123];}else {vErrors.push(err123);}errors++;}}if(data53.requireCreditedCapture !== undefined){if(typeof data53.requireCreditedCapture !== "boolean"){const err124 = {instancePath:instancePath+"/delivery/execution/requireCreditedCapture",schemaPath:"#/properties/delivery/properties/execution/properties/requireCreditedCapture/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}}}else {const err125 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}}if(data52.docsFreshness !== undefined){let data57 = data52.docsFreshness;if(data57 && typeof data57 == "object" && !Array.isArray(data57)){for(const key15 in data57){if(!(key15 === "paths")){const err126 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}if(data57.paths !== undefined){let data58 = data57.paths;if(Array.isArray(data58)){const len7 = data58.length;for(let i9=0; i9<len7; i9++){let data59 = data58[i9];const _errs157 = errors;const _errs158 = errors;if(typeof data59 === "string"){if(!pattern0.test(data59)){const err127 = {};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}}var valid43 = _errs158 === errors;if(valid43){const err128 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err128];}else {vErrors.push(err128);}errors++;}else {errors = _errs157;if(vErrors !== null){if(_errs157){vErrors.length = _errs157;}else {vErrors = null;}}}if(typeof data59 === "string"){if(func2(data59) < 1){const err129 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}else {const err130 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i9,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err130];}else {vErrors.push(err130);}errors++;}}}else {const err131 = {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 = [err131];}else {vErrors.push(err131);}errors++;}}}else {const err132 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}}if(data52.tempRetention !== undefined){let data60 = data52.tempRetention;if(data60 && typeof data60 == "object" && !Array.isArray(data60)){for(const key16 in data60){if(!(((key16 === "enabled") || (key16 === "staleDays")) || (key16 === "classes"))){const err133 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}}if(data60.enabled !== undefined){if(typeof data60.enabled !== "boolean"){const err134 = {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 = [err134];}else {vErrors.push(err134);}errors++;}}if(data60.staleDays !== undefined){let data62 = data60.staleDays;if(!(((typeof data62 == "number") && (!(data62 % 1) && !isNaN(data62))) && (isFinite(data62)))){const err135 = {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 = [err135];}else {vErrors.push(err135);}errors++;}if((typeof data62 == "number") && (isFinite(data62))){if(data62 < 1 || isNaN(data62)){const err136 = {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 = [err136];}else {vErrors.push(err136);}errors++;}}}if(data60.classes !== undefined){let data63 = data60.classes;if(data63 && typeof data63 == "object" && !Array.isArray(data63)){for(const key17 in data63){if(!((((key17 === "orchestrationLogs") || (key17 === "validationEvidence")) || (key17 === "auditResults")) || (key17 === "planDirs"))){const err137 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err137];}else {vErrors.push(err137);}errors++;}}if(data63.orchestrationLogs !== undefined){if(typeof data63.orchestrationLogs !== "boolean"){const err138 = {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 = [err138];}else {vErrors.push(err138);}errors++;}}if(data63.validationEvidence !== undefined){if(typeof data63.validationEvidence !== "boolean"){const err139 = {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 = [err139];}else {vErrors.push(err139);}errors++;}}if(data63.auditResults !== undefined){if(typeof data63.auditResults !== "boolean"){const err140 = {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 = [err140];}else {vErrors.push(err140);}errors++;}}if(data63.planDirs !== undefined){if(typeof data63.planDirs !== "boolean"){const err141 = {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 = [err141];}else {vErrors.push(err141);}errors++;}}}else {const err142 = {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 = [err142];}else {vErrors.push(err142);}errors++;}}}else {const err143 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err143];}else {vErrors.push(err143);}errors++;}}if(data52.deliverRunner !== undefined){let data68 = data52.deliverRunner;if(data68 && typeof data68 == "object" && !Array.isArray(data68)){for(const key18 in data68){if(!((key18 === "concurrencyCap") || (key18 === "footprintGuard"))){const err144 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err144];}else {vErrors.push(err144);}errors++;}}if(data68.concurrencyCap !== undefined){let data69 = data68.concurrencyCap;if(!(((typeof data69 == "number") && (!(data69 % 1) && !isNaN(data69))) && (isFinite(data69)))){const err145 = {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 = [err145];}else {vErrors.push(err145);}errors++;}if((typeof data69 == "number") && (isFinite(data69))){if(data69 < 1 || isNaN(data69)){const err146 = {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 = [err146];}else {vErrors.push(err146);}errors++;}}}if(data68.footprintGuard !== undefined){let data70 = data68.footprintGuard;if(typeof data70 !== "string"){const err147 = {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 = [err147];}else {vErrors.push(err147);}errors++;}if(!((data70 === "enforce") || (data70 === "advisory"))){const err148 = {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 = [err148];}else {vErrors.push(err148);}errors++;}}}else {const err149 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err149];}else {vErrors.push(err149);}errors++;}}if(data52.worktreeIsolation !== undefined){let data71 = data52.worktreeIsolation;const _errs187 = errors;let valid48 = true;const _errs188 = errors;if(data71 && typeof data71 == "object" && !Array.isArray(data71)){let missing0;if((data71.enabled === undefined) && (missing0 = "enabled")){const err150 = {};if(vErrors === null){vErrors = [err150];}else {vErrors.push(err150);}errors++;}else {if(data71.enabled !== undefined){if(true !== data71.enabled){const err151 = {};if(vErrors === null){vErrors = [err151];}else {vErrors.push(err151);}errors++;}}}}var _valid0 = _errs188 === errors;errors = _errs187;if(vErrors !== null){if(_errs187){vErrors.length = _errs187;}else {vErrors = null;}}if(_valid0){const _errs190 = errors;if(data71 && typeof data71 == "object" && !Array.isArray(data71)){if(data71.root === undefined){const err152 = {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 = [err152];}else {vErrors.push(err152);}errors++;}}var _valid0 = _errs190 === errors;valid48 = _valid0;}if(!valid48){const err153 = {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 = [err153];}else {vErrors.push(err153);}errors++;}if(data71 && typeof data71 == "object" && !Array.isArray(data71)){for(const key19 in data71){if(!(((((((key19 === "enabled") || (key19 === "root")) || (key19 === "nodeModulesStrategy")) || (key19 === "primeFromPath")) || (key19 === "allowSymlinkOnWindows")) || (key19 === "reapOnSuccess")) || (key19 === "bootstrapFiles"))){const err154 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err154];}else {vErrors.push(err154);}errors++;}}if(data71.enabled !== undefined){if(typeof data71.enabled !== "boolean"){const err155 = {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 = [err155];}else {vErrors.push(err155);}errors++;}}if(data71.root !== undefined){let data74 = data71.root;if(typeof data74 === "string"){if(func2(data74) < 1){const err156 = {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 = [err156];}else {vErrors.push(err156);}errors++;}}else {const err157 = {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 = [err157];}else {vErrors.push(err157);}errors++;}}if(data71.nodeModulesStrategy !== undefined){let data75 = data71.nodeModulesStrategy;if(typeof data75 !== "string"){const err158 = {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 = [err158];}else {vErrors.push(err158);}errors++;}if(!((((data75 === "per-worktree") || (data75 === "clone")) || (data75 === "symlink")) || (data75 === "pnpm-store"))){const err159 = {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 = [err159];}else {vErrors.push(err159);}errors++;}}if(data71.primeFromPath !== undefined){let data76 = data71.primeFromPath;if((typeof data76 !== "string") && (data76 !== null)){const err160 = {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 = [err160];}else {vErrors.push(err160);}errors++;}if(typeof data76 === "string"){if(func2(data76) < 1){const err161 = {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 = [err161];}else {vErrors.push(err161);}errors++;}}}if(data71.allowSymlinkOnWindows !== undefined){if(typeof data71.allowSymlinkOnWindows !== "boolean"){const err162 = {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 = [err162];}else {vErrors.push(err162);}errors++;}}if(data71.reapOnSuccess !== undefined){if(typeof data71.reapOnSuccess !== "boolean"){const err163 = {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 = [err163];}else {vErrors.push(err163);}errors++;}}if(data71.bootstrapFiles !== undefined){let data79 = data71.bootstrapFiles;if(Array.isArray(data79)){const len8 = data79.length;for(let i10=0; i10<len8; i10++){let data80 = data79[i10];if(typeof data80 === "string"){if(func2(data80) < 1){const err164 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err164];}else {vErrors.push(err164);}errors++;}}else {const err165 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i10,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err165];}else {vErrors.push(err165);}errors++;}}}else {const err166 = {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 = [err166];}else {vErrors.push(err166);}errors++;}}}else {const err167 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err167];}else {vErrors.push(err167);}errors++;}}if(data52.quality !== undefined){let data81 = data52.quality;if(data81 && typeof data81 == "object" && !Array.isArray(data81)){for(const key20 in data81){if(!((((((((key20 === "gateScoping") || (key20 === "gates")) || (key20 === "formatAutofix")) || (key20 === "codingGuardrails")) || (key20 === "autoRefresh")) || (key20 === "baselineEpsilon")) || (key20 === "requireBaselines")) || (key20 === "navigability"))){const err168 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err168];}else {vErrors.push(err168);}errors++;}}if(data81.gateScoping !== undefined){let data82 = data81.gateScoping;if(data82 && typeof data82 == "object" && !Array.isArray(data82)){for(const key21 in data82){if(!((key21 === "scope") || (key21 === "diffRef"))){const err169 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err169];}else {vErrors.push(err169);}errors++;}}if(data82.scope !== undefined){let data83 = data82.scope;if(typeof data83 !== "string"){const err170 = {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 = [err170];}else {vErrors.push(err170);}errors++;}if(!((data83 === "diff") || (data83 === "full"))){const err171 = {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 = [err171];}else {vErrors.push(err171);}errors++;}}if(data82.diffRef !== undefined){let data84 = data82.diffRef;if(typeof data84 === "string"){if(func2(data84) < 1){const err172 = {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 = [err172];}else {vErrors.push(err172);}errors++;}}else {const err173 = {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 = [err173];}else {vErrors.push(err173);}errors++;}}}else {const err174 = {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 = [err174];}else {vErrors.push(err174);}errors++;}}if(data81.gates !== undefined){let data85 = data81.gates;if(data85 && typeof data85 == "object" && !Array.isArray(data85)){for(const key22 in data85){if(!((((((((key22 === "lint") || (key22 === "coverage")) || (key22 === "crap")) || (key22 === "maintainability")) || (key22 === "mutation")) || (key22 === "lighthouse")) || (key22 === "bundle-size")) || (key22 === "duplication"))){const err175 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err175];}else {vErrors.push(err175);}errors++;}}if(data85.lint !== undefined){let data86 = data85.lint;if(data86 && typeof data86 == "object" && !Array.isArray(data86)){for(const key23 in data86){if(!(((((key23 === "enabled") || (key23 === "baselinePath")) || (key23 === "tolerance")) || (key23 === "floors")) || (key23 === "components"))){const err176 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key23},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err176];}else {vErrors.push(err176);}errors++;}}if(data86.enabled !== undefined){if(typeof data86.enabled !== "boolean"){const err177 = {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 = [err177];}else {vErrors.push(err177);}errors++;}}if(data86.baselinePath !== undefined){let data88 = data86.baselinePath;const _errs228 = errors;const _errs229 = errors;if(typeof data88 === "string"){if(!pattern0.test(data88)){const err178 = {};if(vErrors === null){vErrors = [err178];}else {vErrors.push(err178);}errors++;}}var valid57 = _errs229 === errors;if(valid57){const err179 = {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 = [err179];}else {vErrors.push(err179);}errors++;}else {errors = _errs228;if(vErrors !== null){if(_errs228){vErrors.length = _errs228;}else {vErrors = null;}}}if(typeof data88 === "string"){if(func2(data88) < 1){const err180 = {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 = [err180];}else {vErrors.push(err180);}errors++;}}else {const err181 = {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 = [err181];}else {vErrors.push(err181);}errors++;}}if(data86.tolerance !== undefined){let data89 = data86.tolerance;if(data89 && typeof data89 == "object" && !Array.isArray(data89)){if(data89.kind === undefined){const err182 = {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 = [err182];}else {vErrors.push(err182);}errors++;}if(data89.value === undefined){const err183 = {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 = [err183];}else {vErrors.push(err183);}errors++;}for(const key24 in data89){if(!((key24 === "kind") || (key24 === "value"))){const err184 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key24},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err184];}else {vErrors.push(err184);}errors++;}}if(data89.kind !== undefined){let data90 = data89.kind;if(typeof data90 !== "string"){const err185 = {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 = [err185];}else {vErrors.push(err185);}errors++;}if(!((data90 === "absolute") || (data90 === "percent"))){const err186 = {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 = [err186];}else {vErrors.push(err186);}errors++;}}if(data89.value !== undefined){let data91 = data89.value;if((typeof data91 == "number") && (isFinite(data91))){if(data91 < 0 || isNaN(data91)){const err187 = {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 = [err187];}else {vErrors.push(err187);}errors++;}}else {const err188 = {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 = [err188];}else {vErrors.push(err188);}errors++;}}}else {const err189 = {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 = [err189];}else {vErrors.push(err189);}errors++;}}if(data86.floors !== undefined){let data92 = data86.floors;if(data92 && typeof data92 == "object" && !Array.isArray(data92)){for(const key25 in data92){let data93 = data92[key25];if(data93 && typeof data93 == "object" && !Array.isArray(data93)){for(const key26 in data93){let data94 = data93[key26];if(!((typeof data94 == "number") && (isFinite(data94)))){const err190 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key25.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key26.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 = [err190];}else {vErrors.push(err190);}errors++;}}}else {const err191 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key25.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 = [err191];}else {vErrors.push(err191);}errors++;}}}else {const err192 = {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 = [err192];}else {vErrors.push(err192);}errors++;}}if(data86.components !== undefined){let data95 = data86.components;if(data95 && typeof data95 == "object" && !Array.isArray(data95)){for(const key27 in data95){let data96 = data95[key27];if(Array.isArray(data96)){const len9 = data96.length;for(let i11=0; i11<len9; i11++){let data97 = data96[i11];if(typeof data97 === "string"){if(func2(data97) < 1){const err193 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key27.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,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 = [err193];}else {vErrors.push(err193);}errors++;}}else {const err194 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key27.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i11,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 = [err194];}else {vErrors.push(err194);}errors++;}}}else {const err195 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key27.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 = [err195];}else {vErrors.push(err195);}errors++;}}}else {const err196 = {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 = [err196];}else {vErrors.push(err196);}errors++;}}}else {const err197 = {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 = [err197];}else {vErrors.push(err197);}errors++;}}if(data85.coverage !== undefined){let data98 = data85.coverage;if(data98 && typeof data98 == "object" && !Array.isArray(data98)){for(const key28 in data98){if(!(((((((key28 === "enabled") || (key28 === "baselinePath")) || (key28 === "tolerance")) || (key28 === "floors")) || (key28 === "components")) || (key28 === "coveragePath")) || (key28 === "timeoutMs"))){const err198 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key28},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}}if(data98.enabled !== undefined){if(typeof data98.enabled !== "boolean"){const err199 = {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 = [err199];}else {vErrors.push(err199);}errors++;}}if(data98.baselinePath !== undefined){let data100 = data98.baselinePath;const _errs259 = errors;const _errs260 = errors;if(typeof data100 === "string"){if(!pattern0.test(data100)){const err200 = {};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}}var valid65 = _errs260 === errors;if(valid65){const err201 = {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 = [err201];}else {vErrors.push(err201);}errors++;}else {errors = _errs259;if(vErrors !== null){if(_errs259){vErrors.length = _errs259;}else {vErrors = null;}}}if(typeof data100 === "string"){if(func2(data100) < 1){const err202 = {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 = [err202];}else {vErrors.push(err202);}errors++;}}else {const err203 = {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 = [err203];}else {vErrors.push(err203);}errors++;}}if(data98.tolerance !== undefined){let data101 = data98.tolerance;if(data101 && typeof data101 == "object" && !Array.isArray(data101)){if(data101.kind === undefined){const err204 = {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 = [err204];}else {vErrors.push(err204);}errors++;}if(data101.value === undefined){const err205 = {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 = [err205];}else {vErrors.push(err205);}errors++;}for(const key29 in data101){if(!((key29 === "kind") || (key29 === "value"))){const err206 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key29},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err206];}else {vErrors.push(err206);}errors++;}}if(data101.kind !== undefined){let data102 = data101.kind;if(typeof data102 !== "string"){const err207 = {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 = [err207];}else {vErrors.push(err207);}errors++;}if(!((data102 === "absolute") || (data102 === "percent"))){const err208 = {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 = [err208];}else {vErrors.push(err208);}errors++;}}if(data101.value !== undefined){let data103 = data101.value;if((typeof data103 == "number") && (isFinite(data103))){if(data103 < 0 || isNaN(data103)){const err209 = {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 = [err209];}else {vErrors.push(err209);}errors++;}}else {const err210 = {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 = [err210];}else {vErrors.push(err210);}errors++;}}}else {const err211 = {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 = [err211];}else {vErrors.push(err211);}errors++;}}if(data98.floors !== undefined){let data104 = data98.floors;if(data104 && typeof data104 == "object" && !Array.isArray(data104)){for(const key30 in data104){let data105 = data104[key30];if(data105 && typeof data105 == "object" && !Array.isArray(data105)){for(const key31 in data105){let data106 = data105[key31];if(!((typeof data106 == "number") && (isFinite(data106)))){const err212 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key31.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 = [err212];}else {vErrors.push(err212);}errors++;}}}else {const err213 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key30.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 = [err213];}else {vErrors.push(err213);}errors++;}}}else {const err214 = {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 = [err214];}else {vErrors.push(err214);}errors++;}}if(data98.components !== undefined){let data107 = data98.components;if(data107 && typeof data107 == "object" && !Array.isArray(data107)){for(const key32 in data107){let data108 = data107[key32];if(Array.isArray(data108)){const len10 = data108.length;for(let i12=0; i12<len10; i12++){let data109 = data108[i12];if(typeof data109 === "string"){if(func2(data109) < 1){const err215 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,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 = [err215];}else {vErrors.push(err215);}errors++;}}else {const err216 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i12,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 = [err216];}else {vErrors.push(err216);}errors++;}}}else {const err217 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key32.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 = [err217];}else {vErrors.push(err217);}errors++;}}}else {const err218 = {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 = [err218];}else {vErrors.push(err218);}errors++;}}if(data98.coveragePath !== undefined){let data110 = data98.coveragePath;const _errs285 = errors;const _errs286 = errors;if(typeof data110 === "string"){if(!pattern0.test(data110)){const err219 = {};if(vErrors === null){vErrors = [err219];}else {vErrors.push(err219);}errors++;}}var valid72 = _errs286 === errors;if(valid72){const err220 = {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 = [err220];}else {vErrors.push(err220);}errors++;}else {errors = _errs285;if(vErrors !== null){if(_errs285){vErrors.length = _errs285;}else {vErrors = null;}}}if(typeof data110 === "string"){if(func2(data110) < 1){const err221 = {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 = [err221];}else {vErrors.push(err221);}errors++;}}else {const err222 = {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 = [err222];}else {vErrors.push(err222);}errors++;}}if(data98.timeoutMs !== undefined){let data111 = data98.timeoutMs;if(!(((typeof data111 == "number") && (!(data111 % 1) && !isNaN(data111))) && (isFinite(data111)))){const err223 = {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 = [err223];}else {vErrors.push(err223);}errors++;}if((typeof data111 == "number") && (isFinite(data111))){if(data111 < 1 || isNaN(data111)){const err224 = {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 = [err224];}else {vErrors.push(err224);}errors++;}}}}else {const err225 = {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 = [err225];}else {vErrors.push(err225);}errors++;}}if(data85.crap !== undefined){let data112 = data85.crap;if(data112 && typeof data112 == "object" && !Array.isArray(data112)){for(const key33 in data112){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key33))){const err226 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err226];}else {vErrors.push(err226);}errors++;}}if(data112.enabled !== undefined){if(typeof data112.enabled !== "boolean"){const err227 = {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 = [err227];}else {vErrors.push(err227);}errors++;}}if(data112.baselinePath !== undefined){let data114 = data112.baselinePath;const _errs296 = errors;const _errs297 = errors;if(typeof data114 === "string"){if(!pattern0.test(data114)){const err228 = {};if(vErrors === null){vErrors = [err228];}else {vErrors.push(err228);}errors++;}}var valid74 = _errs297 === errors;if(valid74){const err229 = {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 = [err229];}else {vErrors.push(err229);}errors++;}else {errors = _errs296;if(vErrors !== null){if(_errs296){vErrors.length = _errs296;}else {vErrors = null;}}}if(typeof data114 === "string"){if(func2(data114) < 1){const err230 = {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 = [err230];}else {vErrors.push(err230);}errors++;}}else {const err231 = {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 = [err231];}else {vErrors.push(err231);}errors++;}}if(data112.tolerance !== undefined){let data115 = data112.tolerance;if(data115 && typeof data115 == "object" && !Array.isArray(data115)){if(data115.kind === undefined){const err232 = {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 = [err232];}else {vErrors.push(err232);}errors++;}if(data115.value === undefined){const err233 = {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 = [err233];}else {vErrors.push(err233);}errors++;}for(const key34 in data115){if(!((key34 === "kind") || (key34 === "value"))){const err234 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key34},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err234];}else {vErrors.push(err234);}errors++;}}if(data115.kind !== undefined){let data116 = data115.kind;if(typeof data116 !== "string"){const err235 = {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 = [err235];}else {vErrors.push(err235);}errors++;}if(!((data116 === "absolute") || (data116 === "percent"))){const err236 = {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 = [err236];}else {vErrors.push(err236);}errors++;}}if(data115.value !== undefined){let data117 = data115.value;if((typeof data117 == "number") && (isFinite(data117))){if(data117 < 0 || isNaN(data117)){const err237 = {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 = [err237];}else {vErrors.push(err237);}errors++;}}else {const err238 = {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 = [err238];}else {vErrors.push(err238);}errors++;}}}else {const err239 = {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 = [err239];}else {vErrors.push(err239);}errors++;}}if(data112.floors !== undefined){let data118 = data112.floors;if(data118 && typeof data118 == "object" && !Array.isArray(data118)){for(const key35 in data118){let data119 = data118[key35];if(data119 && typeof data119 == "object" && !Array.isArray(data119)){for(const key36 in data119){let data120 = data119[key36];if(!((typeof data120 == "number") && (isFinite(data120)))){const err240 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key36.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 = [err240];}else {vErrors.push(err240);}errors++;}}}else {const err241 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key35.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 = [err241];}else {vErrors.push(err241);}errors++;}}}else {const err242 = {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 = [err242];}else {vErrors.push(err242);}errors++;}}if(data112.components !== undefined){let data121 = data112.components;if(data121 && typeof data121 == "object" && !Array.isArray(data121)){for(const key37 in data121){let data122 = data121[key37];if(Array.isArray(data122)){const len11 = data122.length;for(let i13=0; i13<len11; i13++){let data123 = data122[i13];if(typeof data123 === "string"){if(func2(data123) < 1){const err243 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i13,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 = [err243];}else {vErrors.push(err243);}errors++;}}else {const err244 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i13,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 = [err244];}else {vErrors.push(err244);}errors++;}}}else {const err245 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key37.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 = [err245];}else {vErrors.push(err245);}errors++;}}}else {const err246 = {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 = [err246];}else {vErrors.push(err246);}errors++;}}if(data112.targetDirs !== undefined){let data124 = data112.targetDirs;const _errs321 = errors;let valid81 = false;let passing0 = null;const _errs322 = errors;if(Array.isArray(data124)){const len12 = data124.length;for(let i14=0; i14<len12; i14++){if(typeof data124[i14] !== "string"){const err247 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i14,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 = [err247];}else {vErrors.push(err247);}errors++;}}}else {const err248 = {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 = [err248];}else {vErrors.push(err248);}errors++;}var _valid1 = _errs322 === errors;if(_valid1){valid81 = true;passing0 = 0;}const _errs326 = errors;if(data124 && typeof data124 == "object" && !Array.isArray(data124)){for(const key38 in data124){if(!((key38 === "append") || (key38 === "prepend"))){const err249 = {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: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err249];}else {vErrors.push(err249);}errors++;}}if(data124.append !== undefined){let data126 = data124.append;if(Array.isArray(data126)){const len13 = data126.length;for(let i15=0; i15<len13; i15++){if(typeof data126[i15] !== "string"){const err250 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i15,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 = [err250];}else {vErrors.push(err250);}errors++;}}}else {const err251 = {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 = [err251];}else {vErrors.push(err251);}errors++;}}if(data124.prepend !== undefined){let data128 = data124.prepend;if(Array.isArray(data128)){const len14 = data128.length;for(let i16=0; i16<len14; i16++){if(typeof data128[i16] !== "string"){const err252 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i16,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 = [err252];}else {vErrors.push(err252);}errors++;}}}else {const err253 = {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 = [err253];}else {vErrors.push(err253);}errors++;}}}else {const err254 = {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 = [err254];}else {vErrors.push(err254);}errors++;}var _valid1 = _errs326 === errors;if(_valid1 && valid81){valid81 = false;passing0 = [passing0, 1];}else {if(_valid1){valid81 = true;passing0 = 1;}}if(!valid81){const err255 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err255];}else {vErrors.push(err255);}errors++;}else {errors = _errs321;if(vErrors !== null){if(_errs321){vErrors.length = _errs321;}else {vErrors = null;}}}}if(data112.newMethodCeiling !== undefined){let data130 = data112.newMethodCeiling;if(!(((typeof data130 == "number") && (!(data130 % 1) && !isNaN(data130))) && (isFinite(data130)))){const err256 = {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 = [err256];}else {vErrors.push(err256);}errors++;}if((typeof data130 == "number") && (isFinite(data130))){if(data130 < 1 || isNaN(data130)){const err257 = {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 = [err257];}else {vErrors.push(err257);}errors++;}}}if(data112.requireCoverage !== undefined){if(typeof data112.requireCoverage !== "boolean"){const err258 = {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 = [err258];}else {vErrors.push(err258);}errors++;}}if(data112.minMethodResolutionRate !== undefined){let data132 = data112.minMethodResolutionRate;if((typeof data132 == "number") && (isFinite(data132))){if(data132 > 1 || isNaN(data132)){const err259 = {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 = [err259];}else {vErrors.push(err259);}errors++;}if(data132 < 0 || isNaN(data132)){const err260 = {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 = [err260];}else {vErrors.push(err260);}errors++;}}else {const err261 = {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 = [err261];}else {vErrors.push(err261);}errors++;}}if(data112.friction !== undefined){let data133 = data112.friction;if(data133 && typeof data133 == "object" && !Array.isArray(data133)){for(const key39 in data133){if(!(key39 === "markerKey")){const err262 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key39},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err262];}else {vErrors.push(err262);}errors++;}}if(data133.markerKey !== undefined){let data134 = data133.markerKey;if(typeof data134 === "string"){if(func2(data134) < 1){const err263 = {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 = [err263];}else {vErrors.push(err263);}errors++;}}else {const err264 = {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 = [err264];}else {vErrors.push(err264);}errors++;}}}else {const err265 = {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 = [err265];}else {vErrors.push(err265);}errors++;}}if(data112.refreshTag !== undefined){let data135 = data112.refreshTag;const _errs350 = errors;const _errs351 = errors;if(typeof data135 === "string"){if(!pattern0.test(data135)){const err266 = {};if(vErrors === null){vErrors = [err266];}else {vErrors.push(err266);}errors++;}}var valid90 = _errs351 === errors;if(valid90){const err267 = {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 = [err267];}else {vErrors.push(err267);}errors++;}else {errors = _errs350;if(vErrors !== null){if(_errs350){vErrors.length = _errs350;}else {vErrors = null;}}}if(typeof data135 === "string"){if(func2(data135) < 1){const err268 = {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 = [err268];}else {vErrors.push(err268);}errors++;}}else {const err269 = {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 = [err269];}else {vErrors.push(err269);}errors++;}}if(data112.refreshTimeoutMs !== undefined){let data136 = data112.refreshTimeoutMs;if(!(((typeof data136 == "number") && (!(data136 % 1) && !isNaN(data136))) && (isFinite(data136)))){const err270 = {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 = [err270];}else {vErrors.push(err270);}errors++;}if((typeof data136 == "number") && (isFinite(data136))){if(data136 < 1 || isNaN(data136)){const err271 = {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 = [err271];}else {vErrors.push(err271);}errors++;}}}if(data112.ignoreGlobs !== undefined){let data137 = data112.ignoreGlobs;if(Array.isArray(data137)){const len15 = data137.length;for(let i17=0; i17<len15; i17++){let data138 = data137[i17];if(typeof data138 === "string"){if(func2(data138) < 1){const err272 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i17,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 = [err272];}else {vErrors.push(err272);}errors++;}}else {const err273 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i17,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 = [err273];}else {vErrors.push(err273);}errors++;}}}else {const err274 = {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 = [err274];}else {vErrors.push(err274);}errors++;}}if(data112.incrementalCoverage !== undefined){let data139 = data112.incrementalCoverage;if(data139 && typeof data139 == "object" && !Array.isArray(data139)){for(const key40 in data139){if(!((((key40 === "skipWhenUnchanged") || (key40 === "baselineJoin")) || (key40 === "enabled")) || (key40 === "baseRef"))){const err275 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key40},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err275];}else {vErrors.push(err275);}errors++;}}if(data139.skipWhenUnchanged !== undefined){if(typeof data139.skipWhenUnchanged !== "boolean"){const err276 = {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 = [err276];}else {vErrors.push(err276);}errors++;}}if(data139.baselineJoin !== undefined){if(typeof data139.baselineJoin !== "boolean"){const err277 = {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 = [err277];}else {vErrors.push(err277);}errors++;}}if(data139.enabled !== undefined){if(typeof data139.enabled !== "boolean"){const err278 = {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 = [err278];}else {vErrors.push(err278);}errors++;}}if(data139.baseRef !== undefined){let data143 = data139.baseRef;if(typeof data143 === "string"){if(func2(data143) < 1){const err279 = {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 = [err279];}else {vErrors.push(err279);}errors++;}}else {const err280 = {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 = [err280];}else {vErrors.push(err280);}errors++;}}}else {const err281 = {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 = [err281];}else {vErrors.push(err281);}errors++;}}}else {const err282 = {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 = [err282];}else {vErrors.push(err282);}errors++;}}if(data85.maintainability !== undefined){let data144 = data85.maintainability;if(data144 && typeof data144 == "object" && !Array.isArray(data144)){for(const key41 in data144){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties, key41))){const err283 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key41},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err283];}else {vErrors.push(err283);}errors++;}}if(data144.enabled !== undefined){if(typeof data144.enabled !== "boolean"){const err284 = {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 = [err284];}else {vErrors.push(err284);}errors++;}}if(data144.baselinePath !== undefined){let data146 = data144.baselinePath;const _errs376 = errors;const _errs377 = errors;if(typeof data146 === "string"){if(!pattern0.test(data146)){const err285 = {};if(vErrors === null){vErrors = [err285];}else {vErrors.push(err285);}errors++;}}var valid95 = _errs377 === errors;if(valid95){const err286 = {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 = [err286];}else {vErrors.push(err286);}errors++;}else {errors = _errs376;if(vErrors !== null){if(_errs376){vErrors.length = _errs376;}else {vErrors = null;}}}if(typeof data146 === "string"){if(func2(data146) < 1){const err287 = {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 = [err287];}else {vErrors.push(err287);}errors++;}}else {const err288 = {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 = [err288];}else {vErrors.push(err288);}errors++;}}if(data144.tolerance !== undefined){let data147 = data144.tolerance;if(data147 && typeof data147 == "object" && !Array.isArray(data147)){if(data147.kind === undefined){const err289 = {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 = [err289];}else {vErrors.push(err289);}errors++;}if(data147.value === undefined){const err290 = {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 = [err290];}else {vErrors.push(err290);}errors++;}for(const key42 in data147){if(!((key42 === "kind") || (key42 === "value"))){const err291 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key42},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err291];}else {vErrors.push(err291);}errors++;}}if(data147.kind !== undefined){let data148 = data147.kind;if(typeof data148 !== "string"){const err292 = {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 = [err292];}else {vErrors.push(err292);}errors++;}if(!((data148 === "absolute") || (data148 === "percent"))){const err293 = {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 = [err293];}else {vErrors.push(err293);}errors++;}}if(data147.value !== undefined){let data149 = data147.value;if((typeof data149 == "number") && (isFinite(data149))){if(data149 < 0 || isNaN(data149)){const err294 = {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 = [err294];}else {vErrors.push(err294);}errors++;}}else {const err295 = {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 = [err295];}else {vErrors.push(err295);}errors++;}}}else {const err296 = {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 = [err296];}else {vErrors.push(err296);}errors++;}}if(data144.floors !== undefined){let data150 = data144.floors;if(data150 && typeof data150 == "object" && !Array.isArray(data150)){for(const key43 in data150){let data151 = data150[key43];if(data151 && typeof data151 == "object" && !Array.isArray(data151)){for(const key44 in data151){let data152 = data151[key44];if(!((typeof data152 == "number") && (isFinite(data152)))){const err297 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key43.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key44.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 = [err297];}else {vErrors.push(err297);}errors++;}}}else {const err298 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key43.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 = [err298];}else {vErrors.push(err298);}errors++;}}}else {const err299 = {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 = [err299];}else {vErrors.push(err299);}errors++;}}if(data144.components !== undefined){let data153 = data144.components;if(data153 && typeof data153 == "object" && !Array.isArray(data153)){for(const key45 in data153){let data154 = data153[key45];if(Array.isArray(data154)){const len16 = data154.length;for(let i18=0; i18<len16; i18++){let data155 = data154[i18];if(typeof data155 === "string"){if(func2(data155) < 1){const err300 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key45.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err300];}else {vErrors.push(err300);}errors++;}}else {const err301 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key45.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,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 = [err301];}else {vErrors.push(err301);}errors++;}}}else {const err302 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key45.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 = [err302];}else {vErrors.push(err302);}errors++;}}}else {const err303 = {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 = [err303];}else {vErrors.push(err303);}errors++;}}if(data144.targetDirs !== undefined){let data156 = data144.targetDirs;const _errs401 = errors;let valid102 = false;let passing1 = null;const _errs402 = errors;if(Array.isArray(data156)){const len17 = data156.length;for(let i19=0; i19<len17; i19++){if(typeof data156[i19] !== "string"){const err304 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i19,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 = [err304];}else {vErrors.push(err304);}errors++;}}}else {const err305 = {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 = [err305];}else {vErrors.push(err305);}errors++;}var _valid2 = _errs402 === errors;if(_valid2){valid102 = true;passing1 = 0;}const _errs406 = errors;if(data156 && typeof data156 == "object" && !Array.isArray(data156)){for(const key46 in data156){if(!((key46 === "append") || (key46 === "prepend"))){const err306 = {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: key46},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err306];}else {vErrors.push(err306);}errors++;}}if(data156.append !== undefined){let data158 = data156.append;if(Array.isArray(data158)){const len18 = data158.length;for(let i20=0; i20<len18; i20++){if(typeof data158[i20] !== "string"){const err307 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i20,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 = [err307];}else {vErrors.push(err307);}errors++;}}}else {const err308 = {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 = [err308];}else {vErrors.push(err308);}errors++;}}if(data156.prepend !== undefined){let data160 = data156.prepend;if(Array.isArray(data160)){const len19 = data160.length;for(let i21=0; i21<len19; i21++){if(typeof data160[i21] !== "string"){const err309 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i21,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 = [err309];}else {vErrors.push(err309);}errors++;}}}else {const err310 = {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 = [err310];}else {vErrors.push(err310);}errors++;}}}else {const err311 = {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 = [err311];}else {vErrors.push(err311);}errors++;}var _valid2 = _errs406 === errors;if(_valid2 && valid102){valid102 = false;passing1 = [passing1, 1];}else {if(_valid2){valid102 = true;passing1 = 1;}}if(!valid102){const err312 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err312];}else {vErrors.push(err312);}errors++;}else {errors = _errs401;if(vErrors !== null){if(_errs401){vErrors.length = _errs401;}else {vErrors = null;}}}}if(data144.refreshTag !== undefined){let data162 = data144.refreshTag;const _errs419 = errors;const _errs420 = errors;if(typeof data162 === "string"){if(!pattern0.test(data162)){const err313 = {};if(vErrors === null){vErrors = [err313];}else {vErrors.push(err313);}errors++;}}var valid110 = _errs420 === errors;if(valid110){const err314 = {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 = [err314];}else {vErrors.push(err314);}errors++;}else {errors = _errs419;if(vErrors !== null){if(_errs419){vErrors.length = _errs419;}else {vErrors = null;}}}if(typeof data162 === "string"){if(func2(data162) < 1){const err315 = {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 = [err315];}else {vErrors.push(err315);}errors++;}}else {const err316 = {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 = [err316];}else {vErrors.push(err316);}errors++;}}if(data144.refreshTimeoutMs !== undefined){let data163 = data144.refreshTimeoutMs;if(!(((typeof data163 == "number") && (!(data163 % 1) && !isNaN(data163))) && (isFinite(data163)))){const err317 = {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 = [err317];}else {vErrors.push(err317);}errors++;}if((typeof data163 == "number") && (isFinite(data163))){if(data163 < 1 || isNaN(data163)){const err318 = {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 = [err318];}else {vErrors.push(err318);}errors++;}}}if(data144.ignoreGlobs !== undefined){let data164 = data144.ignoreGlobs;if(Array.isArray(data164)){const len20 = data164.length;for(let i22=0; i22<len20; i22++){let data165 = data164[i22];if(typeof data165 === "string"){if(func2(data165) < 1){const err319 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i22,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 = [err319];}else {vErrors.push(err319);}errors++;}}else {const err320 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i22,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 = [err320];}else {vErrors.push(err320);}errors++;}}}else {const err321 = {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 = [err321];}else {vErrors.push(err321);}errors++;}}}else {const err322 = {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 = [err322];}else {vErrors.push(err322);}errors++;}}if(data85.mutation !== undefined){let data166 = data85.mutation;if(data166 && typeof data166 == "object" && !Array.isArray(data166)){for(const key47 in data166){if(!((((((key47 === "enabled") || (key47 === "baselinePath")) || (key47 === "tolerance")) || (key47 === "floors")) || (key47 === "components")) || (key47 === "strykerConfigPath"))){const err323 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key47},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err323];}else {vErrors.push(err323);}errors++;}}if(data166.enabled !== undefined){if(typeof data166.enabled !== "boolean"){const err324 = {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 = [err324];}else {vErrors.push(err324);}errors++;}}if(data166.baselinePath !== undefined){let data168 = data166.baselinePath;const _errs434 = errors;const _errs435 = errors;if(typeof data168 === "string"){if(!pattern0.test(data168)){const err325 = {};if(vErrors === null){vErrors = [err325];}else {vErrors.push(err325);}errors++;}}var valid114 = _errs435 === errors;if(valid114){const err326 = {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 = [err326];}else {vErrors.push(err326);}errors++;}else {errors = _errs434;if(vErrors !== null){if(_errs434){vErrors.length = _errs434;}else {vErrors = null;}}}if(typeof data168 === "string"){if(func2(data168) < 1){const err327 = {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 = [err327];}else {vErrors.push(err327);}errors++;}}else {const err328 = {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 = [err328];}else {vErrors.push(err328);}errors++;}}if(data166.tolerance !== undefined){let data169 = data166.tolerance;if(data169 && typeof data169 == "object" && !Array.isArray(data169)){if(data169.kind === undefined){const err329 = {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 = [err329];}else {vErrors.push(err329);}errors++;}if(data169.value === undefined){const err330 = {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 = [err330];}else {vErrors.push(err330);}errors++;}for(const key48 in data169){if(!((key48 === "kind") || (key48 === "value"))){const err331 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key48},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err331];}else {vErrors.push(err331);}errors++;}}if(data169.kind !== undefined){let data170 = data169.kind;if(typeof data170 !== "string"){const err332 = {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 = [err332];}else {vErrors.push(err332);}errors++;}if(!((data170 === "absolute") || (data170 === "percent"))){const err333 = {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 = [err333];}else {vErrors.push(err333);}errors++;}}if(data169.value !== undefined){let data171 = data169.value;if((typeof data171 == "number") && (isFinite(data171))){if(data171 < 0 || isNaN(data171)){const err334 = {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 = [err334];}else {vErrors.push(err334);}errors++;}}else {const err335 = {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 = [err335];}else {vErrors.push(err335);}errors++;}}}else {const err336 = {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 = [err336];}else {vErrors.push(err336);}errors++;}}if(data166.floors !== undefined){let data172 = data166.floors;if(data172 && typeof data172 == "object" && !Array.isArray(data172)){for(const key49 in data172){let data173 = data172[key49];if(data173 && typeof data173 == "object" && !Array.isArray(data173)){for(const key50 in data173){let data174 = data173[key50];if(!((typeof data174 == "number") && (isFinite(data174)))){const err337 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key49.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key50.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 = [err337];}else {vErrors.push(err337);}errors++;}}}else {const err338 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key49.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 = [err338];}else {vErrors.push(err338);}errors++;}}}else {const err339 = {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 = [err339];}else {vErrors.push(err339);}errors++;}}if(data166.components !== undefined){let data175 = data166.components;if(data175 && typeof data175 == "object" && !Array.isArray(data175)){for(const key51 in data175){let data176 = data175[key51];if(Array.isArray(data176)){const len21 = data176.length;for(let i23=0; i23<len21; i23++){let data177 = data176[i23];if(typeof data177 === "string"){if(func2(data177) < 1){const err340 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key51.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,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 = [err340];}else {vErrors.push(err340);}errors++;}}else {const err341 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key51.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i23,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 = [err341];}else {vErrors.push(err341);}errors++;}}}else {const err342 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key51.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 = [err342];}else {vErrors.push(err342);}errors++;}}}else {const err343 = {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 = [err343];}else {vErrors.push(err343);}errors++;}}if(data166.strykerConfigPath !== undefined){let data178 = data166.strykerConfigPath;if((typeof data178 !== "string") && (data178 !== null)){const err344 = {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 = [err344];}else {vErrors.push(err344);}errors++;}const _errs460 = errors;const _errs461 = errors;if(errors === _errs461){if(typeof data178 === "string"){if(!pattern0.test(data178)){const err345 = {};if(vErrors === null){vErrors = [err345];}else {vErrors.push(err345);}errors++;}}else {const err346 = {};if(vErrors === null){vErrors = [err346];}else {vErrors.push(err346);}errors++;}}var valid121 = _errs461 === errors;if(valid121){const err347 = {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 = [err347];}else {vErrors.push(err347);}errors++;}else {errors = _errs460;if(vErrors !== null){if(_errs460){vErrors.length = _errs460;}else {vErrors = null;}}}if(typeof data178 === "string"){if(func2(data178) < 1){const err348 = {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 = [err348];}else {vErrors.push(err348);}errors++;}}}}else {const err349 = {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 = [err349];}else {vErrors.push(err349);}errors++;}}if(data85.lighthouse !== undefined){let data179 = data85.lighthouse;if(data179 && typeof data179 == "object" && !Array.isArray(data179)){for(const key52 in data179){if(!(((((((key52 === "enabled") || (key52 === "baselinePath")) || (key52 === "tolerance")) || (key52 === "floors")) || (key52 === "components")) || (key52 === "baseUrl")) || (key52 === "routes"))){const err350 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key52},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err350];}else {vErrors.push(err350);}errors++;}}if(data179.enabled !== undefined){if(typeof data179.enabled !== "boolean"){const err351 = {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 = [err351];}else {vErrors.push(err351);}errors++;}}if(data179.baselinePath !== undefined){let data181 = data179.baselinePath;const _errs470 = errors;const _errs471 = errors;if(typeof data181 === "string"){if(!pattern0.test(data181)){const err352 = {};if(vErrors === null){vErrors = [err352];}else {vErrors.push(err352);}errors++;}}var valid123 = _errs471 === errors;if(valid123){const err353 = {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 = [err353];}else {vErrors.push(err353);}errors++;}else {errors = _errs470;if(vErrors !== null){if(_errs470){vErrors.length = _errs470;}else {vErrors = null;}}}if(typeof data181 === "string"){if(func2(data181) < 1){const err354 = {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 = [err354];}else {vErrors.push(err354);}errors++;}}else {const err355 = {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 = [err355];}else {vErrors.push(err355);}errors++;}}if(data179.tolerance !== undefined){let data182 = data179.tolerance;if(data182 && typeof data182 == "object" && !Array.isArray(data182)){if(data182.kind === undefined){const err356 = {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 = [err356];}else {vErrors.push(err356);}errors++;}if(data182.value === undefined){const err357 = {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 = [err357];}else {vErrors.push(err357);}errors++;}for(const key53 in data182){if(!((key53 === "kind") || (key53 === "value"))){const err358 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key53},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err358];}else {vErrors.push(err358);}errors++;}}if(data182.kind !== undefined){let data183 = data182.kind;if(typeof data183 !== "string"){const err359 = {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 = [err359];}else {vErrors.push(err359);}errors++;}if(!((data183 === "absolute") || (data183 === "percent"))){const err360 = {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 = [err360];}else {vErrors.push(err360);}errors++;}}if(data182.value !== undefined){let data184 = data182.value;if((typeof data184 == "number") && (isFinite(data184))){if(data184 < 0 || isNaN(data184)){const err361 = {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 = [err361];}else {vErrors.push(err361);}errors++;}}else {const err362 = {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 = [err362];}else {vErrors.push(err362);}errors++;}}}else {const err363 = {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 = [err363];}else {vErrors.push(err363);}errors++;}}if(data179.floors !== undefined){let data185 = data179.floors;if(data185 && typeof data185 == "object" && !Array.isArray(data185)){for(const key54 in data185){let data186 = data185[key54];if(data186 && typeof data186 == "object" && !Array.isArray(data186)){for(const key55 in data186){let data187 = data186[key55];if(!((typeof data187 == "number") && (isFinite(data187)))){const err364 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key55.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 = [err364];}else {vErrors.push(err364);}errors++;}}}else {const err365 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key54.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 = [err365];}else {vErrors.push(err365);}errors++;}}}else {const err366 = {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 = [err366];}else {vErrors.push(err366);}errors++;}}if(data179.components !== undefined){let data188 = data179.components;if(data188 && typeof data188 == "object" && !Array.isArray(data188)){for(const key56 in data188){let data189 = data188[key56];if(Array.isArray(data189)){const len22 = data189.length;for(let i24=0; i24<len22; i24++){let data190 = data189[i24];if(typeof data190 === "string"){if(func2(data190) < 1){const err367 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err367];}else {vErrors.push(err367);}errors++;}}else {const err368 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,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 = [err368];}else {vErrors.push(err368);}errors++;}}}else {const err369 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key56.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 = [err369];}else {vErrors.push(err369);}errors++;}}}else {const err370 = {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 = [err370];}else {vErrors.push(err370);}errors++;}}if(data179.baseUrl !== undefined){let data191 = data179.baseUrl;if((typeof data191 !== "string") && (data191 !== null)){const err371 = {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 = [err371];}else {vErrors.push(err371);}errors++;}const _errs496 = errors;const _errs497 = errors;if(errors === _errs497){if(typeof data191 === "string"){if(!pattern0.test(data191)){const err372 = {};if(vErrors === null){vErrors = [err372];}else {vErrors.push(err372);}errors++;}}else {const err373 = {};if(vErrors === null){vErrors = [err373];}else {vErrors.push(err373);}errors++;}}var valid130 = _errs497 === errors;if(valid130){const err374 = {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 = [err374];}else {vErrors.push(err374);}errors++;}else {errors = _errs496;if(vErrors !== null){if(_errs496){vErrors.length = _errs496;}else {vErrors = null;}}}if(typeof data191 === "string"){if(func2(data191) < 1){const err375 = {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 = [err375];}else {vErrors.push(err375);}errors++;}}}if(data179.routes !== undefined){let data192 = data179.routes;if(Array.isArray(data192)){const len23 = data192.length;for(let i25=0; i25<len23; i25++){let data193 = data192[i25];if(data193 && typeof data193 == "object" && !Array.isArray(data193)){if(data193.path === undefined){const err376 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25,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 = [err376];}else {vErrors.push(err376);}errors++;}for(const key57 in data193){if(!((key57 === "path") || (key57 === "formFactor"))){const err377 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err377];}else {vErrors.push(err377);}errors++;}}if(data193.path !== undefined){let data194 = data193.path;if(typeof data194 === "string"){if(func2(data194) < 1){const err378 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err378];}else {vErrors.push(err378);}errors++;}}else {const err379 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err379];}else {vErrors.push(err379);}errors++;}}if(data193.formFactor !== undefined){let data195 = data193.formFactor;if(typeof data195 !== "string"){const err380 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err380];}else {vErrors.push(err380);}errors++;}if(!((data195 === "mobile") || (data195 === "desktop"))){const err381 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25+"/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 = [err381];}else {vErrors.push(err381);}errors++;}}}else {const err382 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i25,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 = [err382];}else {vErrors.push(err382);}errors++;}}}else {const err383 = {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 = [err383];}else {vErrors.push(err383);}errors++;}}}else {const err384 = {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 = [err384];}else {vErrors.push(err384);}errors++;}}if(data85["bundle-size"] !== undefined){let data196 = data85["bundle-size"];if(data196 && typeof data196 == "object" && !Array.isArray(data196)){for(const key58 in data196){if(!((((((key58 === "enabled") || (key58 === "baselinePath")) || (key58 === "tolerance")) || (key58 === "floors")) || (key58 === "components")) || (key58 === "bundles"))){const err385 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key58},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err385];}else {vErrors.push(err385);}errors++;}}if(data196.enabled !== undefined){if(typeof data196.enabled !== "boolean"){const err386 = {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 = [err386];}else {vErrors.push(err386);}errors++;}}if(data196.baselinePath !== undefined){let data198 = data196.baselinePath;const _errs515 = errors;const _errs516 = errors;if(typeof data198 === "string"){if(!pattern0.test(data198)){const err387 = {};if(vErrors === null){vErrors = [err387];}else {vErrors.push(err387);}errors++;}}var valid135 = _errs516 === errors;if(valid135){const err388 = {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 = [err388];}else {vErrors.push(err388);}errors++;}else {errors = _errs515;if(vErrors !== null){if(_errs515){vErrors.length = _errs515;}else {vErrors = null;}}}if(typeof data198 === "string"){if(func2(data198) < 1){const err389 = {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 = [err389];}else {vErrors.push(err389);}errors++;}}else {const err390 = {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 = [err390];}else {vErrors.push(err390);}errors++;}}if(data196.tolerance !== undefined){let data199 = data196.tolerance;if(data199 && typeof data199 == "object" && !Array.isArray(data199)){if(data199.kind === undefined){const err391 = {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 = [err391];}else {vErrors.push(err391);}errors++;}if(data199.value === undefined){const err392 = {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 = [err392];}else {vErrors.push(err392);}errors++;}for(const key59 in data199){if(!((key59 === "kind") || (key59 === "value"))){const err393 = {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: key59},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err393];}else {vErrors.push(err393);}errors++;}}if(data199.kind !== undefined){let data200 = data199.kind;if(typeof data200 !== "string"){const err394 = {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 = [err394];}else {vErrors.push(err394);}errors++;}if(!((data200 === "absolute") || (data200 === "percent"))){const err395 = {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 = [err395];}else {vErrors.push(err395);}errors++;}}if(data199.value !== undefined){let data201 = data199.value;if((typeof data201 == "number") && (isFinite(data201))){if(data201 < 0 || isNaN(data201)){const err396 = {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 = [err396];}else {vErrors.push(err396);}errors++;}}else {const err397 = {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 = [err397];}else {vErrors.push(err397);}errors++;}}}else {const err398 = {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 = [err398];}else {vErrors.push(err398);}errors++;}}if(data196.floors !== undefined){let data202 = data196.floors;if(data202 && typeof data202 == "object" && !Array.isArray(data202)){for(const key60 in data202){let data203 = data202[key60];if(data203 && typeof data203 == "object" && !Array.isArray(data203)){for(const key61 in data203){let data204 = data203[key61];if(!((typeof data204 == "number") && (isFinite(data204)))){const err399 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key60.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key61.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 = [err399];}else {vErrors.push(err399);}errors++;}}}else {const err400 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key60.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 = [err400];}else {vErrors.push(err400);}errors++;}}}else {const err401 = {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 = [err401];}else {vErrors.push(err401);}errors++;}}if(data196.components !== undefined){let data205 = data196.components;if(data205 && typeof data205 == "object" && !Array.isArray(data205)){for(const key62 in data205){let data206 = data205[key62];if(Array.isArray(data206)){const len24 = data206.length;for(let i26=0; i26<len24; i26++){let data207 = data206[i26];if(typeof data207 === "string"){if(func2(data207) < 1){const err402 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key62.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i26,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 = [err402];}else {vErrors.push(err402);}errors++;}}else {const err403 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key62.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i26,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 = [err403];}else {vErrors.push(err403);}errors++;}}}else {const err404 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key62.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 = [err404];}else {vErrors.push(err404);}errors++;}}}else {const err405 = {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 = [err405];}else {vErrors.push(err405);}errors++;}}if(data196.bundles !== undefined){let data208 = data196.bundles;if(Array.isArray(data208)){const len25 = data208.length;for(let i27=0; i27<len25; i27++){let data209 = data208[i27];if(data209 && typeof data209 == "object" && !Array.isArray(data209)){if(data209.name === undefined){const err406 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err406];}else {vErrors.push(err406);}errors++;}if(data209.path === undefined){const err407 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err407];}else {vErrors.push(err407);}errors++;}if(data209.limit === undefined){const err408 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err408];}else {vErrors.push(err408);}errors++;}for(const key63 in data209){if(!(((key63 === "name") || (key63 === "path")) || (key63 === "limit"))){const err409 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err409];}else {vErrors.push(err409);}errors++;}}if(data209.name !== undefined){let data210 = data209.name;if(typeof data210 === "string"){if(func2(data210) < 1){const err410 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err410];}else {vErrors.push(err410);}errors++;}}else {const err411 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err411];}else {vErrors.push(err411);}errors++;}}if(data209.path !== undefined){let data211 = data209.path;if(typeof data211 === "string"){if(func2(data211) < 1){const err412 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err412];}else {vErrors.push(err412);}errors++;}}else {const err413 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err413];}else {vErrors.push(err413);}errors++;}}if(data209.limit !== undefined){let data212 = data209.limit;if(typeof data212 === "string"){if(func2(data212) < 1){const err414 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err414];}else {vErrors.push(err414);}errors++;}}else {const err415 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27+"/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 = [err415];}else {vErrors.push(err415);}errors++;}}}else {const err416 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i27,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 = [err416];}else {vErrors.push(err416);}errors++;}}}else {const err417 = {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 = [err417];}else {vErrors.push(err417);}errors++;}}}else {const err418 = {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 = [err418];}else {vErrors.push(err418);}errors++;}}if(data85.duplication !== undefined){let data213 = data85.duplication;if(data213 && typeof data213 == "object" && !Array.isArray(data213)){for(const key64 in data213){if(!((((((((key64 === "enabled") || (key64 === "baselinePath")) || (key64 === "tolerance")) || (key64 === "floors")) || (key64 === "components")) || (key64 === "targetDirs")) || (key64 === "refreshTimeoutMs")) || (key64 === "ignoreGlobs"))){const err419 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key64},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err419];}else {vErrors.push(err419);}errors++;}}if(data213.enabled !== undefined){if(typeof data213.enabled !== "boolean"){const err420 = {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 = [err420];}else {vErrors.push(err420);}errors++;}}if(data213.baselinePath !== undefined){let data215 = data213.baselinePath;const _errs557 = errors;const _errs558 = errors;if(typeof data215 === "string"){if(!pattern0.test(data215)){const err421 = {};if(vErrors === null){vErrors = [err421];}else {vErrors.push(err421);}errors++;}}var valid146 = _errs558 === errors;if(valid146){const err422 = {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 = [err422];}else {vErrors.push(err422);}errors++;}else {errors = _errs557;if(vErrors !== null){if(_errs557){vErrors.length = _errs557;}else {vErrors = null;}}}if(typeof data215 === "string"){if(func2(data215) < 1){const err423 = {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 = [err423];}else {vErrors.push(err423);}errors++;}}else {const err424 = {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 = [err424];}else {vErrors.push(err424);}errors++;}}if(data213.tolerance !== undefined){let data216 = data213.tolerance;if(data216 && typeof data216 == "object" && !Array.isArray(data216)){if(data216.kind === undefined){const err425 = {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 = [err425];}else {vErrors.push(err425);}errors++;}if(data216.value === undefined){const err426 = {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 = [err426];}else {vErrors.push(err426);}errors++;}for(const key65 in data216){if(!((key65 === "kind") || (key65 === "value"))){const err427 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key65},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err427];}else {vErrors.push(err427);}errors++;}}if(data216.kind !== undefined){let data217 = data216.kind;if(typeof data217 !== "string"){const err428 = {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 = [err428];}else {vErrors.push(err428);}errors++;}if(!((data217 === "absolute") || (data217 === "percent"))){const err429 = {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 = [err429];}else {vErrors.push(err429);}errors++;}}if(data216.value !== undefined){let data218 = data216.value;if((typeof data218 == "number") && (isFinite(data218))){if(data218 < 0 || isNaN(data218)){const err430 = {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 = [err430];}else {vErrors.push(err430);}errors++;}}else {const err431 = {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 = [err431];}else {vErrors.push(err431);}errors++;}}}else {const err432 = {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 = [err432];}else {vErrors.push(err432);}errors++;}}if(data213.floors !== undefined){let data219 = data213.floors;if(data219 && typeof data219 == "object" && !Array.isArray(data219)){for(const key66 in data219){let data220 = data219[key66];if(data220 && typeof data220 == "object" && !Array.isArray(data220)){for(const key67 in data220){let data221 = data220[key67];if(!((typeof data221 == "number") && (isFinite(data221)))){const err433 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key66.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key67.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 = [err433];}else {vErrors.push(err433);}errors++;}}}else {const err434 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key66.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 = [err434];}else {vErrors.push(err434);}errors++;}}}else {const err435 = {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 = [err435];}else {vErrors.push(err435);}errors++;}}if(data213.components !== undefined){let data222 = data213.components;if(data222 && typeof data222 == "object" && !Array.isArray(data222)){for(const key68 in data222){let data223 = data222[key68];if(Array.isArray(data223)){const len26 = data223.length;for(let i28=0; i28<len26; i28++){let data224 = data223[i28];if(typeof data224 === "string"){if(func2(data224) < 1){const err436 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i28,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 = [err436];}else {vErrors.push(err436);}errors++;}}else {const err437 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key68.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i28,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 = [err437];}else {vErrors.push(err437);}errors++;}}}else {const err438 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key68.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 = [err438];}else {vErrors.push(err438);}errors++;}}}else {const err439 = {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 = [err439];}else {vErrors.push(err439);}errors++;}}if(data213.targetDirs !== undefined){let data225 = data213.targetDirs;const _errs582 = errors;let valid153 = false;let passing2 = null;const _errs583 = errors;if(Array.isArray(data225)){const len27 = data225.length;for(let i29=0; i29<len27; i29++){if(typeof data225[i29] !== "string"){const err440 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i29,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 = [err440];}else {vErrors.push(err440);}errors++;}}}else {const err441 = {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 = [err441];}else {vErrors.push(err441);}errors++;}var _valid3 = _errs583 === errors;if(_valid3){valid153 = true;passing2 = 0;}const _errs587 = errors;if(data225 && typeof data225 == "object" && !Array.isArray(data225)){for(const key69 in data225){if(!((key69 === "append") || (key69 === "prepend"))){const err442 = {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: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err442];}else {vErrors.push(err442);}errors++;}}if(data225.append !== undefined){let data227 = data225.append;if(Array.isArray(data227)){const len28 = data227.length;for(let i30=0; i30<len28; i30++){if(typeof data227[i30] !== "string"){const err443 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i30,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 = [err443];}else {vErrors.push(err443);}errors++;}}}else {const err444 = {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 = [err444];}else {vErrors.push(err444);}errors++;}}if(data225.prepend !== undefined){let data229 = data225.prepend;if(Array.isArray(data229)){const len29 = data229.length;for(let i31=0; i31<len29; i31++){if(typeof data229[i31] !== "string"){const err445 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i31,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 = [err445];}else {vErrors.push(err445);}errors++;}}}else {const err446 = {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 = [err446];}else {vErrors.push(err446);}errors++;}}}else {const err447 = {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 = [err447];}else {vErrors.push(err447);}errors++;}var _valid3 = _errs587 === errors;if(_valid3 && valid153){valid153 = false;passing2 = [passing2, 1];}else {if(_valid3){valid153 = true;passing2 = 1;}}if(!valid153){const err448 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err448];}else {vErrors.push(err448);}errors++;}else {errors = _errs582;if(vErrors !== null){if(_errs582){vErrors.length = _errs582;}else {vErrors = null;}}}}if(data213.refreshTimeoutMs !== undefined){let data231 = data213.refreshTimeoutMs;if(!(((typeof data231 == "number") && (!(data231 % 1) && !isNaN(data231))) && (isFinite(data231)))){const err449 = {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 = [err449];}else {vErrors.push(err449);}errors++;}if((typeof data231 == "number") && (isFinite(data231))){if(data231 < 1 || isNaN(data231)){const err450 = {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 = [err450];}else {vErrors.push(err450);}errors++;}}}if(data213.ignoreGlobs !== undefined){let data232 = data213.ignoreGlobs;if(Array.isArray(data232)){const len30 = data232.length;for(let i32=0; i32<len30; i32++){let data233 = data232[i32];if(typeof data233 === "string"){if(func2(data233) < 1){const err451 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i32,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 = [err451];}else {vErrors.push(err451);}errors++;}}else {const err452 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i32,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 = [err452];}else {vErrors.push(err452);}errors++;}}}else {const err453 = {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 = [err453];}else {vErrors.push(err453);}errors++;}}}else {const err454 = {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 = [err454];}else {vErrors.push(err454);}errors++;}}}else {const err455 = {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 = [err455];}else {vErrors.push(err455);}errors++;}}if(data81.formatAutofix !== undefined){let data234 = data81.formatAutofix;if(data234 && typeof data234 == "object" && !Array.isArray(data234)){for(const key70 in data234){if(!(key70 === "timeoutMs")){const err456 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key70},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err456];}else {vErrors.push(err456);}errors++;}}if(data234.timeoutMs !== undefined){let data235 = data234.timeoutMs;if(!(((typeof data235 == "number") && (!(data235 % 1) && !isNaN(data235))) && (isFinite(data235)))){const err457 = {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 = [err457];}else {vErrors.push(err457);}errors++;}if((typeof data235 == "number") && (isFinite(data235))){if(data235 < 1 || isNaN(data235)){const err458 = {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 = [err458];}else {vErrors.push(err458);}errors++;}}}}else {const err459 = {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 = [err459];}else {vErrors.push(err459);}errors++;}}if(data81.codingGuardrails !== undefined){let data236 = data81.codingGuardrails;if(data236 && typeof data236 == "object" && !Array.isArray(data236)){for(const key71 in data236){if(!((key71 === "cyclomaticFlag") || (key71 === "requireSiblingTest"))){const err460 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key71},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err460];}else {vErrors.push(err460);}errors++;}}if(data236.cyclomaticFlag !== undefined){let data237 = data236.cyclomaticFlag;if(!(((typeof data237 == "number") && (!(data237 % 1) && !isNaN(data237))) && (isFinite(data237)))){const err461 = {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 = [err461];}else {vErrors.push(err461);}errors++;}if((typeof data237 == "number") && (isFinite(data237))){if(data237 < 1 || isNaN(data237)){const err462 = {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 = [err462];}else {vErrors.push(err462);}errors++;}}}if(data236.requireSiblingTest !== undefined){if(typeof data236.requireSiblingTest !== "boolean"){const err463 = {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 = [err463];}else {vErrors.push(err463);}errors++;}}}else {const err464 = {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 = [err464];}else {vErrors.push(err464);}errors++;}}if(data81.autoRefresh !== undefined){let data239 = data81.autoRefresh;if(data239 && typeof data239 == "object" && !Array.isArray(data239)){for(const key72 in data239){if(!(((key72 === "enabled") || (key72 === "crapJumpCap")) || (key72 === "scope"))){const err465 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key72},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err465];}else {vErrors.push(err465);}errors++;}}if(data239.enabled !== undefined){if(typeof data239.enabled !== "boolean"){const err466 = {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 = [err466];}else {vErrors.push(err466);}errors++;}}if(data239.crapJumpCap !== undefined){let data241 = data239.crapJumpCap;if((typeof data241 == "number") && (isFinite(data241))){if(data241 < 0 || isNaN(data241)){const err467 = {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 = [err467];}else {vErrors.push(err467);}errors++;}}else {const err468 = {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 = [err468];}else {vErrors.push(err468);}errors++;}}if(data239.scope !== undefined){let data242 = data239.scope;if(typeof data242 !== "string"){const err469 = {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 = [err469];}else {vErrors.push(err469);}errors++;}if(!((data242 === "diff") || (data242 === "full"))){const err470 = {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 = [err470];}else {vErrors.push(err470);}errors++;}}}else {const err471 = {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 = [err471];}else {vErrors.push(err471);}errors++;}}if(data81.baselineEpsilon !== undefined){let data243 = data81.baselineEpsilon;if(data243 && typeof data243 == "object" && !Array.isArray(data243)){for(const key73 in data243){if(!((((((((key73 === "maintainability") || (key73 === "crap")) || (key73 === "coverage")) || (key73 === "mutation")) || (key73 === "lint")) || (key73 === "lighthouse")) || (key73 === "bundle-size")) || (key73 === "duplication"))){const err472 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key73},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err472];}else {vErrors.push(err472);}errors++;}}if(data243.maintainability !== undefined){let data244 = data243.maintainability;if((typeof data244 == "number") && (isFinite(data244))){if(data244 < 0 || isNaN(data244)){const err473 = {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 = [err473];}else {vErrors.push(err473);}errors++;}}else {const err474 = {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 = [err474];}else {vErrors.push(err474);}errors++;}}if(data243.crap !== undefined){let data245 = data243.crap;if((typeof data245 == "number") && (isFinite(data245))){if(data245 < 0 || isNaN(data245)){const err475 = {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 = [err475];}else {vErrors.push(err475);}errors++;}}else {const err476 = {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 = [err476];}else {vErrors.push(err476);}errors++;}}if(data243.coverage !== undefined){let data246 = data243.coverage;if((typeof data246 == "number") && (isFinite(data246))){if(data246 < 0 || isNaN(data246)){const err477 = {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 = [err477];}else {vErrors.push(err477);}errors++;}}else {const err478 = {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 = [err478];}else {vErrors.push(err478);}errors++;}}if(data243.mutation !== undefined){let data247 = data243.mutation;if((typeof data247 == "number") && (isFinite(data247))){if(data247 < 0 || isNaN(data247)){const err479 = {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 = [err479];}else {vErrors.push(err479);}errors++;}}else {const err480 = {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 = [err480];}else {vErrors.push(err480);}errors++;}}if(data243.lint !== undefined){let data248 = data243.lint;if((typeof data248 == "number") && (isFinite(data248))){if(data248 < 0 || isNaN(data248)){const err481 = {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 = [err481];}else {vErrors.push(err481);}errors++;}}else {const err482 = {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 = [err482];}else {vErrors.push(err482);}errors++;}}if(data243.lighthouse !== undefined){let data249 = data243.lighthouse;if((typeof data249 == "number") && (isFinite(data249))){if(data249 < 0 || isNaN(data249)){const err483 = {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 = [err483];}else {vErrors.push(err483);}errors++;}}else {const err484 = {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 = [err484];}else {vErrors.push(err484);}errors++;}}if(data243["bundle-size"] !== undefined){let data250 = data243["bundle-size"];if((typeof data250 == "number") && (isFinite(data250))){if(data250 < 0 || isNaN(data250)){const err485 = {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 = [err485];}else {vErrors.push(err485);}errors++;}}else {const err486 = {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 = [err486];}else {vErrors.push(err486);}errors++;}}if(data243.duplication !== undefined){let data251 = data243.duplication;if((typeof data251 == "number") && (isFinite(data251))){if(data251 < 0 || isNaN(data251)){const err487 = {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 = [err487];}else {vErrors.push(err487);}errors++;}}else {const err488 = {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 = [err488];}else {vErrors.push(err488);}errors++;}}}else {const err489 = {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 = [err489];}else {vErrors.push(err489);}errors++;}}if(data81.requireBaselines !== undefined){if(typeof data81.requireBaselines !== "boolean"){const err490 = {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 = [err490];}else {vErrors.push(err490);}errors++;}}if(data81.navigability !== undefined){let data253 = data81.navigability;if(data253 && typeof data253 == "object" && !Array.isArray(data253)){for(const key74 in data253){if(!(((key74 === "routeGlobs") || (key74 === "navRegistry")) || (key74 === "journeySuite"))){const err491 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err491];}else {vErrors.push(err491);}errors++;}}if(data253.routeGlobs !== undefined){let data254 = data253.routeGlobs;if(Array.isArray(data254)){const len31 = data254.length;for(let i33=0; i33<len31; i33++){if(typeof data254[i33] !== "string"){const err492 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err492];}else {vErrors.push(err492);}errors++;}}}else {const err493 = {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 = [err493];}else {vErrors.push(err493);}errors++;}}if(data253.navRegistry !== undefined){let data256 = data253.navRegistry;if(Array.isArray(data256)){const len32 = data256.length;for(let i34=0; i34<len32; i34++){if(typeof data256[i34] !== "string"){const err494 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i34,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err494];}else {vErrors.push(err494);}errors++;}}}else {const err495 = {instancePath:instancePath+"/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 = [err495];}else {vErrors.push(err495);}errors++;}}if(data253.journeySuite !== undefined){if(typeof data253.journeySuite !== "string"){const err496 = {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 = [err496];}else {vErrors.push(err496);}errors++;}}}else {const err497 = {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 = [err497];}else {vErrors.push(err497);}errors++;}}}else {const err498 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err498];}else {vErrors.push(err498);}errors++;}}if(data52.mergeWatch !== undefined){let data259 = data52.mergeWatch;if(data259 && typeof data259 == "object" && !Array.isArray(data259)){for(const key75 in data259){if(!(((((key75 === "mode") || (key75 === "intervalSeconds")) || (key75 === "maxWaitSeconds")) || (key75 === "maxBudgetSeconds")) || (key75 === "updateAttempts"))){const err499 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err499];}else {vErrors.push(err499);}errors++;}}if(data259.mode !== undefined){let data260 = data259.mode;if(typeof data260 !== "string"){const err500 = {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 = [err500];}else {vErrors.push(err500);}errors++;}if(!((data260 === "sync") || (data260 === "async"))){const err501 = {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 = [err501];}else {vErrors.push(err501);}errors++;}}if(data259.intervalSeconds !== undefined){let data261 = data259.intervalSeconds;if(!(((typeof data261 == "number") && (!(data261 % 1) && !isNaN(data261))) && (isFinite(data261)))){const err502 = {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 = [err502];}else {vErrors.push(err502);}errors++;}if((typeof data261 == "number") && (isFinite(data261))){if(data261 < 1 || isNaN(data261)){const err503 = {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 = [err503];}else {vErrors.push(err503);}errors++;}}}if(data259.maxWaitSeconds !== undefined){let data262 = data259.maxWaitSeconds;if(!(((typeof data262 == "number") && (!(data262 % 1) && !isNaN(data262))) && (isFinite(data262)))){const err504 = {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 = [err504];}else {vErrors.push(err504);}errors++;}if((typeof data262 == "number") && (isFinite(data262))){if(data262 < 1 || isNaN(data262)){const err505 = {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 = [err505];}else {vErrors.push(err505);}errors++;}}}if(data259.maxBudgetSeconds !== undefined){let data263 = data259.maxBudgetSeconds;if(!(((typeof data263 == "number") && (!(data263 % 1) && !isNaN(data263))) && (isFinite(data263)))){const err506 = {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 = [err506];}else {vErrors.push(err506);}errors++;}if((typeof data263 == "number") && (isFinite(data263))){if(data263 < 1 || isNaN(data263)){const err507 = {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 = [err507];}else {vErrors.push(err507);}errors++;}}}if(data259.updateAttempts !== undefined){let data264 = data259.updateAttempts;if(!(((typeof data264 == "number") && (!(data264 % 1) && !isNaN(data264))) && (isFinite(data264)))){const err508 = {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 = [err508];}else {vErrors.push(err508);}errors++;}if((typeof data264 == "number") && (isFinite(data264))){if(data264 < 0 || isNaN(data264)){const err509 = {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 = [err509];}else {vErrors.push(err509);}errors++;}}}}else {const err510 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err510];}else {vErrors.push(err510);}errors++;}}if(data52.codeReview !== undefined){let data265 = data52.codeReview;if(data265 && typeof data265 == "object" && !Array.isArray(data265)){for(const key76 in data265){if(!((((key76 === "providers") || (key76 === "providerConfig")) || (key76 === "maxFixAttempts")) || (key76 === "autoFixSeverity"))){const err511 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key76},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err511];}else {vErrors.push(err511);}errors++;}}if(data265.providers !== undefined){let data266 = data265.providers;if(Array.isArray(data266)){const len33 = data266.length;for(let i35=0; i35<len33; i35++){let data267 = data266[i35];if(data267 && typeof data267 == "object" && !Array.isArray(data267)){if(data267.name === undefined){const err512 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err512];}else {vErrors.push(err512);}errors++;}for(const key77 in data267){if(!(((((key77 === "name") || (key77 === "scopes")) || (key77 === "optional")) || (key77 === "manualPrompt")) || (key77 === "when"))){const err513 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err513];}else {vErrors.push(err513);}errors++;}}if(data267.name !== undefined){let data268 = data267.name;if(typeof data268 !== "string"){const err514 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err514];}else {vErrors.push(err514);}errors++;}if(!((((data268 === "native") || (data268 === "codex")) || (data268 === "security-review")) || (data268 === "ultrareview"))){const err515 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err515];}else {vErrors.push(err515);}errors++;}}if(data267.scopes !== undefined){let data269 = data267.scopes;if(Array.isArray(data269)){const len34 = data269.length;for(let i36=0; i36<len34; i36++){let data270 = data269[i36];if(typeof data270 !== "string"){const err516 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/scopes/" + i36,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 = [err516];}else {vErrors.push(err516);}errors++;}if(!((data270 === "story") || (data270 === "epic"))){const err517 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/scopes/" + i36,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 = [err517];}else {vErrors.push(err517);}errors++;}}}else {const err518 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err518];}else {vErrors.push(err518);}errors++;}}if(data267.optional !== undefined){if(typeof data267.optional !== "boolean"){const err519 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err519];}else {vErrors.push(err519);}errors++;}}if(data267.manualPrompt !== undefined){if(typeof data267.manualPrompt !== "boolean"){const err520 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err520];}else {vErrors.push(err520);}errors++;}}if(data267.when !== undefined){let data273 = data267.when;if(data273 && typeof data273 == "object" && !Array.isArray(data273)){for(const key78 in data273){if(!((key78 === "label") || (key78 === "labelAny"))){const err521 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key78},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err521];}else {vErrors.push(err521);}errors++;}}if(data273.label !== undefined){let data274 = data273.label;if(typeof data274 === "string"){if(func2(data274) < 1){const err522 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err522];}else {vErrors.push(err522);}errors++;}}else {const err523 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err523];}else {vErrors.push(err523);}errors++;}}if(data273.labelAny !== undefined){let data275 = data273.labelAny;if(Array.isArray(data275)){if(data275.length < 1){const err524 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err524];}else {vErrors.push(err524);}errors++;}const len35 = data275.length;for(let i37=0; i37<len35; i37++){let data276 = data275[i37];if(typeof data276 === "string"){if(func2(data276) < 1){const err525 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/when/labelAny/" + i37,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 = [err525];}else {vErrors.push(err525);}errors++;}}else {const err526 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/when/labelAny/" + i37,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 = [err526];}else {vErrors.push(err526);}errors++;}}}else {const err527 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err527];}else {vErrors.push(err527);}errors++;}}}else {const err528 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35+"/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 = [err528];}else {vErrors.push(err528);}errors++;}}}else {const err529 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i35,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err529];}else {vErrors.push(err529);}errors++;}}}else {const err530 = {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 = [err530];}else {vErrors.push(err530);}errors++;}}if(data265.providerConfig !== undefined){let data277 = data265.providerConfig;if(data277 && typeof data277 == "object" && !Array.isArray(data277)){}else {const err531 = {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 = [err531];}else {vErrors.push(err531);}errors++;}}if(data265.maxFixAttempts !== undefined){let data278 = data265.maxFixAttempts;if(!(((typeof data278 == "number") && (!(data278 % 1) && !isNaN(data278))) && (isFinite(data278)))){const err532 = {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 = [err532];}else {vErrors.push(err532);}errors++;}if((typeof data278 == "number") && (isFinite(data278))){if(data278 < 0 || isNaN(data278)){const err533 = {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 = [err533];}else {vErrors.push(err533);}errors++;}}}if(data265.autoFixSeverity !== undefined){let data279 = data265.autoFixSeverity;if(typeof data279 !== "string"){const err534 = {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 = [err534];}else {vErrors.push(err534);}errors++;}if(!((data279 === "high") || (data279 === "medium"))){const err535 = {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 = [err535];}else {vErrors.push(err535);}errors++;}}}else {const err536 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err536];}else {vErrors.push(err536);}errors++;}}if(data52.review !== undefined){let data280 = data52.review;if(data280 && typeof data280 == "object" && !Array.isArray(data280)){for(const key79 in data280){if(!(key79 === "lensDiffFloor")){const err537 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key79},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err537];}else {vErrors.push(err537);}errors++;}}if(data280.lensDiffFloor !== undefined){let data281 = data280.lensDiffFloor;if(!(((typeof data281 == "number") && (!(data281 % 1) && !isNaN(data281))) && (isFinite(data281)))){const err538 = {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 = [err538];}else {vErrors.push(err538);}errors++;}if((typeof data281 == "number") && (isFinite(data281))){if(data281 < 0 || isNaN(data281)){const err539 = {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 = [err539];}else {vErrors.push(err539);}errors++;}}}}else {const err540 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err540];}else {vErrors.push(err540);}errors++;}}if(data52.refactorStage !== undefined){let data282 = data52.refactorStage;if(data282 && typeof data282 == "object" && !Array.isArray(data282)){for(const key80 in data282){if(!(key80 === "enabled")){const err541 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key80},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err541];}else {vErrors.push(err541);}errors++;}}if(data282.enabled !== undefined){if(typeof data282.enabled !== "boolean"){const err542 = {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 = [err542];}else {vErrors.push(err542);}errors++;}}}else {const err543 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err543];}else {vErrors.push(err543);}errors++;}}if(data52.acceptanceEval !== undefined){let data284 = data52.acceptanceEval;if(data284 && typeof data284 == "object" && !Array.isArray(data284)){for(const key81 in data284){if(!(key81 === "maxRounds")){const err544 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key81},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err544];}else {vErrors.push(err544);}errors++;}}if(data284.maxRounds !== undefined){let data285 = data284.maxRounds;if(!(((typeof data285 == "number") && (!(data285 % 1) && !isNaN(data285))) && (isFinite(data285)))){const err545 = {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 = [err545];}else {vErrors.push(err545);}errors++;}if((typeof data285 == "number") && (isFinite(data285))){if(data285 < 0 || isNaN(data285)){const err546 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err546];}else {vErrors.push(err546);}errors++;}}}}else {const err547 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err547];}else {vErrors.push(err547);}errors++;}}if(data52.feedbackLoop !== undefined){let data286 = data52.feedbackLoop;if(data286 && typeof data286 == "object" && !Array.isArray(data286)){for(const key82 in data286){if(!((key82 === "retroProposals") || (key82 === "frictionWindowDays"))){const err548 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key82},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err548];}else {vErrors.push(err548);}errors++;}}if(data286.retroProposals !== undefined){if(typeof data286.retroProposals !== "boolean"){const err549 = {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 = [err549];}else {vErrors.push(err549);}errors++;}}if(data286.frictionWindowDays !== undefined){let data288 = data286.frictionWindowDays;if(!(((typeof data288 == "number") && (!(data288 % 1) && !isNaN(data288))) && (isFinite(data288)))){const err550 = {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 = [err550];}else {vErrors.push(err550);}errors++;}if((typeof data288 == "number") && (isFinite(data288))){if(data288 < 1 || isNaN(data288)){const err551 = {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 = [err551];}else {vErrors.push(err551);}errors++;}}}}else {const err552 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err552];}else {vErrors.push(err552);}errors++;}}if(data52.auditToStories !== undefined){let data289 = data52.auditToStories;if(data289 && typeof data289 == "object" && !Array.isArray(data289)){for(const key83 in data289){if(!((key83 === "severityFloor") || (key83 === "autoComment"))){const err553 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key83},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err553];}else {vErrors.push(err553);}errors++;}}if(data289.severityFloor !== undefined){let data290 = data289.severityFloor;if(typeof data290 !== "string"){const err554 = {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 = [err554];}else {vErrors.push(err554);}errors++;}if(!(((((data290 === "critical") || (data290 === "high")) || (data290 === "medium")) || (data290 === "low")) || (data290 === "all"))){const err555 = {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 = [err555];}else {vErrors.push(err555);}errors++;}}if(data289.autoComment !== undefined){if(typeof data289.autoComment !== "boolean"){const err556 = {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 = [err556];}else {vErrors.push(err556);}errors++;}}}else {const err557 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err557];}else {vErrors.push(err557);}errors++;}}if(data52.ci !== undefined){let data292 = data52.ci;if(data292 && typeof data292 == "object" && !Array.isArray(data292)){for(const key84 in data292){if(!(((((key84 === "watch") || (key84 === "autoMerge")) || (key84 === "blockOnAdvisoryFailure")) || (key84 === "advisoryAllowlist")) || (key84 === "rerunAdvisory"))){const err558 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key84},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err558];}else {vErrors.push(err558);}errors++;}}if(data292.watch !== undefined){let data293 = data292.watch;if(data293 && typeof data293 == "object" && !Array.isArray(data293)){for(const key85 in data293){if(!((((key85 === "pollIntervalMs") || (key85 === "maxPolls")) || (key85 === "maxResumes")) || (key85 === "attachWindowMs"))){const err559 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key85},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err559];}else {vErrors.push(err559);}errors++;}}if(data293.pollIntervalMs !== undefined){let data294 = data293.pollIntervalMs;if(!(((typeof data294 == "number") && (!(data294 % 1) && !isNaN(data294))) && (isFinite(data294)))){const err560 = {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 = [err560];}else {vErrors.push(err560);}errors++;}if((typeof data294 == "number") && (isFinite(data294))){if(data294 < 1 || isNaN(data294)){const err561 = {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 = [err561];}else {vErrors.push(err561);}errors++;}}}if(data293.maxPolls !== undefined){let data295 = data293.maxPolls;if(!(((typeof data295 == "number") && (!(data295 % 1) && !isNaN(data295))) && (isFinite(data295)))){const err562 = {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 = [err562];}else {vErrors.push(err562);}errors++;}if((typeof data295 == "number") && (isFinite(data295))){if(data295 < 1 || isNaN(data295)){const err563 = {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 = [err563];}else {vErrors.push(err563);}errors++;}}}if(data293.maxResumes !== undefined){let data296 = data293.maxResumes;if(!(((typeof data296 == "number") && (!(data296 % 1) && !isNaN(data296))) && (isFinite(data296)))){const err564 = {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 = [err564];}else {vErrors.push(err564);}errors++;}if((typeof data296 == "number") && (isFinite(data296))){if(data296 < 0 || isNaN(data296)){const err565 = {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 = [err565];}else {vErrors.push(err565);}errors++;}}}if(data293.attachWindowMs !== undefined){let data297 = data293.attachWindowMs;if(!(((typeof data297 == "number") && (!(data297 % 1) && !isNaN(data297))) && (isFinite(data297)))){const err566 = {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 = [err566];}else {vErrors.push(err566);}errors++;}if((typeof data297 == "number") && (isFinite(data297))){if(data297 < 1 || isNaN(data297)){const err567 = {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 = [err567];}else {vErrors.push(err567);}errors++;}}}}else {const err568 = {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 = [err568];}else {vErrors.push(err568);}errors++;}}if(data292.autoMerge !== undefined){let data298 = data292.autoMerge;if(typeof data298 !== "string"){const err569 = {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 = [err569];}else {vErrors.push(err569);}errors++;}if(!((data298 === "trust-ci") || (data298 === "strict"))){const err570 = {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 = [err570];}else {vErrors.push(err570);}errors++;}}if(data292.blockOnAdvisoryFailure !== undefined){if(typeof data292.blockOnAdvisoryFailure !== "boolean"){const err571 = {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 = [err571];}else {vErrors.push(err571);}errors++;}}if(data292.advisoryAllowlist !== undefined){let data300 = data292.advisoryAllowlist;if(Array.isArray(data300)){const len36 = data300.length;for(let i38=0; i38<len36; i38++){if(typeof data300[i38] !== "string"){const err572 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i38,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err572];}else {vErrors.push(err572);}errors++;}}}else {const err573 = {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 = [err573];}else {vErrors.push(err573);}errors++;}}if(data292.rerunAdvisory !== undefined){let data302 = data292.rerunAdvisory;if(!(((typeof data302 == "number") && (!(data302 % 1) && !isNaN(data302))) && (isFinite(data302)))){const err574 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err574];}else {vErrors.push(err574);}errors++;}if((typeof data302 == "number") && (isFinite(data302))){if(data302 < 0 || isNaN(data302)){const err575 = {instancePath:instancePath+"/delivery/ci/rerunAdvisory",schemaPath:"#/properties/delivery/properties/ci/properties/rerunAdvisory/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err575];}else {vErrors.push(err575);}errors++;}}}}else {const err576 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err576];}else {vErrors.push(err576);}errors++;}}if(data52.routing !== undefined){let data303 = data52.routing;if(data303 && typeof data303 == "object" && !Array.isArray(data303)){for(const key86 in data303){if(!(((key86 === "roleScopedAgents") || (key86 === "ceremonyProfile")) || (key86 === "closeAndLand"))){const err577 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key86},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err577];}else {vErrors.push(err577);}errors++;}}if(data303.roleScopedAgents !== undefined){if(typeof data303.roleScopedAgents !== "boolean"){const err578 = {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 = [err578];}else {vErrors.push(err578);}errors++;}}if(data303.ceremonyProfile !== undefined){let data305 = data303.ceremonyProfile;if(typeof data305 !== "string"){const err579 = {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 = [err579];}else {vErrors.push(err579);}errors++;}if(!(((data305 === "minimal") || (data305 === "standard")) || (data305 === "strict"))){const err580 = {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 = [err580];}else {vErrors.push(err580);}errors++;}}if(data303.closeAndLand !== undefined){if(typeof data303.closeAndLand !== "boolean"){const err581 = {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 = [err581];}else {vErrors.push(err581);}errors++;}}}else {const err582 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err582];}else {vErrors.push(err582);}errors++;}}}else {const err583 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err583];}else {vErrors.push(err583);}errors++;}}if(data.qa !== undefined){let data307 = data.qa;if(data307 && typeof data307 == "object" && !Array.isArray(data307)){for(const key87 in data307){if(!(((((((key87 === "featureRoot") || (key87 === "fixturesManifest")) || (key87 === "environments")) || (key87 === "personas")) || (key87 === "gherkinLint")) || (key87 === "consoleAllowlist")) || (key87 === "designTokens"))){const err584 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key87},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err584];}else {vErrors.push(err584);}errors++;}}if(data307.featureRoot !== undefined){let data308 = data307.featureRoot;const _errs773 = errors;const _errs774 = errors;if(typeof data308 === "string"){if(!pattern0.test(data308)){const err585 = {};if(vErrors === null){vErrors = [err585];}else {vErrors.push(err585);}errors++;}}var valid193 = _errs774 === errors;if(valid193){const err586 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err586];}else {vErrors.push(err586);}errors++;}else {errors = _errs773;if(vErrors !== null){if(_errs773){vErrors.length = _errs773;}else {vErrors = null;}}}if(typeof data308 === "string"){if(func2(data308) < 1){const err587 = {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 = [err587];}else {vErrors.push(err587);}errors++;}}else {const err588 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err588];}else {vErrors.push(err588);}errors++;}}if(data307.fixturesManifest !== undefined){let data309 = data307.fixturesManifest;const _errs777 = errors;const _errs778 = errors;if(typeof data309 === "string"){if(!pattern0.test(data309)){const err589 = {};if(vErrors === null){vErrors = [err589];}else {vErrors.push(err589);}errors++;}}var valid194 = _errs778 === errors;if(valid194){const err590 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err590];}else {vErrors.push(err590);}errors++;}else {errors = _errs777;if(vErrors !== null){if(_errs777){vErrors.length = _errs777;}else {vErrors = null;}}}if(typeof data309 === "string"){if(func2(data309) < 1){const err591 = {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 = [err591];}else {vErrors.push(err591);}errors++;}}else {const err592 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err592];}else {vErrors.push(err592);}errors++;}}if(data307.environments !== undefined){let data310 = data307.environments;if(data310 && typeof data310 == "object" && !Array.isArray(data310)){if(Object.keys(data310).length < 1){const err593 = {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 = [err593];}else {vErrors.push(err593);}errors++;}for(const key88 in data310){let data311 = data310[key88];if(data311 && typeof data311 == "object" && !Array.isArray(data311)){if(data311.baseUrl === undefined){const err594 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err594];}else {vErrors.push(err594);}errors++;}for(const key89 in data311){if(!(((key89 === "baseUrl") || (key89 === "signInSeam")) || (key89 === "allowWrites"))){const err595 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key89},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err595];}else {vErrors.push(err595);}errors++;}}if(data311.baseUrl !== undefined){let data312 = data311.baseUrl;const _errs787 = errors;const _errs788 = errors;if(typeof data312 === "string"){if(!pattern0.test(data312)){const err596 = {};if(vErrors === null){vErrors = [err596];}else {vErrors.push(err596);}errors++;}}var valid197 = _errs788 === errors;if(valid197){const err597 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err597];}else {vErrors.push(err597);}errors++;}else {errors = _errs787;if(vErrors !== null){if(_errs787){vErrors.length = _errs787;}else {vErrors = null;}}}if(typeof data312 === "string"){if(func2(data312) < 1){const err598 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err598];}else {vErrors.push(err598);}errors++;}}else {const err599 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err599];}else {vErrors.push(err599);}errors++;}}if(data311.signInSeam !== undefined){let data313 = data311.signInSeam;const _errs790 = errors;let valid198 = false;let passing3 = null;const _errs791 = errors;if(data313 && typeof data313 == "object" && !Array.isArray(data313)){if(data313.urlTemplate === undefined){const err600 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err600];}else {vErrors.push(err600);}errors++;}for(const key90 in data313){if(!(key90 === "urlTemplate")){const err601 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key90},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err601];}else {vErrors.push(err601);}errors++;}}if(data313.urlTemplate !== undefined){let data314 = data313.urlTemplate;const _errs796 = errors;const _errs797 = errors;if(typeof data314 === "string"){if(!pattern0.test(data314)){const err602 = {};if(vErrors === null){vErrors = [err602];}else {vErrors.push(err602);}errors++;}}var valid200 = _errs797 === errors;if(valid200){const err603 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err603];}else {vErrors.push(err603);}errors++;}else {errors = _errs796;if(vErrors !== null){if(_errs796){vErrors.length = _errs796;}else {vErrors = null;}}}if(typeof data314 === "string"){if(func2(data314) < 1){const err604 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err604];}else {vErrors.push(err604);}errors++;}}else {const err605 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err605];}else {vErrors.push(err605);}errors++;}}}else {const err606 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err606];}else {vErrors.push(err606);}errors++;}var _valid4 = _errs791 === errors;if(_valid4){valid198 = true;passing3 = 0;}const _errs798 = errors;if(data313 && typeof data313 == "object" && !Array.isArray(data313)){if(data313.skill === undefined){const err607 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err607];}else {vErrors.push(err607);}errors++;}for(const key91 in data313){if(!(key91 === "skill")){const err608 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key91},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err608];}else {vErrors.push(err608);}errors++;}}if(data313.skill !== undefined){let data315 = data313.skill;const _errs803 = errors;const _errs804 = errors;if(typeof data315 === "string"){if(!pattern0.test(data315)){const err609 = {};if(vErrors === null){vErrors = [err609];}else {vErrors.push(err609);}errors++;}}var valid202 = _errs804 === errors;if(valid202){const err610 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err610];}else {vErrors.push(err610);}errors++;}else {errors = _errs803;if(vErrors !== null){if(_errs803){vErrors.length = _errs803;}else {vErrors = null;}}}if(typeof data315 === "string"){if(func2(data315) < 1){const err611 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err611];}else {vErrors.push(err611);}errors++;}if(!pattern31.test(data315)){const err612 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam/skill",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/properties/skill/pattern",keyword:"pattern",params:{pattern: "^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"},message:"must match pattern \""+"^[a-z0-9][a-z0-9._-]*(?:\\/[a-z0-9][a-z0-9._-]*)+$"+"\""};if(vErrors === null){vErrors = [err612];}else {vErrors.push(err612);}errors++;}}else {const err613 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err613];}else {vErrors.push(err613);}errors++;}}}else {const err614 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err614];}else {vErrors.push(err614);}errors++;}var _valid4 = _errs798 === errors;if(_valid4 && valid198){valid198 = false;passing3 = [passing3, 1];}else {if(_valid4){valid198 = true;passing3 = 1;}}if(!valid198){const err615 = {instancePath:instancePath+"/qa/environments/" + key88.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err615];}else {vErrors.push(err615);}errors++;}else {errors = _errs790;if(vErrors !== null){if(_errs790){vErrors.length = _errs790;}else {vErrors = null;}}}}if(data311.allowWrites !== undefined){if(typeof data311.allowWrites !== "boolean"){const err616 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err616];}else {vErrors.push(err616);}errors++;}}}else {const err617 = {instancePath:instancePath+"/qa/environments/" + key88.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 = [err617];}else {vErrors.push(err617);}errors++;}}}else {const err618 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err618];}else {vErrors.push(err618);}errors++;}}if(data307.personas !== undefined){let data317 = data307.personas;const _errs808 = errors;let valid203 = false;let passing4 = null;const _errs809 = errors;if(Array.isArray(data317)){if(data317.length < 1){const err619 = {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 = [err619];}else {vErrors.push(err619);}errors++;}const len37 = data317.length;for(let i39=0; i39<len37; i39++){let data318 = data317[i39];const _errs813 = errors;const _errs814 = errors;if(typeof data318 === "string"){if(!pattern0.test(data318)){const err620 = {};if(vErrors === null){vErrors = [err620];}else {vErrors.push(err620);}errors++;}}var valid206 = _errs814 === errors;if(valid206){const err621 = {instancePath:instancePath+"/qa/personas/" + i39,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err621];}else {vErrors.push(err621);}errors++;}else {errors = _errs813;if(vErrors !== null){if(_errs813){vErrors.length = _errs813;}else {vErrors = null;}}}if(typeof data318 === "string"){if(func2(data318) < 1){const err622 = {instancePath:instancePath+"/qa/personas/" + i39,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 = [err622];}else {vErrors.push(err622);}errors++;}}else {const err623 = {instancePath:instancePath+"/qa/personas/" + i39,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err623];}else {vErrors.push(err623);}errors++;}}}else {const err624 = {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 = [err624];}else {vErrors.push(err624);}errors++;}var _valid5 = _errs809 === errors;if(_valid5){valid203 = true;passing4 = 0;}const _errs815 = errors;if(data317 && typeof data317 == "object" && !Array.isArray(data317)){if(Object.keys(data317).length < 1){const err625 = {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 = [err625];}else {vErrors.push(err625);}errors++;}for(const key92 in data317){let data319 = data317[key92];const _errs819 = errors;let valid208 = false;let passing5 = null;const _errs820 = errors;if(data319 && typeof data319 == "object" && !Array.isArray(data319)){if(data319.credentialRef === undefined){const err626 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err626];}else {vErrors.push(err626);}errors++;}for(const key93 in data319){if(!(key93 === "credentialRef")){const err627 = {instancePath:instancePath+"/qa/personas/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key93},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err627];}else {vErrors.push(err627);}errors++;}}if(data319.credentialRef !== undefined){let data320 = data319.credentialRef;const _errs825 = errors;const _errs826 = errors;if(typeof data320 === "string"){if(!pattern0.test(data320)){const err628 = {};if(vErrors === null){vErrors = [err628];}else {vErrors.push(err628);}errors++;}}var valid210 = _errs826 === errors;if(valid210){const err629 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err629];}else {vErrors.push(err629);}errors++;}else {errors = _errs825;if(vErrors !== null){if(_errs825){vErrors.length = _errs825;}else {vErrors = null;}}}if(typeof data320 === "string"){if(func2(data320) < 1){const err630 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err630];}else {vErrors.push(err630);}errors++;}}else {const err631 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err631];}else {vErrors.push(err631);}errors++;}}}else {const err632 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err632];}else {vErrors.push(err632);}errors++;}var _valid6 = _errs820 === errors;if(_valid6){valid208 = true;passing5 = 0;}const _errs827 = errors;if(data319 && typeof data319 == "object" && !Array.isArray(data319)){if(data319.signInSkill === undefined){const err633 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err633];}else {vErrors.push(err633);}errors++;}for(const key94 in data319){if(!(key94 === "signInSkill")){const err634 = {instancePath:instancePath+"/qa/personas/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key94},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err634];}else {vErrors.push(err634);}errors++;}}if(data319.signInSkill !== undefined){let data321 = data319.signInSkill;const _errs832 = errors;const _errs833 = errors;if(typeof data321 === "string"){if(!pattern0.test(data321)){const err635 = {};if(vErrors === null){vErrors = [err635];}else {vErrors.push(err635);}errors++;}}var valid212 = _errs833 === errors;if(valid212){const err636 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err636];}else {vErrors.push(err636);}errors++;}else {errors = _errs832;if(vErrors !== null){if(_errs832){vErrors.length = _errs832;}else {vErrors = null;}}}if(typeof data321 === "string"){if(func2(data321) < 1){const err637 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err637];}else {vErrors.push(err637);}errors++;}}else {const err638 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err638];}else {vErrors.push(err638);}errors++;}}}else {const err639 = {instancePath:instancePath+"/qa/personas/" + key92.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 = [err639];}else {vErrors.push(err639);}errors++;}var _valid6 = _errs827 === errors;if(_valid6 && valid208){valid208 = false;passing5 = [passing5, 1];}else {if(_valid6){valid208 = true;passing5 = 1;}}if(!valid208){const err640 = {instancePath:instancePath+"/qa/personas/" + key92.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err640];}else {vErrors.push(err640);}errors++;}else {errors = _errs819;if(vErrors !== null){if(_errs819){vErrors.length = _errs819;}else {vErrors = null;}}}}}else {const err641 = {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 = [err641];}else {vErrors.push(err641);}errors++;}var _valid5 = _errs815 === errors;if(_valid5 && valid203){valid203 = false;passing4 = [passing4, 1];}else {if(_valid5){valid203 = true;passing4 = 1;}}if(!valid203){const err642 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err642];}else {vErrors.push(err642);}errors++;}else {errors = _errs808;if(vErrors !== null){if(_errs808){vErrors.length = _errs808;}else {vErrors = null;}}}}if(data307.gherkinLint !== undefined){let data322 = data307.gherkinLint;if(data322 && typeof data322 == "object" && !Array.isArray(data322)){if(data322.scopes === undefined){const err643 = {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 = [err643];}else {vErrors.push(err643);}errors++;}for(const key95 in data322){if(!(((key95 === "scopes") || (key95 === "exemptionTags")) || (key95 === "stepWaivers"))){const err644 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key95},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err644];}else {vErrors.push(err644);}errors++;}}if(data322.scopes !== undefined){let data323 = data322.scopes;if(data323 && typeof data323 == "object" && !Array.isArray(data323)){if(Object.keys(data323).length < 1){const err645 = {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 = [err645];}else {vErrors.push(err645);}errors++;}for(const key96 in data323){let data324 = data323[key96];if(data324 && typeof data324 == "object" && !Array.isArray(data324)){if(data324.featureRoots === undefined){const err646 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err646];}else {vErrors.push(err646);}errors++;}if(data324.stepRoots === undefined){const err647 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err647];}else {vErrors.push(err647);}errors++;}for(const key97 in data324){if(!((key97 === "featureRoots") || (key97 === "stepRoots"))){const err648 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key97},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err648];}else {vErrors.push(err648);}errors++;}}if(data324.featureRoots !== undefined){let data325 = data324.featureRoots;if(Array.isArray(data325)){if(data325.length < 1){const err649 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err649];}else {vErrors.push(err649);}errors++;}const len38 = data325.length;for(let i40=0; i40<len38; i40++){let data326 = data325[i40];const _errs847 = errors;const _errs848 = errors;if(typeof data326 === "string"){if(!pattern0.test(data326)){const err650 = {};if(vErrors === null){vErrors = [err650];}else {vErrors.push(err650);}errors++;}}var valid218 = _errs848 === errors;if(valid218){const err651 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i40,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err651];}else {vErrors.push(err651);}errors++;}else {errors = _errs847;if(vErrors !== null){if(_errs847){vErrors.length = _errs847;}else {vErrors = null;}}}if(typeof data326 === "string"){if(func2(data326) < 1){const err652 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i40,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 = [err652];}else {vErrors.push(err652);}errors++;}}else {const err653 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i40,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 = [err653];}else {vErrors.push(err653);}errors++;}}}else {const err654 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err654];}else {vErrors.push(err654);}errors++;}}if(data324.stepRoots !== undefined){let data327 = data324.stepRoots;if(Array.isArray(data327)){if(data327.length < 1){const err655 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err655];}else {vErrors.push(err655);}errors++;}const len39 = data327.length;for(let i41=0; i41<len39; i41++){let data328 = data327[i41];const _errs853 = errors;const _errs854 = errors;if(typeof data328 === "string"){if(!pattern0.test(data328)){const err656 = {};if(vErrors === null){vErrors = [err656];}else {vErrors.push(err656);}errors++;}}var valid221 = _errs854 === errors;if(valid221){const err657 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i41,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err657];}else {vErrors.push(err657);}errors++;}else {errors = _errs853;if(vErrors !== null){if(_errs853){vErrors.length = _errs853;}else {vErrors = null;}}}if(typeof data328 === "string"){if(func2(data328) < 1){const err658 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i41,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 = [err658];}else {vErrors.push(err658);}errors++;}}else {const err659 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i41,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 = [err659];}else {vErrors.push(err659);}errors++;}}}else {const err660 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err660];}else {vErrors.push(err660);}errors++;}}}else {const err661 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key96.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 = [err661];}else {vErrors.push(err661);}errors++;}}}else {const err662 = {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 = [err662];}else {vErrors.push(err662);}errors++;}}if(data322.exemptionTags !== undefined){let data329 = data322.exemptionTags;if(Array.isArray(data329)){const len40 = data329.length;for(let i42=0; i42<len40; i42++){let data330 = data329[i42];const _errs859 = errors;const _errs860 = errors;if(typeof data330 === "string"){if(!pattern0.test(data330)){const err663 = {};if(vErrors === null){vErrors = [err663];}else {vErrors.push(err663);}errors++;}}var valid224 = _errs860 === errors;if(valid224){const err664 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i42,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err664];}else {vErrors.push(err664);}errors++;}else {errors = _errs859;if(vErrors !== null){if(_errs859){vErrors.length = _errs859;}else {vErrors = null;}}}if(typeof data330 === "string"){if(func2(data330) < 1){const err665 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i42,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 = [err665];}else {vErrors.push(err665);}errors++;}}else {const err666 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i42,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/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/gherkinLint/exemptionTags",schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err667];}else {vErrors.push(err667);}errors++;}}if(data322.stepWaivers !== undefined){let data331 = data322.stepWaivers;if(Array.isArray(data331)){const len41 = data331.length;for(let i43=0; i43<len41; i43++){let data332 = data331[i43];if(typeof data332 === "string"){if(func2(data332) < 1){const err668 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i43,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 = [err668];}else {vErrors.push(err668);}errors++;}}else {const err669 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i43,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err669];}else {vErrors.push(err669);}errors++;}}}else {const err670 = {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 = [err670];}else {vErrors.push(err670);}errors++;}}}else {const err671 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err671];}else {vErrors.push(err671);}errors++;}}if(data307.consoleAllowlist !== undefined){let data333 = data307.consoleAllowlist;if(Array.isArray(data333)){const len42 = data333.length;for(let i44=0; i44<len42; i44++){let data334 = data333[i44];const _errs869 = errors;const _errs870 = errors;if(typeof data334 === "string"){if(!pattern0.test(data334)){const err672 = {};if(vErrors === null){vErrors = [err672];}else {vErrors.push(err672);}errors++;}}var valid229 = _errs870 === errors;if(valid229){const err673 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i44,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err673];}else {vErrors.push(err673);}errors++;}else {errors = _errs869;if(vErrors !== null){if(_errs869){vErrors.length = _errs869;}else {vErrors = null;}}}if(typeof data334 === "string"){if(func2(data334) < 1){const err674 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i44,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err674];}else {vErrors.push(err674);}errors++;}}else {const err675 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i44,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err675];}else {vErrors.push(err675);}errors++;}}}else {const err676 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err676];}else {vErrors.push(err676);}errors++;}}if(data307.designTokens !== undefined){let data335 = data307.designTokens;const _errs873 = errors;const _errs874 = errors;if(typeof data335 === "string"){if(!pattern0.test(data335)){const err677 = {};if(vErrors === null){vErrors = [err677];}else {vErrors.push(err677);}errors++;}}var valid230 = _errs874 === errors;if(valid230){const err678 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err678];}else {vErrors.push(err678);}errors++;}else {errors = _errs873;if(vErrors !== null){if(_errs873){vErrors.length = _errs873;}else {vErrors = null;}}}if(typeof data335 === "string"){if(func2(data335) < 1){const err679 = {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 = [err679];}else {vErrors.push(err679);}errors++;}}else {const err680 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err680];}else {vErrors.push(err680);}errors++;}}}else {const err681 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err681];}else {vErrors.push(err681);}errors++;}}}else {const err682 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err682];}else {vErrors.push(err682);}errors++;}validate10.errors = vErrors;return errors === 0;}
|