mandrel 2.53.0 → 2.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/agents/story-worker.md +24 -23
- package/.agents/audit-checklists/accessibility.md +0 -3
- package/.agents/audit-checklists/mobile.md +0 -4
- package/.agents/docs/agentrc-reference.json +4 -2
- package/.agents/docs/configuration.md +2 -0
- package/.agents/schemas/agentrc.schema.json +15 -1
- package/.agents/schemas/lifecycle/merge.unlanded.schema.json +2 -1
- package/.agents/schemas/story-deliver-terminal.schema.json +1 -0
- package/.agents/scripts/audit-to-stories.js +158 -7
- package/.agents/scripts/check-audit-attribution.js +119 -62
- package/.agents/scripts/check-test-portability.js +512 -0
- package/.agents/scripts/coverage-capture.js +17 -10
- package/.agents/scripts/evidence-gate.js +31 -4
- package/.agents/scripts/generate-workflows-doc.js +65 -14
- package/.agents/scripts/git-cleanup.js +4 -0
- package/.agents/scripts/lib/ITicketingProvider.js +78 -0
- package/.agents/scripts/lib/audit-advisories.js +195 -0
- package/.agents/scripts/lib/audit-attribution.js +22 -0
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +68 -5
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +83 -0
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +60 -114
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +347 -0
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +169 -44
- package/.agents/scripts/lib/baselines/merge-envelopes.js +298 -32
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +180 -14
- package/.agents/scripts/lib/cli-args.js +26 -0
- package/.agents/scripts/lib/close-validation/gates.js +113 -7
- package/.agents/scripts/lib/close-validation/process.js +7 -3
- package/.agents/scripts/lib/close-validation/runner.js +62 -11
- package/.agents/scripts/lib/config/ci.js +28 -9
- package/.agents/scripts/lib/config-settings-schema-delivery.js +7 -0
- package/.agents/scripts/lib/config-settings-schema.js +19 -1
- package/.agents/scripts/lib/coverage-capture-fullscope.js +23 -11
- package/.agents/scripts/lib/coverage-capture-incremental.js +22 -16
- package/.agents/scripts/lib/coverage-capture-usage.js +5 -1
- package/.agents/scripts/lib/coverage-capture.js +77 -3
- package/.agents/scripts/lib/findings/route-finding.js +4 -2
- package/.agents/scripts/lib/full-suite-lock.js +232 -6
- package/.agents/scripts/lib/generated/agentrc-validator.js +1 -1
- package/.agents/scripts/lib/git/sync-from-base.js +130 -13
- package/.agents/scripts/lib/observability/source-classifier.js +1 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +10 -2
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +75 -15
- package/.agents/scripts/lib/orchestration/deliver-recover.js +82 -43
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +8 -4
- package/.agents/scripts/lib/orchestration/epic-candidates.js +9 -4
- package/.agents/scripts/lib/orchestration/epic-container.js +66 -4
- package/.agents/scripts/lib/orchestration/epic-rollup.js +241 -84
- package/.agents/scripts/lib/orchestration/file-assumptions.js +218 -16
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +93 -7
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +22 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +26 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +13 -2
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +35 -5
- package/.agents/scripts/lib/orchestration/merge-block-class.js +18 -3
- package/.agents/scripts/lib/orchestration/merge-poll.js +284 -40
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +49 -2
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +43 -7
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +24 -1
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +5 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +3 -0
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +119 -6
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +110 -0
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +130 -40
- package/.agents/scripts/lib/orchestration/resolve-stories.js +44 -1
- package/.agents/scripts/lib/orchestration/review-providers/native.js +31 -11
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +27 -24
- package/.agents/scripts/lib/orchestration/run-epilogue.js +59 -38
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +81 -0
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +40 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +10 -2
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +101 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +351 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +27 -6
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +117 -22
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +94 -12
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +6 -1
- package/.agents/scripts/lib/orchestration/ticket-validator.js +25 -14
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +70 -6
- package/.agents/scripts/lib/orchestration/verify-credit.js +37 -0
- package/.agents/scripts/lib/pinned-override-notes.js +41 -53
- package/.agents/scripts/lib/pinned-override-resolve.js +212 -0
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +18 -0
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +173 -9
- package/.agents/scripts/lib/skills/walk-skill-files.js +24 -7
- package/.agents/scripts/lib/test-temp.js +167 -30
- package/.agents/scripts/lib/validation-evidence.js +37 -0
- package/.agents/scripts/lib/wave-runner/footprint.js +167 -14
- package/.agents/scripts/lib/wave-runner/live-probe.js +7 -1
- package/.agents/scripts/lib/wave-runner/ready-set.js +1 -1
- package/.agents/scripts/merge-baseline.js +175 -21
- package/.agents/scripts/providers/github/errors.js +22 -1
- package/.agents/scripts/providers/github/issues.js +106 -1
- package/.agents/scripts/providers/github/sub-issue-add.js +18 -1
- package/.agents/scripts/providers/github.js +6 -0
- package/.agents/scripts/resolve-stories.js +44 -34
- package/.agents/scripts/single-story-close.js +5 -0
- package/.agents/scripts/stories-wave-tick.js +37 -13
- package/.agents/templates/docs/audit-sweep-runbook.md +41 -7
- package/.agents/workflows/audit-accessibility.md +16 -31
- package/.agents/workflows/audit-mobile.md +20 -37
- package/.agents/workflows/git-cleanup.md +17 -3
- package/.agents/workflows/helpers/audit-lens-core.md +45 -0
- package/.agents/workflows/helpers/deliver-digest.md +7 -6
- package/.agents/workflows/helpers/deliver-reference.md +40 -16
- package/.agents/workflows/helpers/deliver-story-reference.md +7 -4
- package/.agents/workflows/helpers/deliver-story.md +15 -12
- package/.agents/workflows/helpers/plan-reference.md +8 -1
- package/.agents/workflows/mandrel-plan.md +4 -7
- package/.agents/workflows/memory-consolidate.md +14 -9
- package/docs/CHANGELOG.md +34 -0
- package/lib/cli/registry.js +64 -21
- package/lib/cli/sync.js +27 -2
- package/package.json +7 -4
|
@@ -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},"branchProtection":{"type":"object","description":"Branch-protection stance applied to `project.baseBranch` by the GitHub bootstrap, and reproduced locally before every push.","properties":{"enforce":{"type":"boolean","description":"When true, the GitHub bootstrap writes the required-check ruleset. False leaves the remote stance alone.","default":true},"requiredChecks":{"type":"array","items":{"type":"object","description":"One required status check: the context name GitHub gates the merge on, plus the argv the framework runs locally to reproduce it.","required":["name","cmd"],"properties":{"name":{"type":"string","minLength":1,"description":"Required status-check context name as GitHub reports it."},"cmd":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"argv array (never a shell string) the local pre-push validation runs to reproduce the check."}},"additionalProperties":false},"description":"Checks that must pass before a Story PR merges. Each entry carries both the remote context name and the local argv.","default":[{"name":"lint","cmd":["npm","run","lint"]},{"name":"test","cmd":["npm","test"]},{"name":"baselines","cmd":["node",".agents/scripts/check-baselines.js"]}]}},"additionalProperties":false},"mergeMethods":{"type":"object","description":"Repository merge-method stance the GitHub bootstrap enforces. The framework ships squash-only with auto-merge on, which is what the one-PR-per-Story model needs for release-please to parse each landed subject.","properties":{"allow_squash_merge":{"type":"boolean","default":true},"allow_rebase_merge":{"type":"boolean","default":false},"allow_merge_commit":{"type":"boolean","default":false},"allow_auto_merge":{"type":"boolean","default":true},"delete_branch_on_merge":{"type":"boolean","default":true}},"additionalProperties":false},"notifications":{"type":"object","description":"Allowlist-gated notification channels. An event fires on a channel only when it is named in that channel's array.","properties":{"mentionOperator":{"type":"boolean","description":"When true, `github.operatorHandle` is @-mentioned in the comments the notifier posts.","default":false},"commentEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message"]},"uniqueItems":true,"description":"Events mirrored onto the Story issue as a comment. Deliberately narrower than `webhookEvents`: only Story-scoped events whose message reads as narrative an operator wants durably on the ticket belong here.","default":["state-transition","story-merged","operator-message"]},"webhookEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]},"uniqueItems":true,"description":"Events dispatched to the configured webhook. The vocabulary is the allowlist the webhook channel gates on; `merge.unlanded` and `merge.flip-failed` are allowlistable but reach the run ledger rather than `notify()` today.","default":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]}},"additionalProperties":false}},"additionalProperties":false},"planning":{"type":"object","description":"Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, the memory-hygiene advisory thresholds, and the cross-Story conflict-finding severity gates.","properties":{"riskHeuristics":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Prose heuristics the planner escalates a Story against. A plain array replaces the framework list; the `{ append, prepend }` extender form deep-merges with it.","default":["Destructive or irreversible data mutations (dropping tables, deleting rows without soft-delete or backup, truncating production state).","Modifications to shared security or auth infrastructure (IAM policies, auth middleware, session or token handling, secret rotation).","Changes to CI/CD, deployment pipelines, or release gating that could disable safety checks or ship unverified code to production.","Monorepo-wide AST or text replacements touching overlapping files in parallel (catastrophic merge-conflict risk across concurrent agents).","Schema migrations that rewrite existing rows or drop columns without a backfill or rollback plan."]},"complexityGate":{"type":"object","description":"Shape-derived ceremony-lite complexity routing. A lite claim is validated against the authored Story shape at persist and re-derived from the Story body at dispatch; conservative (full on any doubt). Never relaxes the Story-ticket / PR-to-main / repo-gates / security-baseline non-negotiables.","properties":{"enabled":{"type":"boolean","description":"Master switch. When false, lite routing is disabled everywhere: persist refuses lite claims and dispatch always takes the sub-agent path. Default true."},"maxArtifacts":{"type":"integer","minimum":0,"description":"Enumerated-artifact threshold reported by the plan-context complexity signals. An input signal for the planner verdict — carries no routing authority. Default 1."}},"additionalProperties":false},"memoryPool":{"type":"object","description":"Thresholds 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":{"staleAfterDays":{"type":"integer","minimum":1,"description":"Recommend a consolidation pass once the pool's stamp is older than this many days. Default 30.","default":30},"growthDelta":{"type":"integer","minimum":1,"description":"Recommend a consolidation pass once this many entries have been written since the last one. Measured against the entry count the last pass stamped, so a stamp predating that field leaves growth unmeasured and only the age threshold applies. Default 25.","default":25}},"additionalProperties":false},"failOnSharedEditors":{"type":"boolean","description":"When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).","default":false},"requireExplicitCrossStoryDeps":{"type":"boolean","description":"When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only).","default":false},"crossCuttingRegistries":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted.","default":["lib/orchestration/lifecycle/listeners/index.js","**/listeners/index.js","**/handlers/index.js"]},"failOnRegistryConflicts":{"type":"boolean","description":"When true, upgrade cross-cutting registry conflict findings to hard errors (default false).","default":false},"failOnLargeFanOut":{"type":"boolean","description":"When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory).","default":false},"largeFanOutThreshold":{"type":"integer","minimum":0,"description":"Call-site count above which a Story that deletes a module emits a fan-out-warning. Counts base-branch references to the deleted path basename. Soft by default; does not size or reject Stories. Default 10.","default":10},"navigation":{"type":"object","description":"Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"delivery":{"type":"object","description":"Everything `/mandrel-deliver` and `single-story-close` consume: execution timeouts, worktree isolation, runner concurrency, docs freshness, signals, quality gates, merge/CI watch, review ceremony, and the feedback loop.","properties":{"execution":{"type":"object","description":"Wall-clock bounds on the subprocesses delivery spawns.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Per-command timeout (ms) for the long-running spawns delivery drives — the close-validation chain and the gate CLIs.","default":600000},"fullSuiteLock":{"type":"boolean","description":"Serialize full-suite spawns (`npm test` / `npm run test:coverage`) behind a host-level advisory lock, so two concurrent deliveries on one checkout do not run two suites against the same cores. Best-effort: a wait that expires spawns anyway, so the lock can never fail a delivery. Set false — or export `MANDREL_FULL_SUITE_LOCK=0` for one invocation — to disable.","default":true},"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"]}}]},"signals":{"type":"object","description":"Detector thresholds for the surviving performance-signal categories. Each block is shallow-merged by the resolver.","properties":{"rework":{"type":"object","description":"Rework detector — repeated edits to one file in a run.","properties":{"editsPerFile":{"type":"integer","minimum":1,"description":"Edits to a single file within one run that trip the rework signal.","default":5}},"additionalProperties":false},"retry":{"type":"object","description":"Retry detector — the same command failing repeatedly.","properties":{"repeatCount":{"type":"integer","minimum":1,"description":"Repeats of an identical failing command that trip the retry signal.","default":3}},"additionalProperties":false}},"additionalProperties":false},"quality":{"type":"object","description":"Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base; shared scoping lives at this block root.","properties":{"gateScoping":{"type":"object","description":"Shared scope applied to every gate that supports one, unless the gate overrides it.","properties":{"scope":{"type":"string","enum":["diff","full"],"description":"Score only the files changed against `diffRef` (`diff`) or every file in the gate target dirs (`full`).","default":"diff"},"diffRef":{"type":"string","minLength":1,"description":"Git ref the `diff` scope is computed against.","default":"main"}},"additionalProperties":false},"gates":{"type":"object","description":"The eight quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"lint":{"type":"object","description":"Lint-count ratchet. Floors are absolute error/warning counts; the baseline pins the current count so a regression is visible even while the floor is not yet met.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/lint.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"errorCount":0}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}}},"additionalProperties":false},"coverage":{"type":"object","description":"Line/branch/function coverage ratchet, read from the Istanbul JSON summary the project test run emits.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/coverage.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"lines":90,"branches":85,"functions":90}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"coveragePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative path to the Istanbul `coverage-final.json` the capture step writes and the gate reads.","default":"coverage/coverage-final.json"},"timeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for the `npm run test:coverage` capture spawn. A SIGKILL at the budget boundary maps to exit 124 so close-validation can tell a hang from a test failure.","default":600000}},"additionalProperties":false},"crap":{"type":"object","description":"CRAP (Change Risk Anti-Pattern) ratchet — per-method cyclomatic complexity joined against per-method coverage.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/crap.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.05}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"max":30,"p95":20,"methodsAbove20":50}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the CRAP gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":["src"]},"newMethodCeiling":{"type":"integer","minimum":1,"description":"Hard CRAP ceiling applied to a method the diff introduces. A new method above it fails the gate regardless of the baseline.","default":30},"requireCoverage":{"type":"boolean","description":"When true, the gate refuses to score without a coverage artifact rather than silently reporting complexity-only rows.","default":true},"minMethodResolutionRate":{"type":"number","minimum":0,"maximum":1,"description":"Fail-closed floor on the per-method coverage JOIN (Story #4775): the fraction of methods that must resolve a coverage entry, counted only over files that HAVE one, before `update-crap-baseline.js` will persist. A broken join is silent by construction — unresolved methods are simply absent — so the updater refuses rather than writing a thin baseline and logging it as success. Not enforced below 25 joinable methods, where a diff-scoped run’s rate is noise. Default 0.75; a healthy repo resolves ~98%."},"friction":{"type":"object","description":"Friction-signal wiring for a CRAP baseline regression, so a recurring one can reach the actionable threshold.","properties":{"markerKey":{"type":"string","minLength":1,"description":"Signal marker key the regression is recorded under."}},"additionalProperties":false,"default":{"markerKey":"crap-baseline-regression"}},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate CRAP baseline refresh in the compared range. A range commit carrying it that also touches the baseline file demotes head-vs-base regressions; floors stay enforced.","default":"baseline-refresh:"},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run crap:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from CRAP discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]},"incrementalCoverage":{"type":"object","description":"The two independent full-suite economies (Story #4981, split by Story #5173). `skipWhenUnchanged` (default true) decides WHETHER to capture — no changed file under `crap.targetDirs` versus `baseRef` means no capture at all — and is a pure saving. `baselineJoin` (default false) loosens gate semantics: the CRAP join resolves a method in an untouched file from its committed baseline row instead of requiring fresh coverage for it. Neither narrows the capture run itself: a capture that does happen is the ordinary full `npm run test:coverage` (Story #5065).","properties":{"skipWhenUnchanged":{"type":"boolean","description":"Skip the capture entirely when no changed file under `crap.targetDirs` versus `baseRef` was touched. The only measured saving, and gate-semantics-neutral. Defaults to true.","default":true},"baselineJoin":{"type":"boolean","description":"Let the CRAP join resolve a method in a file the diff did not touch from its committed baseline row instead of requiring fresh coverage for it. A gate loosening, not a saving — defaults to false.","default":false},"enabled":{"type":"boolean","description":"DEPRECATED alias for setting both `skipWhenUnchanged` and `baselineJoin`. Prefer the two switches: they are not equally safe, and bundling them is why the earlier default flip was reverted. Either explicit switch overrides this alias."},"baseRef":{"type":"string","minLength":1,"description":"Git ref the changed-file set is computed against. Omitted falls back to the gate’s own `--ref` (`main`)."}},"additionalProperties":false}},"additionalProperties":false},"maintainability":{"type":"object","description":"Maintainability-index ratchet. Scores per file as the average over its methods, so deleting a small high-MI method can legitimately lower a file’s score.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/maintainability.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.5}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"min":70}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the maintainability gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/` plus `tests/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":[]},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate maintainability baseline refresh in the compared range. Mirrors the CRAP gate's `refreshTag`; a range commit carrying it that touches the baseline file demotes head-vs-base regressions (floors still enforced)."},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run maintainability:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from MI discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]}},"additionalProperties":false},"mutation":{"type":"object","description":"Stryker mutation-score ratchet. Off in practice for most consumers — the baseline kind is registered but no framework path runs Stryker.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/mutation.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"score":60}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"strykerConfigPath":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Repo-relative path to the Stryker config. `null` lets Stryker resolve its own default.","default":null}},"additionalProperties":false},"lighthouse":{"type":"object","description":"Lighthouse category-score ratchet for web targets. Off by default — it needs a running deployment.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/lighthouse.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"performance":0,"accessibility":0,"bestPractices":0,"seo":0}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"baseUrl":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Origin the routes are resolved against. `null` leaves the gate unusable, which is why it ships disabled.","default":null},"routes":{"type":"array","items":{"type":"object","description":"One route the Lighthouse run scores.","required":["path"],"properties":{"path":{"type":"string","minLength":1,"description":"Route path appended to `baseUrl`."},"formFactor":{"type":"string","enum":["mobile","desktop"],"description":"Emulated form factor for this route."}},"additionalProperties":false},"description":"Routes to score on each run.","default":[]}},"additionalProperties":false},"bundle-size":{"type":"object","description":"Built-artifact size ratchet for web targets. Off by default — it needs declared bundles.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/bundle-size.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"bundles":{"type":"array","items":{"type":"object","description":"One built artifact the bundle-size gate weighs.","required":["name","path","limit"],"properties":{"name":{"type":"string","minLength":1,"description":"Label the rollup row is keyed by."},"path":{"type":"string","minLength":1,"description":"Glob or path of the built artifact to measure."},"limit":{"type":"string","minLength":1,"description":"Human size ceiling (e.g. `\"180 kB\"`)."}},"additionalProperties":false},"description":"The artifacts to weigh. Empty means the gate has nothing to do.","default":[]}},"additionalProperties":false},"duplication":{"type":"object","description":"Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks, a bounded refresh timeout mirroring crap/MI, and `ignoreGlobs` to exclude files from the scan.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/duplication.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":1}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"percentage":25}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the duplication (DRY) gate scans for copy-paste clones. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal (Story #3664).","default":["src"]},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run duplication:update` spawned by the baseline-attribution refresh path. Mirrors `crap.refreshTimeoutMs` / `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124. Default 60000 (Story #3664).","default":60000},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from duplication discovery before scanning. Orthogonal to `components` (grouping). Absent or empty preserves the existing behaviour (Story #3664).","default":[]}},"additionalProperties":false}},"additionalProperties":false},"formatAutofix":{"type":"object","description":"Bounded-timeout knob for the close-time `npx biome format --write` spawn (Story #2165). A SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked` with a friction comment.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Timeout (ms) for the format-write spawn.","default":60000}},"additionalProperties":false},"codingGuardrails":{"type":"object","description":"Authoring-time cyclomatic-complexity advisories surfaced by the quality-preview pre-commit gate.","properties":{"cyclomaticFlag":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method is flagged for a refactor look.","default":8},"cyclomaticMustFix":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method must be decomposed before the diff closes.","default":12},"requireSiblingTest":{"type":"boolean","description":"When true, a new source file with no colocated sibling test is reported by the guardrails pass.","default":false}},"additionalProperties":false},"autoRefresh":{"type":"object","description":"Baseline-attribution auto-refresh: when a gate can prove a regression is a legitimate consequence of the diff, it rewrites the baseline instead of blocking.","properties":{"enabled":{"type":"boolean","description":"Master switch for the auto-refresh path. When false, every baseline refresh is a deliberate operator action.","default":true},"crapJumpCap":{"type":"number","minimum":0,"description":"Largest single-row CRAP jump the auto-refresh will absorb. A larger jump is reported as a regression rather than rewritten.","default":5},"scope":{"type":"string","enum":["diff","full"],"description":"Whether an auto-refresh rescores only the changed files (`diff`) or every file in the target dirs (`full`).","default":"diff"}},"additionalProperties":false},"baselineEpsilon":{"type":"object","description":"Per-kind epsilon for s-stability-epsilon (Story #1964). Sub-epsilon row deltas resolve to prior bytes so env variance does not rewrite the on-disk baseline.","properties":{"maintainability":{"type":"number","minimum":0,"default":0.5},"crap":{"type":"number","minimum":0,"default":0.5},"coverage":{"type":"number","minimum":0,"default":0.1},"mutation":{"type":"number","minimum":0,"default":0.5},"lint":{"type":"number","minimum":0,"default":0},"lighthouse":{"type":"number","minimum":0,"default":1},"bundle-size":{"type":"number","minimum":0,"default":1024},"duplication":{"type":"number","minimum":0,"default":0.5}},"additionalProperties":false},"requireBaselines":{"type":"boolean","description":"Story #4495. Fail-closed baseline-enforcement policy for the unified check-baselines close-validation gate. When false (default), a consumer that enables baseline gates (crap/maintainability/…) but has not committed the corresponding baseline artifacts under baselines/ gets a clean skip-with-reason instead of a deterministic first-try close failure. Set true to keep the gate registered so an absent baseline artifact fails close-validation with a preflight hint naming the fix (the fail-closed posture).","default":false},"navigability":{"type":"object","description":"Navigability lens + journey-suite config (Epic #4131, F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and /mandrel-deliver's per-Story ceremony (journey suite). Opt-in: absent or empty routeGlobs degrades to a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (pages/**, app/**/route.ts) marking paths that add a user-facing route — the route-tree SSOT the navigability lens enumerates and the route-added routing predicate matches against.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT the navigability lens checks every route resolves a nav door against.","default":[]},"journeySuite":{"type":"string","description":"Path or command for the per-persona journey suite /mandrel-deliver's per-Story ceremony runs."}},"additionalProperties":false}},"additionalProperties":false},"mergeWatch":{"type":"object","description":"Knobs consumed by the close-and-land merge wait (Story #4543; defaults in `lib/orchestration/merge-poll.js`). `mode` (Story #4698) selects the close-time merge posture. `intervalSeconds` is the poll cadence between `gh pr view` probes after the arm. `maxWaitSeconds` bounds ONE invocation of the merge wait and its expiry returns a resumable `pending` terminal with no label mutation; `maxBudgetSeconds` bounds the CUMULATIVE wait across resumes (anchored at the PR's createdAt, so a resume does not restart the clock) and exhausting it is the genuine give-up that classifies and blocks. `updateAttempts` caps the bounded update of a behind-the-base PR.","properties":{"mode":{"type":"string","enum":["sync","async"],"description":"Close-time merge-wait posture (Story #4698). `sync` (default) keeps the in-close foreground merge wait unchanged. `async` caps the per-invocation wait to a short ~60s probe window — long enough to catch an instant merge and, via the head-anchored required-check predicate, an instantly-red required check — then returns the resumable `pending` terminal (exit 3) with a `nextCommand`. Opt in when slow CI makes the foreground wait routinely expire: the worker launches `nextCommand` in the background instead of burning the host tool slot polling. `maxBudgetSeconds` (the cumulative give-up) is unchanged."},"intervalSeconds":{"type":"integer","minimum":1,"description":"Seconds between merge-wait polls. Default 30.","default":30},"maxWaitSeconds":{"type":"integer","minimum":1,"description":"Per-invocation merge-wait bound (seconds). Default 300 (5 minutes) — chosen to fit inside a single host tool invocation (~10 min ceiling) alongside the close gates that precede the wait. Expiry yields `pending` (exit 3), never a block. Headless callers with no host ceiling raise this to land in one block."},"maxBudgetSeconds":{"type":"integer","minimum":1,"description":"Cumulative wall-clock budget (seconds) across merge-wait resumes, anchored at the PR's createdAt. Default 3600 (60 minutes). Exhausting this classifies the block and transitions the Story to agent::blocked.","default":3600},"updateAttempts":{"type":"integer","minimum":0,"description":"Maximum times the merge wait will bring a behind-the-base PR up to date before giving up on the branch. Default 3. Set 0 to disable the update."}},"additionalProperties":false},"codeReview":{"type":"object","description":"Review-provider chain plus bounded-retry knobs for the /mandrel-deliver code-review ceremony.","properties":{"providers":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","enum":["native","codex","security-review","ultrareview"],"description":"Registered provider key. Inline: native, codex, security-review. Manual-prompt: ultrareview."},"scopes":{"type":"array","items":{"type":"string","enum":["story","epic"]},"description":"Invocation scopes this entry fires on. Default (omitted) is both."},"optional":{"type":"boolean","default":false,"description":"When true, construction failure (host missing CLI/plugin) is logged and the entry is skipped instead of hard-failing the chain. Use for cross-runtime portability."},"manualPrompt":{"type":"boolean","default":false,"description":"When true, the entry is loaded from the manual-prompt registry: contributes a one-line operator suggestion via `renderPrompt()` instead of running a review via `runReview()`. Does not affect severity counts or `halted`."},"when":{"type":"object","description":"Optional label-gated invocation predicate. Evaluated against the ticket's current labels at invocation time; when false, the entry is silently skipped for this run.","properties":{"label":{"type":"string","minLength":1,"description":"Single label that MUST be present on the ticket."},"labelAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Run when ANY of the listed labels is present."}},"additionalProperties":false}},"additionalProperties":false},"description":"Review-provider chain (Story #2871). When unset or empty, defaults to [{ name: \"native\" }]. The orchestrator iterates inline entries in declaration order and merges their Finding[] before posting one structured comment; manual-prompt entries (e.g. ultrareview) contribute a trailing 'Manual review suggestions' section. Selecting an adapter whose probe fails hard-fails at factory construction unless declared `optional: true` in the chain.","default":[{"name":"native"},{"name":"security-review","scopes":["story"],"optional":true},{"name":"ultrareview","scopes":["story"],"manualPrompt":true,"when":{"label":"risk::high"}}]},"providerConfig":{"type":"object","additionalProperties":true,"description":"Optional escape hatch for adapter-specific configuration. No documented keys in Epic #2815; reserved so future adapters can be configured without another schema migration."},"maxFixAttempts":{"type":"integer","minimum":0,"description":"Maximum auto-fix retry attempts per finding in /mandrel-deliver Phase 5 (code-review). 0 disables auto-fix. Default 3.","default":3},"maxFixScopeFiles":{"type":"integer","minimum":1,"description":"Maximum file count a single auto-fix may modify before escalating to agent::blocked. Default 5.","default":5},"autoFixSeverity":{"type":"string","enum":["high","medium"],"description":"Severity threshold for on-branch remediation in /mandrel-deliver Phase 5 (code-review). `medium` (default) routes 🔴/🟠/🟡 findings into the host-LLM focused-fix routing (Mediums batched per lens: one commit per lens, a single validation + rescan at the end) while 🟢 suggestions still graduate to follow-up issues; `high` reproduces the pre-4399 Critical/High-only routing. Hard cutover — no back-compat flag.","default":"medium"}},"additionalProperties":false},"review":{"type":"object","description":"Close-scope review tuning (Story #4699). Governs the Story-scope local-lens pass that runs inside the close subprocess; the maker-blind code-review pass and all hard gates are unaffected.","properties":{"lensDiffFloor":{"type":"integer","minimum":0,"description":"Changed-line floor for the close-scope lens walk (Story #4699). A diff strictly below this many changed lines (additions + deletions) with zero sensitive-path hits skips lens materialization and records the skip in the findings-yield ledger. Default 40; 0 disables the skip. Hard gates and the maker-blind code-review pass are unaffected."}},"additionalProperties":false},"refactorStage":{"type":"object","description":"Opt-in, config-gated post-green refactor checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly additive and default-OFF: when disabled, story-deliver behaves exactly as before. Advisory only — never changes existing close-validation gate semantics.","properties":{"enabled":{"type":"boolean","description":"When true, story-deliver runs an advisory post-green refactor stage (core/code-review-and-quality skill, Post-Green Refactor Pass) after the suite is green. Default false — when unset the stage is skipped and close-validation gate semantics are unchanged.","default":false}},"additionalProperties":false},"acceptanceEval":{"type":"object","description":"Story #3819. Bounded per-Story acceptance self-eval loop. After the implementation commits land and before the Story-implementation phase flips to `closing`, an independent (fresh-context) critic pass scores the caller-injected change set against each inline `acceptance[]` item, redrafts the unmet items, and re-evaluates — capped at `maxRounds` redraft rounds, then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the loop is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":1,"description":"Maximum number of redraft rounds before escalation. Default 2; clamped into [1, hard ceiling] by lib/config/acceptance-eval.js so the cap can never be disabled (maxRounds: 0 clamps up to 1).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-out toggles for the close-time auto-file graduators. All default to auto-filing on.","properties":{"auditResultsAutoFile":{"type":"boolean","description":"When true (default), the close-time audit-results graduator auto-files non-blocking audit-results findings as follow-up issues routed by source classification. Set to false to suppress auto-filing; findings remain accessible in the structured comments on the Story.","default":true},"retroProposals":{"type":"boolean","description":"When true (default), the retro auto-files its actionable routed proposals as meta::<framework-gap|consumer-improvement> + friction::<category> issues via the graduator pre-parsed-findings seam, and the rendered retro sections list the filed issue numbers instead of paste-ready gh command stanzas. Set to false to fall back to the command stanzas.","default":true},"frictionWindowDays":{"type":"integer","minimum":1,"description":"How many days back the run-scope friction recurrence window reaches (Story #4850). The window spans every surviving per-Story signal stream rather than the triggering run's own Stories, so that a defect firing once per Story can reach the actionable threshold; this bounds it by age so a defect fixed weeks ago stops re-routing. Rows older than the bound — and rows carrying no readable timestamp — are excluded and counted on the roll-up step result. Default 30."}},"additionalProperties":false},"auditToStories":{"type":"object","description":"Knobs for the `/audit-to-stories` unattended (`--auto`) sweep (Story #4626).","properties":{"severityFloor":{"type":"string","enum":["critical","high","medium","low","all"],"description":"Minimum severity a finding must meet to be proposed as a Story on an unattended `/audit-to-stories --auto` sweep (Story #4626). Default high."},"autoComment":{"type":"boolean","description":"When true (default), `/audit-to-stories --auto` posts a re-detected comment on an already-open matched Issue instead of silently skipping it."}},"additionalProperties":false},"ci":{"type":"object","description":"CI-aware delivery namespace (Story #4356, Epic #4355): the merge/CI watch poll loop and the merge posture.","properties":{"watch":{"type":"object","description":"Story #4356 (Epic #4355). Poll-loop tuning for the merge/CI watch. pollIntervalMs is the cadence between check probes; maxPolls caps total probes before the watcher gives up; maxResumes caps how many times the watcher may resume after a transient stall; attachWindowMs bounds the wait for a required context to attach at all.","properties":{"pollIntervalMs":{"type":"integer","minimum":1,"description":"Milliseconds between check probes.","default":10000},"maxPolls":{"type":"integer","minimum":1,"description":"Total probes before the watcher gives up on one invocation.","default":180},"maxResumes":{"type":"integer","minimum":0,"description":"How many times the watcher may resume after a transient stall. 0 disables resuming.","default":3},"attachWindowMs":{"type":"integer","minimum":1,"description":"Story #4890. How long (ms) the watch keeps re-resolving an EMPTY `gh pr checks --required` set before it stops waiting for a required context to attach. A ruleset attaches its contexts asynchronously and the arrival latency is set by the slowest one, so a required context that is an aggregator job gated on every other tier is the last to appear — measured at 16m52s on this repository. Default 1200000 (20 minutes). Raise it for a repository whose contexts arrive later still; exhausting the window is never reported as a red check (the watch exits 2, not-yet-started).","default":1200000}},"additionalProperties":false},"autoMerge":{"type":"string","enum":["trust-ci","strict"],"description":"Story #4356 (Epic #4355). Merge posture. 'trust-ci' (default) merges once required checks pass; 'strict' additionally requires a clean review gate.","default":"trust-ci"},"blockOnAdvisoryFailure":{"type":"boolean","description":"Story #5096. When true (default), delivery refuses to arm — and disarms — GitHub native auto-merge while a non-required (advisory) check is genuinely red on the PR head and GitHub reports the PR mergeable anyway (mergeStateStatus=UNSTABLE). `--auto` waits on REQUIRED contexts only, so without this a red advisory quality gate merges unattended. Set false to restore the pre-#5096 behaviour verbatim.","default":true},"advisoryAllowlist":{"type":"array","items":{"type":"string"},"description":"Story #5096. Check-run names exempt from blockOnAdvisoryFailure — a red run whose name matches exactly never blocks arming. Matching is exact; an unnamed run can never match and always blocks.","default":[]}},"additionalProperties":false},"routing":{"type":"object","description":"v2 delivery-spawn routing: role-scoped boot contexts and maker-checker sampling. The v1 singleDelivery epic-route kill-switch was removed in Stage 6.","properties":{"roleScopedAgents":{"type":"boolean","description":"Epic #4478 (M7-B). Kill-switch for the role-scoped boot contexts. When true (default), a converted delivery spawn (`story-worker`, `acceptance-critic`) boots on its own `.claude/agents/<role>.md` system prompt instead of re-paying the full CLAUDE.md @-import closure. When false, every converted spawn falls back to `subagent_type: general-purpose` — the instant, code-rollback-free per-consumer revert, and the universal escape for hosts that ignore `.claude/agents/`. The fallback is the full-closure agent that ran before M7-B, so flipping it off never drops a gate.","default":true},"freshCriticSampleRate":{"type":"number","minimum":0,"maximum":1,"description":"Epic #4478 (M7-B, Part 2). Maker-checker sampling floor. Under the standard profile, a change set touching no sensitive path routes its acceptance clusters down the contract-identical inline critic path, but this fraction of them is still forced through a fresh-context critic so a low derived level never means zero independent checking. Clamped to [0, 1]; 0 disables the floor, 1 forces every cluster fresh. Consumed by resolveCeremonyForRisk (lib/orchestration/ceremony-routing.js).","default":0.2},"ceremonyProfile":{"type":"string","enum":["minimal","standard","strict"],"description":"Acceptance-ceremony depth. minimal = always inline critic; strict = always fresh-context critic; standard (default) = routed off the change level derived from the Story diff, with the maker-checker sampling floor.","default":"standard"},"closeAndLand":{"type":"boolean","description":"When true (default), single-story-close lands through merge in one close. Opt out per-run with --no-wait-merge.","default":true}},"additionalProperties":false}},"additionalProperties":false},"qa":{"type":"object","description":"Agent-driven QA harness contract (Epic #3214; environment-keyed by Epic #4326). Optional top-level block. All filesystem-pointer fields (featureRoot, fixturesManifest, designTokens) carry safeString guards rejecting shell-injection metacharacters. environments is a map of named deployment targets (each with a baseUrl, a per-environment url-template/skill sign-in seam, and an optional allowWrites gate); personas resolve to a stored credential reference or a sign-in skill, never an inline secret.","properties":{"featureRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Directory holding the Gherkin feature files the QA sweep drives.","default":"tests/features"},"fixturesManifest":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the persona/fixture manifest the harness seeds from.","default":"tests/fixtures/personas.json"},"environments":{"type":"object","description":"Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.","default":{"local":{"baseUrl":"http://localhost:3000","signInSeam":{"urlTemplate":"/dev/sign-in-as/{persona}"}},"staging":{"baseUrl":"https://staging.example.test","allowWrites":false}},"minProperties":1,"additionalProperties":{"type":"object","properties":{"baseUrl":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"signInSeam":{"oneOf":[{"type":"object","properties":{"urlTemplate":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["urlTemplate"],"additionalProperties":false},{"type":"object","properties":{"skill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["skill"],"additionalProperties":false}]},"allowWrites":{"type":"boolean"}},"required":["baseUrl"],"additionalProperties":false}},"personas":{"description":"Personas the QA-harness sign-in seam accepts. Two accepted shapes: (1) a plain array of persona names — the honest shape for a `urlTemplate` dev-impersonation seam, where the persona name is the sole input the workflow consumes; (2) the object-map form keyed by persona name, where each entry carries per-persona auth material (`credentialRef` or `signInSkill`) consulted only under a skill-based or credential-based seam.","default":{"admin":{"credentialRef":"QA_ADMIN_CREDENTIAL"},"member":{"credentialRef":"QA_MEMBER_CREDENTIAL"}},"oneOf":[{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},{"type":"object","minProperties":1,"additionalProperties":{"oneOf":[{"type":"object","properties":{"credentialRef":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["credentialRef"],"additionalProperties":false},{"type":"object","properties":{"signInSkill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["signInSkill"],"additionalProperties":false}]}}]},"gherkinLint":{"type":"object","description":"Static Gherkin corpus gate (Story #5013). Optional; the gate runs only when this block is present, so an upgrade never reddens the lint of a consumer that never asked the framework to police its `.feature` files. Inside the opt-in it fails closed: an unresolvable `@cucumber/gherkin` parser, or a scope resolving zero step definitions, exits 1 rather than reporting a clean run.","default":{"scopes":{"web":{"featureRoots":["apps/web/tests/features"],"stepRoots":["apps/web/tests/steps"]}},"exemptionTags":["@skip"],"stepWaivers":[]},"properties":{"scopes":{"type":"object","description":"Binding scopes, keyed by name. Each scope resolves its own features against its own step definitions only — pooling every step root into one matcher list is what makes a cross-app false bind possible, where a step defined solely in app B silently vouches for app A. The scope name appears verbatim in every unbound finding.","minProperties":1,"additionalProperties":{"type":"object","properties":{"featureRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the `.feature` files of this scope, walked recursively."},"stepRoots":{"type":"array","minItems":1,"items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Directories holding the step definitions of this scope, walked recursively. Resolving zero definitions here is a fail-closed error, not a clean run."}},"required":["featureRoots","stepRoots"],"additionalProperties":false}},"exemptionTags":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Tags marking a scenario as intentionally non-binding, so must-bind skips it. Never an escape from must-compile: a parse error in the file still fails the run. Default: [\"@skip\"].","default":["@skip"]},"stepWaivers":{"type":"array","items":{"type":"string","minLength":1},"description":"Exact step texts must-bind never reports as unbound. The step index is a source scan and therefore heuristic while the parser is exact, so a false unbound must always have an escape that does not require switching the gate off. Default: [].","default":[]}},"required":["scopes"],"additionalProperties":false},"consoleAllowlist":{"type":"array","items":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"description":"Console-message substrings the QA run tolerates instead of reporting as a finding (framework dev-mode chatter).","default":["Download the React DevTools","[HMR]"]},"designTokens":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the design-token SSOT the UX/UI lens checks rendered styles against.","default":"src/styles/tokens.css"}},"additionalProperties":false}},"additionalProperties":false};const pattern0 = new RegExp("([;&|`]|\\$\\()", "u");const pattern9 = new RegExp("^@.+", "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.branchProtection !== undefined){let data22 = data15.branchProtection;if(data22 && typeof data22 == "object" && !Array.isArray(data22)){for(const key5 in data22){if(!((key5 === "enforce") || (key5 === "requiredChecks"))){const err68 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}if(data22.enforce !== undefined){if(typeof data22.enforce !== "boolean"){const err69 = {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 = [err69];}else {vErrors.push(err69);}errors++;}}if(data22.requiredChecks !== undefined){let data24 = data22.requiredChecks;if(Array.isArray(data24)){const len1 = data24.length;for(let i1=0; i1<len1; i1++){let data25 = data24[i1];if(data25 && typeof data25 == "object" && !Array.isArray(data25)){if(data25.name === undefined){const err70 = {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 = [err70];}else {vErrors.push(err70);}errors++;}if(data25.cmd === undefined){const err71 = {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 = [err71];}else {vErrors.push(err71);}errors++;}for(const key6 in data25){if(!((key6 === "name") || (key6 === "cmd"))){const err72 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}}if(data25.name !== undefined){let data26 = data25.name;if(typeof data26 === "string"){if(func2(data26) < 1){const err73 = {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 = [err73];}else {vErrors.push(err73);}errors++;}}else {const err74 = {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 = [err74];}else {vErrors.push(err74);}errors++;}}if(data25.cmd !== undefined){let data27 = data25.cmd;if(Array.isArray(data27)){if(data27.length < 1){const err75 = {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 = [err75];}else {vErrors.push(err75);}errors++;}const len2 = data27.length;for(let i2=0; i2<len2; i2++){let data28 = data27[i2];if(typeof data28 === "string"){if(func2(data28) < 1){const err76 = {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 = [err76];}else {vErrors.push(err76);}errors++;}}else {const err77 = {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 = [err77];}else {vErrors.push(err77);}errors++;}}}else {const err78 = {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 = [err78];}else {vErrors.push(err78);}errors++;}}}else {const err79 = {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 = [err79];}else {vErrors.push(err79);}errors++;}}}else {const err80 = {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 = [err80];}else {vErrors.push(err80);}errors++;}}}else {const err81 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err81];}else {vErrors.push(err81);}errors++;}}if(data15.mergeMethods !== undefined){let data29 = data15.mergeMethods;if(data29 && typeof data29 == "object" && !Array.isArray(data29)){for(const key7 in data29){if(!(((((key7 === "allow_squash_merge") || (key7 === "allow_rebase_merge")) || (key7 === "allow_merge_commit")) || (key7 === "allow_auto_merge")) || (key7 === "delete_branch_on_merge"))){const err82 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err82];}else {vErrors.push(err82);}errors++;}}if(data29.allow_squash_merge !== undefined){if(typeof data29.allow_squash_merge !== "boolean"){const err83 = {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 = [err83];}else {vErrors.push(err83);}errors++;}}if(data29.allow_rebase_merge !== undefined){if(typeof data29.allow_rebase_merge !== "boolean"){const err84 = {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 = [err84];}else {vErrors.push(err84);}errors++;}}if(data29.allow_merge_commit !== undefined){if(typeof data29.allow_merge_commit !== "boolean"){const err85 = {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 = [err85];}else {vErrors.push(err85);}errors++;}}if(data29.allow_auto_merge !== undefined){if(typeof data29.allow_auto_merge !== "boolean"){const err86 = {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 = [err86];}else {vErrors.push(err86);}errors++;}}if(data29.delete_branch_on_merge !== undefined){if(typeof data29.delete_branch_on_merge !== "boolean"){const err87 = {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 = [err87];}else {vErrors.push(err87);}errors++;}}}else {const err88 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}}if(data15.notifications !== undefined){let data35 = data15.notifications;if(data35 && typeof data35 == "object" && !Array.isArray(data35)){for(const key8 in data35){if(!(((key8 === "mentionOperator") || (key8 === "commentEvents")) || (key8 === "webhookEvents"))){const err89 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err89];}else {vErrors.push(err89);}errors++;}}if(data35.mentionOperator !== undefined){if(typeof data35.mentionOperator !== "boolean"){const err90 = {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 = [err90];}else {vErrors.push(err90);}errors++;}}if(data35.commentEvents !== undefined){let data37 = data35.commentEvents;if(Array.isArray(data37)){const len3 = data37.length;for(let i3=0; i3<len3; i3++){let data38 = data37[i3];if(typeof data38 !== "string"){const err91 = {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 = [err91];}else {vErrors.push(err91);}errors++;}if(!((((data38 === "state-transition") || (data38 === "story-merged")) || (data38 === "story-closing")) || (data38 === "operator-message"))){const err92 = {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 = [err92];}else {vErrors.push(err92);}errors++;}}let i4 = data37.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data37[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err93 = {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 = [err93];}else {vErrors.push(err93);}errors++;break;}indices0[item0] = i4;}}}else {const err94 = {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 = [err94];}else {vErrors.push(err94);}errors++;}}if(data35.webhookEvents !== undefined){let data39 = data35.webhookEvents;if(Array.isArray(data39)){const len4 = data39.length;for(let i5=0; i5<len4; i5++){let data40 = data39[i5];if(typeof data40 !== "string"){const err95 = {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 = [err95];}else {vErrors.push(err95);}errors++;}if(!((((((data40 === "state-transition") || (data40 === "story-merged")) || (data40 === "story-closing")) || (data40 === "operator-message")) || (data40 === "merge.unlanded")) || (data40 === "merge.flip-failed"))){const err96 = {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 = [err96];}else {vErrors.push(err96);}errors++;}}let i6 = data39.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data39[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err97 = {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 = [err97];}else {vErrors.push(err97);}errors++;break;}indices1[item1] = i6;}}}else {const err98 = {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 = [err98];}else {vErrors.push(err98);}errors++;}}}else {const err99 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}}}else {const err100 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}}if(data.planning !== undefined){let data41 = data.planning;if(data41 && typeof data41 == "object" && !Array.isArray(data41)){for(const key9 in data41){if(!(func10.call(schema11.properties.planning.properties, key9))){const err101 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err101];}else {vErrors.push(err101);}errors++;}}if(data41.riskHeuristics !== undefined){let data42 = data41.riskHeuristics;const _errs116 = errors;let valid31 = false;let passing0 = null;const _errs117 = errors;if(Array.isArray(data42)){const len5 = data42.length;for(let i7=0; i7<len5; i7++){if(typeof data42[i7] !== "string"){const err102 = {instancePath:instancePath+"/planning/riskHeuristics/" + i7,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err102];}else {vErrors.push(err102);}errors++;}}}else {const err103 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err103];}else {vErrors.push(err103);}errors++;}var _valid0 = _errs117 === errors;if(_valid0){valid31 = true;passing0 = 0;}const _errs121 = errors;if(data42 && typeof data42 == "object" && !Array.isArray(data42)){for(const key10 in data42){if(!((key10 === "append") || (key10 === "prepend"))){const err104 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err104];}else {vErrors.push(err104);}errors++;}}if(data42.append !== undefined){let data44 = data42.append;if(Array.isArray(data44)){const len6 = data44.length;for(let i8=0; i8<len6; i8++){if(typeof data44[i8] !== "string"){const err105 = {instancePath:instancePath+"/planning/riskHeuristics/append/" + i8,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}}}else {const err106 = {instancePath:instancePath+"/planning/riskHeuristics/append",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data42.prepend !== undefined){let data46 = data42.prepend;if(Array.isArray(data46)){const len7 = data46.length;for(let i9=0; i9<len7; i9++){if(typeof data46[i9] !== "string"){const err107 = {instancePath:instancePath+"/planning/riskHeuristics/prepend/" + i9,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}}else {const err108 = {instancePath:instancePath+"/planning/riskHeuristics/prepend",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}}}else {const err109 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}var _valid0 = _errs121 === errors;if(_valid0 && valid31){valid31 = false;passing0 = [passing0, 1];}else {if(_valid0){valid31 = true;passing0 = 1;}}if(!valid31){const err110 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}else {errors = _errs116;if(vErrors !== null){if(_errs116){vErrors.length = _errs116;}else {vErrors = null;}}}}if(data41.complexityGate !== undefined){let data48 = data41.complexityGate;if(data48 && typeof data48 == "object" && !Array.isArray(data48)){for(const key11 in data48){if(!((key11 === "enabled") || (key11 === "maxArtifacts"))){const err111 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}if(data48.enabled !== undefined){if(typeof data48.enabled !== "boolean"){const err112 = {instancePath:instancePath+"/planning/complexityGate/enabled",schemaPath:"#/properties/planning/properties/complexityGate/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data48.maxArtifacts !== undefined){let data50 = data48.maxArtifacts;if(!(((typeof data50 == "number") && (!(data50 % 1) && !isNaN(data50))) && (isFinite(data50)))){const err113 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}if((typeof data50 == "number") && (isFinite(data50))){if(data50 < 0 || isNaN(data50)){const err114 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err114];}else {vErrors.push(err114);}errors++;}}}}else {const err115 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}if(data41.memoryPool !== undefined){let data51 = data41.memoryPool;if(data51 && typeof data51 == "object" && !Array.isArray(data51)){for(const key12 in data51){if(!((key12 === "staleAfterDays") || (key12 === "growthDelta"))){const err116 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err116];}else {vErrors.push(err116);}errors++;}}if(data51.staleAfterDays !== undefined){let data52 = data51.staleAfterDays;if(!(((typeof data52 == "number") && (!(data52 % 1) && !isNaN(data52))) && (isFinite(data52)))){const err117 = {instancePath:instancePath+"/planning/memoryPool/staleAfterDays",schemaPath:"#/properties/planning/properties/memoryPool/properties/staleAfterDays/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}if((typeof data52 == "number") && (isFinite(data52))){if(data52 < 1 || isNaN(data52)){const err118 = {instancePath:instancePath+"/planning/memoryPool/staleAfterDays",schemaPath:"#/properties/planning/properties/memoryPool/properties/staleAfterDays/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}}if(data51.growthDelta !== undefined){let data53 = data51.growthDelta;if(!(((typeof data53 == "number") && (!(data53 % 1) && !isNaN(data53))) && (isFinite(data53)))){const err119 = {instancePath:instancePath+"/planning/memoryPool/growthDelta",schemaPath:"#/properties/planning/properties/memoryPool/properties/growthDelta/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}if((typeof data53 == "number") && (isFinite(data53))){if(data53 < 1 || isNaN(data53)){const err120 = {instancePath:instancePath+"/planning/memoryPool/growthDelta",schemaPath:"#/properties/planning/properties/memoryPool/properties/growthDelta/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}}}}else {const err121 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err121];}else {vErrors.push(err121);}errors++;}}if(data41.failOnSharedEditors !== undefined){if(typeof data41.failOnSharedEditors !== "boolean"){const err122 = {instancePath:instancePath+"/planning/failOnSharedEditors",schemaPath:"#/properties/planning/properties/failOnSharedEditors/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err122];}else {vErrors.push(err122);}errors++;}}if(data41.requireExplicitCrossStoryDeps !== undefined){if(typeof data41.requireExplicitCrossStoryDeps !== "boolean"){const err123 = {instancePath:instancePath+"/planning/requireExplicitCrossStoryDeps",schemaPath:"#/properties/planning/properties/requireExplicitCrossStoryDeps/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err123];}else {vErrors.push(err123);}errors++;}}if(data41.crossCuttingRegistries !== undefined){let data56 = data41.crossCuttingRegistries;const _errs151 = errors;let valid41 = false;let passing1 = null;const _errs152 = errors;if(Array.isArray(data56)){const len8 = data56.length;for(let i10=0; i10<len8; i10++){if(typeof data56[i10] !== "string"){const err124 = {instancePath:instancePath+"/planning/crossCuttingRegistries/" + i10,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}}}else {const err125 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}var _valid1 = _errs152 === errors;if(_valid1){valid41 = true;passing1 = 0;}const _errs156 = errors;if(data56 && typeof data56 == "object" && !Array.isArray(data56)){for(const key13 in data56){if(!((key13 === "append") || (key13 === "prepend"))){const err126 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}if(data56.append !== undefined){let data58 = data56.append;if(Array.isArray(data58)){const len9 = data58.length;for(let i11=0; i11<len9; i11++){if(typeof data58[i11] !== "string"){const err127 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append/" + i11,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}}}else {const err128 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err128];}else {vErrors.push(err128);}errors++;}}if(data56.prepend !== undefined){let data60 = data56.prepend;if(Array.isArray(data60)){const len10 = data60.length;for(let i12=0; i12<len10; i12++){if(typeof data60[i12] !== "string"){const err129 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend/" + i12,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}}else {const err130 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err130];}else {vErrors.push(err130);}errors++;}}}else {const err131 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err131];}else {vErrors.push(err131);}errors++;}var _valid1 = _errs156 === errors;if(_valid1 && valid41){valid41 = false;passing1 = [passing1, 1];}else {if(_valid1){valid41 = true;passing1 = 1;}}if(!valid41){const err132 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}else {errors = _errs151;if(vErrors !== null){if(_errs151){vErrors.length = _errs151;}else {vErrors = null;}}}}if(data41.failOnRegistryConflicts !== undefined){if(typeof data41.failOnRegistryConflicts !== "boolean"){const err133 = {instancePath:instancePath+"/planning/failOnRegistryConflicts",schemaPath:"#/properties/planning/properties/failOnRegistryConflicts/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}}if(data41.failOnLargeFanOut !== undefined){if(typeof data41.failOnLargeFanOut !== "boolean"){const err134 = {instancePath:instancePath+"/planning/failOnLargeFanOut",schemaPath:"#/properties/planning/properties/failOnLargeFanOut/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err134];}else {vErrors.push(err134);}errors++;}}if(data41.largeFanOutThreshold !== undefined){let data64 = data41.largeFanOutThreshold;if(!(((typeof data64 == "number") && (!(data64 % 1) && !isNaN(data64))) && (isFinite(data64)))){const err135 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err135];}else {vErrors.push(err135);}errors++;}if((typeof data64 == "number") && (isFinite(data64))){if(data64 < 0 || isNaN(data64)){const err136 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err136];}else {vErrors.push(err136);}errors++;}}}if(data41.navigation !== undefined){let data65 = data41.navigation;if(data65 && typeof data65 == "object" && !Array.isArray(data65)){for(const key14 in data65){if(!((key14 === "routeGlobs") || (key14 === "navRegistry"))){const err137 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err137];}else {vErrors.push(err137);}errors++;}}if(data65.routeGlobs !== undefined){let data66 = data65.routeGlobs;if(Array.isArray(data66)){const len11 = data66.length;for(let i13=0; i13<len11; i13++){if(typeof data66[i13] !== "string"){const err138 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i13,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err138];}else {vErrors.push(err138);}errors++;}}}else {const err139 = {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 = [err139];}else {vErrors.push(err139);}errors++;}}if(data65.navRegistry !== undefined){let data68 = data65.navRegistry;if(Array.isArray(data68)){const len12 = data68.length;for(let i14=0; i14<len12; i14++){if(typeof data68[i14] !== "string"){const err140 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i14,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err140];}else {vErrors.push(err140);}errors++;}}}else {const err141 = {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 = [err141];}else {vErrors.push(err141);}errors++;}}}else {const err142 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/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+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err143];}else {vErrors.push(err143);}errors++;}}if(data.delivery !== undefined){let data70 = data.delivery;if(data70 && typeof data70 == "object" && !Array.isArray(data70)){for(const key15 in data70){if(!(func10.call(schema11.properties.delivery.properties, key15))){const err144 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err144];}else {vErrors.push(err144);}errors++;}}if(data70.execution !== undefined){let data71 = data70.execution;if(data71 && typeof data71 == "object" && !Array.isArray(data71)){for(const key16 in data71){if(!(((key16 === "timeoutMs") || (key16 === "fullSuiteLock")) || (key16 === "requireCreditedCapture"))){const err145 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err145];}else {vErrors.push(err145);}errors++;}}if(data71.timeoutMs !== undefined){let data72 = data71.timeoutMs;if(!(((typeof data72 == "number") && (!(data72 % 1) && !isNaN(data72))) && (isFinite(data72)))){const err146 = {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 = [err146];}else {vErrors.push(err146);}errors++;}if((typeof data72 == "number") && (isFinite(data72))){if(data72 < 1 || isNaN(data72)){const err147 = {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 = [err147];}else {vErrors.push(err147);}errors++;}}}if(data71.fullSuiteLock !== undefined){if(typeof data71.fullSuiteLock !== "boolean"){const err148 = {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 = [err148];}else {vErrors.push(err148);}errors++;}}if(data71.requireCreditedCapture !== undefined){if(typeof data71.requireCreditedCapture !== "boolean"){const err149 = {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 = [err149];}else {vErrors.push(err149);}errors++;}}}else {const err150 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err150];}else {vErrors.push(err150);}errors++;}}if(data70.docsFreshness !== undefined){let data75 = data70.docsFreshness;if(data75 && typeof data75 == "object" && !Array.isArray(data75)){for(const key17 in data75){if(!(key17 === "paths")){const err151 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err151];}else {vErrors.push(err151);}errors++;}}if(data75.paths !== undefined){let data76 = data75.paths;if(Array.isArray(data76)){const len13 = data76.length;for(let i15=0; i15<len13; i15++){let data77 = data76[i15];const _errs203 = errors;const _errs204 = errors;if(typeof data77 === "string"){if(!pattern0.test(data77)){const err152 = {};if(vErrors === null){vErrors = [err152];}else {vErrors.push(err152);}errors++;}}var valid59 = _errs204 === errors;if(valid59){const err153 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err153];}else {vErrors.push(err153);}errors++;}else {errors = _errs203;if(vErrors !== null){if(_errs203){vErrors.length = _errs203;}else {vErrors = null;}}}if(typeof data77 === "string"){if(func2(data77) < 1){const err154 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err154];}else {vErrors.push(err154);}errors++;}}else {const err155 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err155];}else {vErrors.push(err155);}errors++;}}}else {const err156 = {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 = [err156];}else {vErrors.push(err156);}errors++;}}}else {const err157 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err157];}else {vErrors.push(err157);}errors++;}}if(data70.tempRetention !== undefined){let data78 = data70.tempRetention;if(data78 && typeof data78 == "object" && !Array.isArray(data78)){for(const key18 in data78){if(!(((key18 === "enabled") || (key18 === "staleDays")) || (key18 === "classes"))){const err158 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err158];}else {vErrors.push(err158);}errors++;}}if(data78.enabled !== undefined){if(typeof data78.enabled !== "boolean"){const err159 = {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 = [err159];}else {vErrors.push(err159);}errors++;}}if(data78.staleDays !== undefined){let data80 = data78.staleDays;if(!(((typeof data80 == "number") && (!(data80 % 1) && !isNaN(data80))) && (isFinite(data80)))){const err160 = {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 = [err160];}else {vErrors.push(err160);}errors++;}if((typeof data80 == "number") && (isFinite(data80))){if(data80 < 1 || isNaN(data80)){const err161 = {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 = [err161];}else {vErrors.push(err161);}errors++;}}}if(data78.classes !== undefined){let data81 = data78.classes;if(data81 && typeof data81 == "object" && !Array.isArray(data81)){for(const key19 in data81){if(!((((key19 === "orchestrationLogs") || (key19 === "validationEvidence")) || (key19 === "auditResults")) || (key19 === "planDirs"))){const err162 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err162];}else {vErrors.push(err162);}errors++;}}if(data81.orchestrationLogs !== undefined){if(typeof data81.orchestrationLogs !== "boolean"){const err163 = {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 = [err163];}else {vErrors.push(err163);}errors++;}}if(data81.validationEvidence !== undefined){if(typeof data81.validationEvidence !== "boolean"){const err164 = {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 = [err164];}else {vErrors.push(err164);}errors++;}}if(data81.auditResults !== undefined){if(typeof data81.auditResults !== "boolean"){const err165 = {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 = [err165];}else {vErrors.push(err165);}errors++;}}if(data81.planDirs !== undefined){if(typeof data81.planDirs !== "boolean"){const err166 = {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 = [err166];}else {vErrors.push(err166);}errors++;}}}else {const err167 = {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 = [err167];}else {vErrors.push(err167);}errors++;}}}else {const err168 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err168];}else {vErrors.push(err168);}errors++;}}if(data70.deliverRunner !== undefined){let data86 = data70.deliverRunner;if(data86 && typeof data86 == "object" && !Array.isArray(data86)){for(const key20 in data86){if(!((key20 === "concurrencyCap") || (key20 === "footprintGuard"))){const err169 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err169];}else {vErrors.push(err169);}errors++;}}if(data86.concurrencyCap !== undefined){let data87 = data86.concurrencyCap;if(!(((typeof data87 == "number") && (!(data87 % 1) && !isNaN(data87))) && (isFinite(data87)))){const err170 = {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 = [err170];}else {vErrors.push(err170);}errors++;}if((typeof data87 == "number") && (isFinite(data87))){if(data87 < 1 || isNaN(data87)){const err171 = {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 = [err171];}else {vErrors.push(err171);}errors++;}}}if(data86.footprintGuard !== undefined){let data88 = data86.footprintGuard;if(typeof data88 !== "string"){const err172 = {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 = [err172];}else {vErrors.push(err172);}errors++;}if(!((data88 === "enforce") || (data88 === "advisory"))){const err173 = {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 = [err173];}else {vErrors.push(err173);}errors++;}}}else {const err174 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err174];}else {vErrors.push(err174);}errors++;}}if(data70.worktreeIsolation !== undefined){let data89 = data70.worktreeIsolation;const _errs233 = errors;let valid64 = true;const _errs234 = errors;if(data89 && typeof data89 == "object" && !Array.isArray(data89)){let missing0;if((data89.enabled === undefined) && (missing0 = "enabled")){const err175 = {};if(vErrors === null){vErrors = [err175];}else {vErrors.push(err175);}errors++;}else {if(data89.enabled !== undefined){if(true !== data89.enabled){const err176 = {};if(vErrors === null){vErrors = [err176];}else {vErrors.push(err176);}errors++;}}}}var _valid2 = _errs234 === errors;errors = _errs233;if(vErrors !== null){if(_errs233){vErrors.length = _errs233;}else {vErrors = null;}}if(_valid2){const _errs236 = errors;if(data89 && typeof data89 == "object" && !Array.isArray(data89)){if(data89.root === undefined){const err177 = {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 = [err177];}else {vErrors.push(err177);}errors++;}}var _valid2 = _errs236 === errors;valid64 = _valid2;}if(!valid64){const err178 = {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 = [err178];}else {vErrors.push(err178);}errors++;}if(data89 && typeof data89 == "object" && !Array.isArray(data89)){for(const key21 in data89){if(!(((((((key21 === "enabled") || (key21 === "root")) || (key21 === "nodeModulesStrategy")) || (key21 === "primeFromPath")) || (key21 === "allowSymlinkOnWindows")) || (key21 === "reapOnSuccess")) || (key21 === "bootstrapFiles"))){const err179 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err179];}else {vErrors.push(err179);}errors++;}}if(data89.enabled !== undefined){if(typeof data89.enabled !== "boolean"){const err180 = {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 = [err180];}else {vErrors.push(err180);}errors++;}}if(data89.root !== undefined){let data92 = data89.root;if(typeof data92 === "string"){if(func2(data92) < 1){const err181 = {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 = [err181];}else {vErrors.push(err181);}errors++;}}else {const err182 = {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 = [err182];}else {vErrors.push(err182);}errors++;}}if(data89.nodeModulesStrategy !== undefined){let data93 = data89.nodeModulesStrategy;if(typeof data93 !== "string"){const err183 = {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 = [err183];}else {vErrors.push(err183);}errors++;}if(!((((data93 === "per-worktree") || (data93 === "clone")) || (data93 === "symlink")) || (data93 === "pnpm-store"))){const err184 = {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 = [err184];}else {vErrors.push(err184);}errors++;}}if(data89.primeFromPath !== undefined){let data94 = data89.primeFromPath;if((typeof data94 !== "string") && (data94 !== null)){const err185 = {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 = [err185];}else {vErrors.push(err185);}errors++;}if(typeof data94 === "string"){if(func2(data94) < 1){const err186 = {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 = [err186];}else {vErrors.push(err186);}errors++;}}}if(data89.allowSymlinkOnWindows !== undefined){if(typeof data89.allowSymlinkOnWindows !== "boolean"){const err187 = {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 = [err187];}else {vErrors.push(err187);}errors++;}}if(data89.reapOnSuccess !== undefined){if(typeof data89.reapOnSuccess !== "boolean"){const err188 = {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 = [err188];}else {vErrors.push(err188);}errors++;}}if(data89.bootstrapFiles !== undefined){let data97 = data89.bootstrapFiles;if(Array.isArray(data97)){const len14 = data97.length;for(let i16=0; i16<len14; i16++){let data98 = data97[i16];if(typeof data98 === "string"){if(func2(data98) < 1){const err189 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err189];}else {vErrors.push(err189);}errors++;}}else {const err190 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err190];}else {vErrors.push(err190);}errors++;}}}else {const err191 = {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 = [err191];}else {vErrors.push(err191);}errors++;}}}else {const err192 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err192];}else {vErrors.push(err192);}errors++;}}if(data70.signals !== undefined){let data99 = data70.signals;if(data99 && typeof data99 == "object" && !Array.isArray(data99)){for(const key22 in data99){if(!((key22 === "rework") || (key22 === "retry"))){const err193 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err193];}else {vErrors.push(err193);}errors++;}}if(data99.rework !== undefined){let data100 = data99.rework;if(data100 && typeof data100 == "object" && !Array.isArray(data100)){for(const key23 in data100){if(!(key23 === "editsPerFile")){const err194 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key23},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err194];}else {vErrors.push(err194);}errors++;}}if(data100.editsPerFile !== undefined){let data101 = data100.editsPerFile;if(!(((typeof data101 == "number") && (!(data101 % 1) && !isNaN(data101))) && (isFinite(data101)))){const err195 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err195];}else {vErrors.push(err195);}errors++;}if((typeof data101 == "number") && (isFinite(data101))){if(data101 < 1 || isNaN(data101)){const err196 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err196];}else {vErrors.push(err196);}errors++;}}}}else {const err197 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err197];}else {vErrors.push(err197);}errors++;}}if(data99.retry !== undefined){let data102 = data99.retry;if(data102 && typeof data102 == "object" && !Array.isArray(data102)){for(const key24 in data102){if(!(key24 === "repeatCount")){const err198 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key24},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}}if(data102.repeatCount !== undefined){let data103 = data102.repeatCount;if(!(((typeof data103 == "number") && (!(data103 % 1) && !isNaN(data103))) && (isFinite(data103)))){const err199 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err199];}else {vErrors.push(err199);}errors++;}if((typeof data103 == "number") && (isFinite(data103))){if(data103 < 1 || isNaN(data103)){const err200 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}}}}else {const err201 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err201];}else {vErrors.push(err201);}errors++;}}}else {const err202 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err202];}else {vErrors.push(err202);}errors++;}}if(data70.quality !== undefined){let data104 = data70.quality;if(data104 && typeof data104 == "object" && !Array.isArray(data104)){for(const key25 in data104){if(!((((((((key25 === "gateScoping") || (key25 === "gates")) || (key25 === "formatAutofix")) || (key25 === "codingGuardrails")) || (key25 === "autoRefresh")) || (key25 === "baselineEpsilon")) || (key25 === "requireBaselines")) || (key25 === "navigability"))){const err203 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key25},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err203];}else {vErrors.push(err203);}errors++;}}if(data104.gateScoping !== undefined){let data105 = data104.gateScoping;if(data105 && typeof data105 == "object" && !Array.isArray(data105)){for(const key26 in data105){if(!((key26 === "scope") || (key26 === "diffRef"))){const err204 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key26},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err204];}else {vErrors.push(err204);}errors++;}}if(data105.scope !== undefined){let data106 = data105.scope;if(typeof data106 !== "string"){const err205 = {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 = [err205];}else {vErrors.push(err205);}errors++;}if(!((data106 === "diff") || (data106 === "full"))){const err206 = {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 = [err206];}else {vErrors.push(err206);}errors++;}}if(data105.diffRef !== undefined){let data107 = data105.diffRef;if(typeof data107 === "string"){if(func2(data107) < 1){const err207 = {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 = [err207];}else {vErrors.push(err207);}errors++;}}else {const err208 = {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 = [err208];}else {vErrors.push(err208);}errors++;}}}else {const err209 = {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 = [err209];}else {vErrors.push(err209);}errors++;}}if(data104.gates !== undefined){let data108 = data104.gates;if(data108 && typeof data108 == "object" && !Array.isArray(data108)){for(const key27 in data108){if(!((((((((key27 === "lint") || (key27 === "coverage")) || (key27 === "crap")) || (key27 === "maintainability")) || (key27 === "mutation")) || (key27 === "lighthouse")) || (key27 === "bundle-size")) || (key27 === "duplication"))){const err210 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key27},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err210];}else {vErrors.push(err210);}errors++;}}if(data108.lint !== undefined){let data109 = data108.lint;if(data109 && typeof data109 == "object" && !Array.isArray(data109)){for(const key28 in data109){if(!(((((key28 === "enabled") || (key28 === "baselinePath")) || (key28 === "tolerance")) || (key28 === "floors")) || (key28 === "components"))){const err211 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key28},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err211];}else {vErrors.push(err211);}errors++;}}if(data109.enabled !== undefined){if(typeof data109.enabled !== "boolean"){const err212 = {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 = [err212];}else {vErrors.push(err212);}errors++;}}if(data109.baselinePath !== undefined){let data111 = data109.baselinePath;const _errs287 = errors;const _errs288 = errors;if(typeof data111 === "string"){if(!pattern0.test(data111)){const err213 = {};if(vErrors === null){vErrors = [err213];}else {vErrors.push(err213);}errors++;}}var valid76 = _errs288 === errors;if(valid76){const err214 = {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 = [err214];}else {vErrors.push(err214);}errors++;}else {errors = _errs287;if(vErrors !== null){if(_errs287){vErrors.length = _errs287;}else {vErrors = null;}}}if(typeof data111 === "string"){if(func2(data111) < 1){const err215 = {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 = [err215];}else {vErrors.push(err215);}errors++;}}else {const err216 = {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 = [err216];}else {vErrors.push(err216);}errors++;}}if(data109.tolerance !== undefined){let data112 = data109.tolerance;if(data112 && typeof data112 == "object" && !Array.isArray(data112)){if(data112.kind === undefined){const err217 = {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 = [err217];}else {vErrors.push(err217);}errors++;}if(data112.value === undefined){const err218 = {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 = [err218];}else {vErrors.push(err218);}errors++;}for(const key29 in data112){if(!((key29 === "kind") || (key29 === "value"))){const err219 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key29},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err219];}else {vErrors.push(err219);}errors++;}}if(data112.kind !== undefined){let data113 = data112.kind;if(typeof data113 !== "string"){const err220 = {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 = [err220];}else {vErrors.push(err220);}errors++;}if(!((data113 === "absolute") || (data113 === "percent"))){const err221 = {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 = [err221];}else {vErrors.push(err221);}errors++;}}if(data112.value !== undefined){let data114 = data112.value;if((typeof data114 == "number") && (isFinite(data114))){if(data114 < 0 || isNaN(data114)){const err222 = {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 = [err222];}else {vErrors.push(err222);}errors++;}}else {const err223 = {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 = [err223];}else {vErrors.push(err223);}errors++;}}}else {const err224 = {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 = [err224];}else {vErrors.push(err224);}errors++;}}if(data109.floors !== undefined){let data115 = data109.floors;if(data115 && typeof data115 == "object" && !Array.isArray(data115)){for(const key30 in data115){let data116 = data115[key30];if(data116 && typeof data116 == "object" && !Array.isArray(data116)){for(const key31 in data116){let data117 = data116[key31];if(!((typeof data117 == "number") && (isFinite(data117)))){const err225 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key31.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 = [err225];}else {vErrors.push(err225);}errors++;}}}else {const err226 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key30.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 = [err226];}else {vErrors.push(err226);}errors++;}}}else {const err227 = {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 = [err227];}else {vErrors.push(err227);}errors++;}}if(data109.components !== undefined){let data118 = data109.components;if(data118 && typeof data118 == "object" && !Array.isArray(data118)){for(const key32 in data118){let data119 = data118[key32];if(Array.isArray(data119)){const len15 = data119.length;for(let i17=0; i17<len15; i17++){let data120 = data119[i17];if(typeof data120 === "string"){if(func2(data120) < 1){const err228 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err228];}else {vErrors.push(err228);}errors++;}}else {const err229 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err229];}else {vErrors.push(err229);}errors++;}}}else {const err230 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key32.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 = [err230];}else {vErrors.push(err230);}errors++;}}}else {const err231 = {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 = [err231];}else {vErrors.push(err231);}errors++;}}}else {const err232 = {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 = [err232];}else {vErrors.push(err232);}errors++;}}if(data108.coverage !== undefined){let data121 = data108.coverage;if(data121 && typeof data121 == "object" && !Array.isArray(data121)){for(const key33 in data121){if(!(((((((key33 === "enabled") || (key33 === "baselinePath")) || (key33 === "tolerance")) || (key33 === "floors")) || (key33 === "components")) || (key33 === "coveragePath")) || (key33 === "timeoutMs"))){const err233 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err233];}else {vErrors.push(err233);}errors++;}}if(data121.enabled !== undefined){if(typeof data121.enabled !== "boolean"){const err234 = {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 = [err234];}else {vErrors.push(err234);}errors++;}}if(data121.baselinePath !== undefined){let data123 = data121.baselinePath;const _errs318 = errors;const _errs319 = errors;if(typeof data123 === "string"){if(!pattern0.test(data123)){const err235 = {};if(vErrors === null){vErrors = [err235];}else {vErrors.push(err235);}errors++;}}var valid84 = _errs319 === errors;if(valid84){const err236 = {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 = [err236];}else {vErrors.push(err236);}errors++;}else {errors = _errs318;if(vErrors !== null){if(_errs318){vErrors.length = _errs318;}else {vErrors = null;}}}if(typeof data123 === "string"){if(func2(data123) < 1){const err237 = {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 = [err237];}else {vErrors.push(err237);}errors++;}}else {const err238 = {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 = [err238];}else {vErrors.push(err238);}errors++;}}if(data121.tolerance !== undefined){let data124 = data121.tolerance;if(data124 && typeof data124 == "object" && !Array.isArray(data124)){if(data124.kind === undefined){const err239 = {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 = [err239];}else {vErrors.push(err239);}errors++;}if(data124.value === undefined){const err240 = {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 = [err240];}else {vErrors.push(err240);}errors++;}for(const key34 in data124){if(!((key34 === "kind") || (key34 === "value"))){const err241 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key34},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err241];}else {vErrors.push(err241);}errors++;}}if(data124.kind !== undefined){let data125 = data124.kind;if(typeof data125 !== "string"){const err242 = {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 = [err242];}else {vErrors.push(err242);}errors++;}if(!((data125 === "absolute") || (data125 === "percent"))){const err243 = {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 = [err243];}else {vErrors.push(err243);}errors++;}}if(data124.value !== undefined){let data126 = data124.value;if((typeof data126 == "number") && (isFinite(data126))){if(data126 < 0 || isNaN(data126)){const err244 = {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 = [err244];}else {vErrors.push(err244);}errors++;}}else {const err245 = {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 = [err245];}else {vErrors.push(err245);}errors++;}}}else {const err246 = {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 = [err246];}else {vErrors.push(err246);}errors++;}}if(data121.floors !== undefined){let data127 = data121.floors;if(data127 && typeof data127 == "object" && !Array.isArray(data127)){for(const key35 in data127){let data128 = data127[key35];if(data128 && typeof data128 == "object" && !Array.isArray(data128)){for(const key36 in data128){let data129 = data128[key36];if(!((typeof data129 == "number") && (isFinite(data129)))){const err247 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key36.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 = [err247];}else {vErrors.push(err247);}errors++;}}}else {const err248 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key35.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 = [err248];}else {vErrors.push(err248);}errors++;}}}else {const err249 = {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 = [err249];}else {vErrors.push(err249);}errors++;}}if(data121.components !== undefined){let data130 = data121.components;if(data130 && typeof data130 == "object" && !Array.isArray(data130)){for(const key37 in data130){let data131 = data130[key37];if(Array.isArray(data131)){const len16 = data131.length;for(let i18=0; i18<len16; i18++){let data132 = data131[i18];if(typeof data132 === "string"){if(func2(data132) < 1){const err250 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err250];}else {vErrors.push(err250);}errors++;}}else {const err251 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err251];}else {vErrors.push(err251);}errors++;}}}else {const err252 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key37.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 = [err252];}else {vErrors.push(err252);}errors++;}}}else {const err253 = {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 = [err253];}else {vErrors.push(err253);}errors++;}}if(data121.coveragePath !== undefined){let data133 = data121.coveragePath;const _errs344 = errors;const _errs345 = errors;if(typeof data133 === "string"){if(!pattern0.test(data133)){const err254 = {};if(vErrors === null){vErrors = [err254];}else {vErrors.push(err254);}errors++;}}var valid91 = _errs345 === errors;if(valid91){const err255 = {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 = [err255];}else {vErrors.push(err255);}errors++;}else {errors = _errs344;if(vErrors !== null){if(_errs344){vErrors.length = _errs344;}else {vErrors = null;}}}if(typeof data133 === "string"){if(func2(data133) < 1){const err256 = {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 = [err256];}else {vErrors.push(err256);}errors++;}}else {const err257 = {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 = [err257];}else {vErrors.push(err257);}errors++;}}if(data121.timeoutMs !== undefined){let data134 = data121.timeoutMs;if(!(((typeof data134 == "number") && (!(data134 % 1) && !isNaN(data134))) && (isFinite(data134)))){const err258 = {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 = [err258];}else {vErrors.push(err258);}errors++;}if((typeof data134 == "number") && (isFinite(data134))){if(data134 < 1 || isNaN(data134)){const err259 = {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 = [err259];}else {vErrors.push(err259);}errors++;}}}}else {const err260 = {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 = [err260];}else {vErrors.push(err260);}errors++;}}if(data108.crap !== undefined){let data135 = data108.crap;if(data135 && typeof data135 == "object" && !Array.isArray(data135)){for(const key38 in data135){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key38))){const err261 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err261];}else {vErrors.push(err261);}errors++;}}if(data135.enabled !== undefined){if(typeof data135.enabled !== "boolean"){const err262 = {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 = [err262];}else {vErrors.push(err262);}errors++;}}if(data135.baselinePath !== undefined){let data137 = data135.baselinePath;const _errs355 = errors;const _errs356 = errors;if(typeof data137 === "string"){if(!pattern0.test(data137)){const err263 = {};if(vErrors === null){vErrors = [err263];}else {vErrors.push(err263);}errors++;}}var valid93 = _errs356 === errors;if(valid93){const err264 = {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 = [err264];}else {vErrors.push(err264);}errors++;}else {errors = _errs355;if(vErrors !== null){if(_errs355){vErrors.length = _errs355;}else {vErrors = null;}}}if(typeof data137 === "string"){if(func2(data137) < 1){const err265 = {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 = [err265];}else {vErrors.push(err265);}errors++;}}else {const err266 = {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 = [err266];}else {vErrors.push(err266);}errors++;}}if(data135.tolerance !== undefined){let data138 = data135.tolerance;if(data138 && typeof data138 == "object" && !Array.isArray(data138)){if(data138.kind === undefined){const err267 = {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 = [err267];}else {vErrors.push(err267);}errors++;}if(data138.value === undefined){const err268 = {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 = [err268];}else {vErrors.push(err268);}errors++;}for(const key39 in data138){if(!((key39 === "kind") || (key39 === "value"))){const err269 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key39},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err269];}else {vErrors.push(err269);}errors++;}}if(data138.kind !== undefined){let data139 = data138.kind;if(typeof data139 !== "string"){const err270 = {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 = [err270];}else {vErrors.push(err270);}errors++;}if(!((data139 === "absolute") || (data139 === "percent"))){const err271 = {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 = [err271];}else {vErrors.push(err271);}errors++;}}if(data138.value !== undefined){let data140 = data138.value;if((typeof data140 == "number") && (isFinite(data140))){if(data140 < 0 || isNaN(data140)){const err272 = {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 = [err272];}else {vErrors.push(err272);}errors++;}}else {const err273 = {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 = [err273];}else {vErrors.push(err273);}errors++;}}}else {const err274 = {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 = [err274];}else {vErrors.push(err274);}errors++;}}if(data135.floors !== undefined){let data141 = data135.floors;if(data141 && typeof data141 == "object" && !Array.isArray(data141)){for(const key40 in data141){let data142 = data141[key40];if(data142 && typeof data142 == "object" && !Array.isArray(data142)){for(const key41 in data142){let data143 = data142[key41];if(!((typeof data143 == "number") && (isFinite(data143)))){const err275 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key40.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key41.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 = [err275];}else {vErrors.push(err275);}errors++;}}}else {const err276 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key40.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 = [err276];}else {vErrors.push(err276);}errors++;}}}else {const err277 = {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 = [err277];}else {vErrors.push(err277);}errors++;}}if(data135.components !== undefined){let data144 = data135.components;if(data144 && typeof data144 == "object" && !Array.isArray(data144)){for(const key42 in data144){let data145 = data144[key42];if(Array.isArray(data145)){const len17 = data145.length;for(let i19=0; i19<len17; i19++){let data146 = data145[i19];if(typeof data146 === "string"){if(func2(data146) < 1){const err278 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key42.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err278];}else {vErrors.push(err278);}errors++;}}else {const err279 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key42.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err279];}else {vErrors.push(err279);}errors++;}}}else {const err280 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key42.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 = [err280];}else {vErrors.push(err280);}errors++;}}}else {const err281 = {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 = [err281];}else {vErrors.push(err281);}errors++;}}if(data135.targetDirs !== undefined){let data147 = data135.targetDirs;const _errs380 = errors;let valid100 = false;let passing2 = null;const _errs381 = errors;if(Array.isArray(data147)){const len18 = data147.length;for(let i20=0; i20<len18; i20++){if(typeof data147[i20] !== "string"){const err282 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i20,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err282];}else {vErrors.push(err282);}errors++;}}}else {const err283 = {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 = [err283];}else {vErrors.push(err283);}errors++;}var _valid3 = _errs381 === errors;if(_valid3){valid100 = true;passing2 = 0;}const _errs385 = errors;if(data147 && typeof data147 == "object" && !Array.isArray(data147)){for(const key43 in data147){if(!((key43 === "append") || (key43 === "prepend"))){const err284 = {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: key43},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err284];}else {vErrors.push(err284);}errors++;}}if(data147.append !== undefined){let data149 = data147.append;if(Array.isArray(data149)){const len19 = data149.length;for(let i21=0; i21<len19; i21++){if(typeof data149[i21] !== "string"){const err285 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i21,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err285];}else {vErrors.push(err285);}errors++;}}}else {const err286 = {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 = [err286];}else {vErrors.push(err286);}errors++;}}if(data147.prepend !== undefined){let data151 = data147.prepend;if(Array.isArray(data151)){const len20 = data151.length;for(let i22=0; i22<len20; i22++){if(typeof data151[i22] !== "string"){const err287 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i22,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err287];}else {vErrors.push(err287);}errors++;}}}else {const err288 = {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 = [err288];}else {vErrors.push(err288);}errors++;}}}else {const err289 = {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 = [err289];}else {vErrors.push(err289);}errors++;}var _valid3 = _errs385 === errors;if(_valid3 && valid100){valid100 = false;passing2 = [passing2, 1];}else {if(_valid3){valid100 = true;passing2 = 1;}}if(!valid100){const err290 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err290];}else {vErrors.push(err290);}errors++;}else {errors = _errs380;if(vErrors !== null){if(_errs380){vErrors.length = _errs380;}else {vErrors = null;}}}}if(data135.newMethodCeiling !== undefined){let data153 = data135.newMethodCeiling;if(!(((typeof data153 == "number") && (!(data153 % 1) && !isNaN(data153))) && (isFinite(data153)))){const err291 = {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 = [err291];}else {vErrors.push(err291);}errors++;}if((typeof data153 == "number") && (isFinite(data153))){if(data153 < 1 || isNaN(data153)){const err292 = {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 = [err292];}else {vErrors.push(err292);}errors++;}}}if(data135.requireCoverage !== undefined){if(typeof data135.requireCoverage !== "boolean"){const err293 = {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 = [err293];}else {vErrors.push(err293);}errors++;}}if(data135.minMethodResolutionRate !== undefined){let data155 = data135.minMethodResolutionRate;if((typeof data155 == "number") && (isFinite(data155))){if(data155 > 1 || isNaN(data155)){const err294 = {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 = [err294];}else {vErrors.push(err294);}errors++;}if(data155 < 0 || isNaN(data155)){const err295 = {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 = [err295];}else {vErrors.push(err295);}errors++;}}else {const err296 = {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 = [err296];}else {vErrors.push(err296);}errors++;}}if(data135.friction !== undefined){let data156 = data135.friction;if(data156 && typeof data156 == "object" && !Array.isArray(data156)){for(const key44 in data156){if(!(key44 === "markerKey")){const err297 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key44},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err297];}else {vErrors.push(err297);}errors++;}}if(data156.markerKey !== undefined){let data157 = data156.markerKey;if(typeof data157 === "string"){if(func2(data157) < 1){const err298 = {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 = [err298];}else {vErrors.push(err298);}errors++;}}else {const err299 = {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 = [err299];}else {vErrors.push(err299);}errors++;}}}else {const err300 = {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 = [err300];}else {vErrors.push(err300);}errors++;}}if(data135.refreshTag !== undefined){let data158 = data135.refreshTag;const _errs409 = errors;const _errs410 = errors;if(typeof data158 === "string"){if(!pattern0.test(data158)){const err301 = {};if(vErrors === null){vErrors = [err301];}else {vErrors.push(err301);}errors++;}}var valid109 = _errs410 === errors;if(valid109){const err302 = {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 = [err302];}else {vErrors.push(err302);}errors++;}else {errors = _errs409;if(vErrors !== null){if(_errs409){vErrors.length = _errs409;}else {vErrors = null;}}}if(typeof data158 === "string"){if(func2(data158) < 1){const err303 = {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 = [err303];}else {vErrors.push(err303);}errors++;}}else {const err304 = {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 = [err304];}else {vErrors.push(err304);}errors++;}}if(data135.refreshTimeoutMs !== undefined){let data159 = data135.refreshTimeoutMs;if(!(((typeof data159 == "number") && (!(data159 % 1) && !isNaN(data159))) && (isFinite(data159)))){const err305 = {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 = [err305];}else {vErrors.push(err305);}errors++;}if((typeof data159 == "number") && (isFinite(data159))){if(data159 < 1 || isNaN(data159)){const err306 = {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 = [err306];}else {vErrors.push(err306);}errors++;}}}if(data135.ignoreGlobs !== undefined){let data160 = data135.ignoreGlobs;if(Array.isArray(data160)){const len21 = data160.length;for(let i23=0; i23<len21; i23++){let data161 = data160[i23];if(typeof data161 === "string"){if(func2(data161) < 1){const err307 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err307];}else {vErrors.push(err307);}errors++;}}else {const err308 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err308];}else {vErrors.push(err308);}errors++;}}}else {const err309 = {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 = [err309];}else {vErrors.push(err309);}errors++;}}if(data135.incrementalCoverage !== undefined){let data162 = data135.incrementalCoverage;if(data162 && typeof data162 == "object" && !Array.isArray(data162)){for(const key45 in data162){if(!((((key45 === "skipWhenUnchanged") || (key45 === "baselineJoin")) || (key45 === "enabled")) || (key45 === "baseRef"))){const err310 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key45},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err310];}else {vErrors.push(err310);}errors++;}}if(data162.skipWhenUnchanged !== undefined){if(typeof data162.skipWhenUnchanged !== "boolean"){const err311 = {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 = [err311];}else {vErrors.push(err311);}errors++;}}if(data162.baselineJoin !== undefined){if(typeof data162.baselineJoin !== "boolean"){const err312 = {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 = [err312];}else {vErrors.push(err312);}errors++;}}if(data162.enabled !== undefined){if(typeof data162.enabled !== "boolean"){const err313 = {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 = [err313];}else {vErrors.push(err313);}errors++;}}if(data162.baseRef !== undefined){let data166 = data162.baseRef;if(typeof data166 === "string"){if(func2(data166) < 1){const err314 = {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 = [err314];}else {vErrors.push(err314);}errors++;}}else {const err315 = {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 = [err315];}else {vErrors.push(err315);}errors++;}}}else {const err316 = {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 = [err316];}else {vErrors.push(err316);}errors++;}}}else {const err317 = {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 = [err317];}else {vErrors.push(err317);}errors++;}}if(data108.maintainability !== undefined){let data167 = data108.maintainability;if(data167 && typeof data167 == "object" && !Array.isArray(data167)){for(const key46 in data167){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties, key46))){const err318 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key46},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err318];}else {vErrors.push(err318);}errors++;}}if(data167.enabled !== undefined){if(typeof data167.enabled !== "boolean"){const err319 = {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 = [err319];}else {vErrors.push(err319);}errors++;}}if(data167.baselinePath !== undefined){let data169 = data167.baselinePath;const _errs435 = errors;const _errs436 = errors;if(typeof data169 === "string"){if(!pattern0.test(data169)){const err320 = {};if(vErrors === null){vErrors = [err320];}else {vErrors.push(err320);}errors++;}}var valid114 = _errs436 === errors;if(valid114){const err321 = {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 = [err321];}else {vErrors.push(err321);}errors++;}else {errors = _errs435;if(vErrors !== null){if(_errs435){vErrors.length = _errs435;}else {vErrors = null;}}}if(typeof data169 === "string"){if(func2(data169) < 1){const err322 = {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 = [err322];}else {vErrors.push(err322);}errors++;}}else {const err323 = {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 = [err323];}else {vErrors.push(err323);}errors++;}}if(data167.tolerance !== undefined){let data170 = data167.tolerance;if(data170 && typeof data170 == "object" && !Array.isArray(data170)){if(data170.kind === undefined){const err324 = {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 = [err324];}else {vErrors.push(err324);}errors++;}if(data170.value === undefined){const err325 = {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 = [err325];}else {vErrors.push(err325);}errors++;}for(const key47 in data170){if(!((key47 === "kind") || (key47 === "value"))){const err326 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key47},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err326];}else {vErrors.push(err326);}errors++;}}if(data170.kind !== undefined){let data171 = data170.kind;if(typeof data171 !== "string"){const err327 = {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 = [err327];}else {vErrors.push(err327);}errors++;}if(!((data171 === "absolute") || (data171 === "percent"))){const err328 = {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 = [err328];}else {vErrors.push(err328);}errors++;}}if(data170.value !== undefined){let data172 = data170.value;if((typeof data172 == "number") && (isFinite(data172))){if(data172 < 0 || isNaN(data172)){const err329 = {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 = [err329];}else {vErrors.push(err329);}errors++;}}else {const err330 = {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 = [err330];}else {vErrors.push(err330);}errors++;}}}else {const err331 = {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 = [err331];}else {vErrors.push(err331);}errors++;}}if(data167.floors !== undefined){let data173 = data167.floors;if(data173 && typeof data173 == "object" && !Array.isArray(data173)){for(const key48 in data173){let data174 = data173[key48];if(data174 && typeof data174 == "object" && !Array.isArray(data174)){for(const key49 in data174){let data175 = data174[key49];if(!((typeof data175 == "number") && (isFinite(data175)))){const err332 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key48.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key49.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 = [err332];}else {vErrors.push(err332);}errors++;}}}else {const err333 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key48.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 = [err333];}else {vErrors.push(err333);}errors++;}}}else {const err334 = {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 = [err334];}else {vErrors.push(err334);}errors++;}}if(data167.components !== undefined){let data176 = data167.components;if(data176 && typeof data176 == "object" && !Array.isArray(data176)){for(const key50 in data176){let data177 = data176[key50];if(Array.isArray(data177)){const len22 = data177.length;for(let i24=0; i24<len22; i24++){let data178 = data177[i24];if(typeof data178 === "string"){if(func2(data178) < 1){const err335 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key50.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err335];}else {vErrors.push(err335);}errors++;}}else {const err336 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key50.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err336];}else {vErrors.push(err336);}errors++;}}}else {const err337 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key50.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 = [err337];}else {vErrors.push(err337);}errors++;}}}else {const err338 = {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 = [err338];}else {vErrors.push(err338);}errors++;}}if(data167.targetDirs !== undefined){let data179 = data167.targetDirs;const _errs460 = errors;let valid121 = false;let passing3 = null;const _errs461 = errors;if(Array.isArray(data179)){const len23 = data179.length;for(let i25=0; i25<len23; i25++){if(typeof data179[i25] !== "string"){const err339 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err339];}else {vErrors.push(err339);}errors++;}}}else {const err340 = {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 = [err340];}else {vErrors.push(err340);}errors++;}var _valid4 = _errs461 === errors;if(_valid4){valid121 = true;passing3 = 0;}const _errs465 = errors;if(data179 && typeof data179 == "object" && !Array.isArray(data179)){for(const key51 in data179){if(!((key51 === "append") || (key51 === "prepend"))){const err341 = {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: key51},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err341];}else {vErrors.push(err341);}errors++;}}if(data179.append !== undefined){let data181 = data179.append;if(Array.isArray(data181)){const len24 = data181.length;for(let i26=0; i26<len24; i26++){if(typeof data181[i26] !== "string"){const err342 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i26,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err342];}else {vErrors.push(err342);}errors++;}}}else {const err343 = {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 = [err343];}else {vErrors.push(err343);}errors++;}}if(data179.prepend !== undefined){let data183 = data179.prepend;if(Array.isArray(data183)){const len25 = data183.length;for(let i27=0; i27<len25; i27++){if(typeof data183[i27] !== "string"){const err344 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i27,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err344];}else {vErrors.push(err344);}errors++;}}}else {const err345 = {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 = [err345];}else {vErrors.push(err345);}errors++;}}}else {const err346 = {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 = [err346];}else {vErrors.push(err346);}errors++;}var _valid4 = _errs465 === errors;if(_valid4 && valid121){valid121 = false;passing3 = [passing3, 1];}else {if(_valid4){valid121 = true;passing3 = 1;}}if(!valid121){const err347 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err347];}else {vErrors.push(err347);}errors++;}else {errors = _errs460;if(vErrors !== null){if(_errs460){vErrors.length = _errs460;}else {vErrors = null;}}}}if(data167.refreshTag !== undefined){let data185 = data167.refreshTag;const _errs478 = errors;const _errs479 = errors;if(typeof data185 === "string"){if(!pattern0.test(data185)){const err348 = {};if(vErrors === null){vErrors = [err348];}else {vErrors.push(err348);}errors++;}}var valid129 = _errs479 === errors;if(valid129){const err349 = {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 = [err349];}else {vErrors.push(err349);}errors++;}else {errors = _errs478;if(vErrors !== null){if(_errs478){vErrors.length = _errs478;}else {vErrors = null;}}}if(typeof data185 === "string"){if(func2(data185) < 1){const err350 = {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 = [err350];}else {vErrors.push(err350);}errors++;}}else {const err351 = {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 = [err351];}else {vErrors.push(err351);}errors++;}}if(data167.refreshTimeoutMs !== undefined){let data186 = data167.refreshTimeoutMs;if(!(((typeof data186 == "number") && (!(data186 % 1) && !isNaN(data186))) && (isFinite(data186)))){const err352 = {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 = [err352];}else {vErrors.push(err352);}errors++;}if((typeof data186 == "number") && (isFinite(data186))){if(data186 < 1 || isNaN(data186)){const err353 = {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 = [err353];}else {vErrors.push(err353);}errors++;}}}if(data167.ignoreGlobs !== undefined){let data187 = data167.ignoreGlobs;if(Array.isArray(data187)){const len26 = data187.length;for(let i28=0; i28<len26; i28++){let data188 = data187[i28];if(typeof data188 === "string"){if(func2(data188) < 1){const err354 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err354];}else {vErrors.push(err354);}errors++;}}else {const err355 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err355];}else {vErrors.push(err355);}errors++;}}}else {const err356 = {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 = [err356];}else {vErrors.push(err356);}errors++;}}}else {const err357 = {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 = [err357];}else {vErrors.push(err357);}errors++;}}if(data108.mutation !== undefined){let data189 = data108.mutation;if(data189 && typeof data189 == "object" && !Array.isArray(data189)){for(const key52 in data189){if(!((((((key52 === "enabled") || (key52 === "baselinePath")) || (key52 === "tolerance")) || (key52 === "floors")) || (key52 === "components")) || (key52 === "strykerConfigPath"))){const err358 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key52},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err358];}else {vErrors.push(err358);}errors++;}}if(data189.enabled !== undefined){if(typeof data189.enabled !== "boolean"){const err359 = {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 = [err359];}else {vErrors.push(err359);}errors++;}}if(data189.baselinePath !== undefined){let data191 = data189.baselinePath;const _errs493 = errors;const _errs494 = errors;if(typeof data191 === "string"){if(!pattern0.test(data191)){const err360 = {};if(vErrors === null){vErrors = [err360];}else {vErrors.push(err360);}errors++;}}var valid133 = _errs494 === errors;if(valid133){const err361 = {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 = [err361];}else {vErrors.push(err361);}errors++;}else {errors = _errs493;if(vErrors !== null){if(_errs493){vErrors.length = _errs493;}else {vErrors = null;}}}if(typeof data191 === "string"){if(func2(data191) < 1){const err362 = {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 = [err362];}else {vErrors.push(err362);}errors++;}}else {const err363 = {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 = [err363];}else {vErrors.push(err363);}errors++;}}if(data189.tolerance !== undefined){let data192 = data189.tolerance;if(data192 && typeof data192 == "object" && !Array.isArray(data192)){if(data192.kind === undefined){const err364 = {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 = [err364];}else {vErrors.push(err364);}errors++;}if(data192.value === undefined){const err365 = {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 = [err365];}else {vErrors.push(err365);}errors++;}for(const key53 in data192){if(!((key53 === "kind") || (key53 === "value"))){const err366 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key53},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err366];}else {vErrors.push(err366);}errors++;}}if(data192.kind !== undefined){let data193 = data192.kind;if(typeof data193 !== "string"){const err367 = {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 = [err367];}else {vErrors.push(err367);}errors++;}if(!((data193 === "absolute") || (data193 === "percent"))){const err368 = {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 = [err368];}else {vErrors.push(err368);}errors++;}}if(data192.value !== undefined){let data194 = data192.value;if((typeof data194 == "number") && (isFinite(data194))){if(data194 < 0 || isNaN(data194)){const err369 = {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 = [err369];}else {vErrors.push(err369);}errors++;}}else {const err370 = {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 = [err370];}else {vErrors.push(err370);}errors++;}}}else {const err371 = {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 = [err371];}else {vErrors.push(err371);}errors++;}}if(data189.floors !== undefined){let data195 = data189.floors;if(data195 && typeof data195 == "object" && !Array.isArray(data195)){for(const key54 in data195){let data196 = data195[key54];if(data196 && typeof data196 == "object" && !Array.isArray(data196)){for(const key55 in data196){let data197 = data196[key55];if(!((typeof data197 == "number") && (isFinite(data197)))){const err372 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key55.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 = [err372];}else {vErrors.push(err372);}errors++;}}}else {const err373 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key54.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 = [err373];}else {vErrors.push(err373);}errors++;}}}else {const err374 = {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 = [err374];}else {vErrors.push(err374);}errors++;}}if(data189.components !== undefined){let data198 = data189.components;if(data198 && typeof data198 == "object" && !Array.isArray(data198)){for(const key56 in data198){let data199 = data198[key56];if(Array.isArray(data199)){const len27 = data199.length;for(let i29=0; i29<len27; i29++){let data200 = data199[i29];if(typeof data200 === "string"){if(func2(data200) < 1){const err375 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err375];}else {vErrors.push(err375);}errors++;}}else {const err376 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err376];}else {vErrors.push(err376);}errors++;}}}else {const err377 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key56.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 = [err377];}else {vErrors.push(err377);}errors++;}}}else {const err378 = {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 = [err378];}else {vErrors.push(err378);}errors++;}}if(data189.strykerConfigPath !== undefined){let data201 = data189.strykerConfigPath;if((typeof data201 !== "string") && (data201 !== null)){const err379 = {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 = [err379];}else {vErrors.push(err379);}errors++;}const _errs519 = errors;const _errs520 = errors;if(errors === _errs520){if(typeof data201 === "string"){if(!pattern0.test(data201)){const err380 = {};if(vErrors === null){vErrors = [err380];}else {vErrors.push(err380);}errors++;}}else {const err381 = {};if(vErrors === null){vErrors = [err381];}else {vErrors.push(err381);}errors++;}}var valid140 = _errs520 === errors;if(valid140){const err382 = {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 = [err382];}else {vErrors.push(err382);}errors++;}else {errors = _errs519;if(vErrors !== null){if(_errs519){vErrors.length = _errs519;}else {vErrors = null;}}}if(typeof data201 === "string"){if(func2(data201) < 1){const err383 = {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 = [err383];}else {vErrors.push(err383);}errors++;}}}}else {const err384 = {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 = [err384];}else {vErrors.push(err384);}errors++;}}if(data108.lighthouse !== undefined){let data202 = data108.lighthouse;if(data202 && typeof data202 == "object" && !Array.isArray(data202)){for(const key57 in data202){if(!(((((((key57 === "enabled") || (key57 === "baselinePath")) || (key57 === "tolerance")) || (key57 === "floors")) || (key57 === "components")) || (key57 === "baseUrl")) || (key57 === "routes"))){const err385 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err385];}else {vErrors.push(err385);}errors++;}}if(data202.enabled !== undefined){if(typeof data202.enabled !== "boolean"){const err386 = {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 = [err386];}else {vErrors.push(err386);}errors++;}}if(data202.baselinePath !== undefined){let data204 = data202.baselinePath;const _errs529 = errors;const _errs530 = errors;if(typeof data204 === "string"){if(!pattern0.test(data204)){const err387 = {};if(vErrors === null){vErrors = [err387];}else {vErrors.push(err387);}errors++;}}var valid142 = _errs530 === errors;if(valid142){const err388 = {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 = [err388];}else {vErrors.push(err388);}errors++;}else {errors = _errs529;if(vErrors !== null){if(_errs529){vErrors.length = _errs529;}else {vErrors = null;}}}if(typeof data204 === "string"){if(func2(data204) < 1){const err389 = {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 = [err389];}else {vErrors.push(err389);}errors++;}}else {const err390 = {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 = [err390];}else {vErrors.push(err390);}errors++;}}if(data202.tolerance !== undefined){let data205 = data202.tolerance;if(data205 && typeof data205 == "object" && !Array.isArray(data205)){if(data205.kind === undefined){const err391 = {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 = [err391];}else {vErrors.push(err391);}errors++;}if(data205.value === undefined){const err392 = {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 = [err392];}else {vErrors.push(err392);}errors++;}for(const key58 in data205){if(!((key58 === "kind") || (key58 === "value"))){const err393 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key58},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err393];}else {vErrors.push(err393);}errors++;}}if(data205.kind !== undefined){let data206 = data205.kind;if(typeof data206 !== "string"){const err394 = {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 = [err394];}else {vErrors.push(err394);}errors++;}if(!((data206 === "absolute") || (data206 === "percent"))){const err395 = {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 = [err395];}else {vErrors.push(err395);}errors++;}}if(data205.value !== undefined){let data207 = data205.value;if((typeof data207 == "number") && (isFinite(data207))){if(data207 < 0 || isNaN(data207)){const err396 = {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 = [err396];}else {vErrors.push(err396);}errors++;}}else {const err397 = {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 = [err397];}else {vErrors.push(err397);}errors++;}}}else {const err398 = {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 = [err398];}else {vErrors.push(err398);}errors++;}}if(data202.floors !== undefined){let data208 = data202.floors;if(data208 && typeof data208 == "object" && !Array.isArray(data208)){for(const key59 in data208){let data209 = data208[key59];if(data209 && typeof data209 == "object" && !Array.isArray(data209)){for(const key60 in data209){let data210 = data209[key60];if(!((typeof data210 == "number") && (isFinite(data210)))){const err399 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key59.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key60.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 = [err399];}else {vErrors.push(err399);}errors++;}}}else {const err400 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key59.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 = [err400];}else {vErrors.push(err400);}errors++;}}}else {const err401 = {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 = [err401];}else {vErrors.push(err401);}errors++;}}if(data202.components !== undefined){let data211 = data202.components;if(data211 && typeof data211 == "object" && !Array.isArray(data211)){for(const key61 in data211){let data212 = data211[key61];if(Array.isArray(data212)){const len28 = data212.length;for(let i30=0; i30<len28; i30++){let data213 = data212[i30];if(typeof data213 === "string"){if(func2(data213) < 1){const err402 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key61.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err402];}else {vErrors.push(err402);}errors++;}}else {const err403 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key61.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err403];}else {vErrors.push(err403);}errors++;}}}else {const err404 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key61.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 = [err404];}else {vErrors.push(err404);}errors++;}}}else {const err405 = {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 = [err405];}else {vErrors.push(err405);}errors++;}}if(data202.baseUrl !== undefined){let data214 = data202.baseUrl;if((typeof data214 !== "string") && (data214 !== null)){const err406 = {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 = [err406];}else {vErrors.push(err406);}errors++;}const _errs555 = errors;const _errs556 = errors;if(errors === _errs556){if(typeof data214 === "string"){if(!pattern0.test(data214)){const err407 = {};if(vErrors === null){vErrors = [err407];}else {vErrors.push(err407);}errors++;}}else {const err408 = {};if(vErrors === null){vErrors = [err408];}else {vErrors.push(err408);}errors++;}}var valid149 = _errs556 === errors;if(valid149){const err409 = {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 = [err409];}else {vErrors.push(err409);}errors++;}else {errors = _errs555;if(vErrors !== null){if(_errs555){vErrors.length = _errs555;}else {vErrors = null;}}}if(typeof data214 === "string"){if(func2(data214) < 1){const err410 = {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 = [err410];}else {vErrors.push(err410);}errors++;}}}if(data202.routes !== undefined){let data215 = data202.routes;if(Array.isArray(data215)){const len29 = data215.length;for(let i31=0; i31<len29; i31++){let data216 = data215[i31];if(data216 && typeof data216 == "object" && !Array.isArray(data216)){if(data216.path === undefined){const err411 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err411];}else {vErrors.push(err411);}errors++;}for(const key62 in data216){if(!((key62 === "path") || (key62 === "formFactor"))){const err412 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key62},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err412];}else {vErrors.push(err412);}errors++;}}if(data216.path !== undefined){let data217 = data216.path;if(typeof data217 === "string"){if(func2(data217) < 1){const err413 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err413];}else {vErrors.push(err413);}errors++;}}else {const err414 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err414];}else {vErrors.push(err414);}errors++;}}if(data216.formFactor !== undefined){let data218 = data216.formFactor;if(typeof data218 !== "string"){const err415 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err415];}else {vErrors.push(err415);}errors++;}if(!((data218 === "mobile") || (data218 === "desktop"))){const err416 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.routes.items.properties.formFactor.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err416];}else {vErrors.push(err416);}errors++;}}}else {const err417 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err417];}else {vErrors.push(err417);}errors++;}}}else {const err418 = {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 = [err418];}else {vErrors.push(err418);}errors++;}}}else {const err419 = {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 = [err419];}else {vErrors.push(err419);}errors++;}}if(data108["bundle-size"] !== undefined){let data219 = data108["bundle-size"];if(data219 && typeof data219 == "object" && !Array.isArray(data219)){for(const key63 in data219){if(!((((((key63 === "enabled") || (key63 === "baselinePath")) || (key63 === "tolerance")) || (key63 === "floors")) || (key63 === "components")) || (key63 === "bundles"))){const err420 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err420];}else {vErrors.push(err420);}errors++;}}if(data219.enabled !== undefined){if(typeof data219.enabled !== "boolean"){const err421 = {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 = [err421];}else {vErrors.push(err421);}errors++;}}if(data219.baselinePath !== undefined){let data221 = data219.baselinePath;const _errs574 = errors;const _errs575 = errors;if(typeof data221 === "string"){if(!pattern0.test(data221)){const err422 = {};if(vErrors === null){vErrors = [err422];}else {vErrors.push(err422);}errors++;}}var valid154 = _errs575 === errors;if(valid154){const err423 = {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 = [err423];}else {vErrors.push(err423);}errors++;}else {errors = _errs574;if(vErrors !== null){if(_errs574){vErrors.length = _errs574;}else {vErrors = null;}}}if(typeof data221 === "string"){if(func2(data221) < 1){const err424 = {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 = [err424];}else {vErrors.push(err424);}errors++;}}else {const err425 = {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 = [err425];}else {vErrors.push(err425);}errors++;}}if(data219.tolerance !== undefined){let data222 = data219.tolerance;if(data222 && typeof data222 == "object" && !Array.isArray(data222)){if(data222.kind === undefined){const err426 = {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 = [err426];}else {vErrors.push(err426);}errors++;}if(data222.value === undefined){const err427 = {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 = [err427];}else {vErrors.push(err427);}errors++;}for(const key64 in data222){if(!((key64 === "kind") || (key64 === "value"))){const err428 = {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: key64},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err428];}else {vErrors.push(err428);}errors++;}}if(data222.kind !== undefined){let data223 = data222.kind;if(typeof data223 !== "string"){const err429 = {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 = [err429];}else {vErrors.push(err429);}errors++;}if(!((data223 === "absolute") || (data223 === "percent"))){const err430 = {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 = [err430];}else {vErrors.push(err430);}errors++;}}if(data222.value !== undefined){let data224 = data222.value;if((typeof data224 == "number") && (isFinite(data224))){if(data224 < 0 || isNaN(data224)){const err431 = {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 = [err431];}else {vErrors.push(err431);}errors++;}}else {const err432 = {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 = [err432];}else {vErrors.push(err432);}errors++;}}}else {const err433 = {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 = [err433];}else {vErrors.push(err433);}errors++;}}if(data219.floors !== undefined){let data225 = data219.floors;if(data225 && typeof data225 == "object" && !Array.isArray(data225)){for(const key65 in data225){let data226 = data225[key65];if(data226 && typeof data226 == "object" && !Array.isArray(data226)){for(const key66 in data226){let data227 = data226[key66];if(!((typeof data227 == "number") && (isFinite(data227)))){const err434 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key65.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key66.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 = [err434];}else {vErrors.push(err434);}errors++;}}}else {const err435 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key65.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 = [err435];}else {vErrors.push(err435);}errors++;}}}else {const err436 = {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 = [err436];}else {vErrors.push(err436);}errors++;}}if(data219.components !== undefined){let data228 = data219.components;if(data228 && typeof data228 == "object" && !Array.isArray(data228)){for(const key67 in data228){let data229 = data228[key67];if(Array.isArray(data229)){const len30 = data229.length;for(let i32=0; i32<len30; i32++){let data230 = data229[i32];if(typeof data230 === "string"){if(func2(data230) < 1){const err437 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key67.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err437];}else {vErrors.push(err437);}errors++;}}else {const err438 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key67.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err438];}else {vErrors.push(err438);}errors++;}}}else {const err439 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key67.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 = [err439];}else {vErrors.push(err439);}errors++;}}}else {const err440 = {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 = [err440];}else {vErrors.push(err440);}errors++;}}if(data219.bundles !== undefined){let data231 = data219.bundles;if(Array.isArray(data231)){const len31 = data231.length;for(let i33=0; i33<len31; i33++){let data232 = data231[i33];if(data232 && typeof data232 == "object" && !Array.isArray(data232)){if(data232.name === undefined){const err441 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err441];}else {vErrors.push(err441);}errors++;}if(data232.path === undefined){const err442 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err442];}else {vErrors.push(err442);}errors++;}if(data232.limit === undefined){const err443 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "limit"},message:"must have required property '"+"limit"+"'"};if(vErrors === null){vErrors = [err443];}else {vErrors.push(err443);}errors++;}for(const key68 in data232){if(!(((key68 === "name") || (key68 === "path")) || (key68 === "limit"))){const err444 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key68},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err444];}else {vErrors.push(err444);}errors++;}}if(data232.name !== undefined){let data233 = data232.name;if(typeof data233 === "string"){if(func2(data233) < 1){const err445 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err445];}else {vErrors.push(err445);}errors++;}}else {const err446 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err446];}else {vErrors.push(err446);}errors++;}}if(data232.path !== undefined){let data234 = data232.path;if(typeof data234 === "string"){if(func2(data234) < 1){const err447 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err447];}else {vErrors.push(err447);}errors++;}}else {const err448 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err448];}else {vErrors.push(err448);}errors++;}}if(data232.limit !== undefined){let data235 = data232.limit;if(typeof data235 === "string"){if(func2(data235) < 1){const err449 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err449];}else {vErrors.push(err449);}errors++;}}else {const err450 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err450];}else {vErrors.push(err450);}errors++;}}}else {const err451 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err451];}else {vErrors.push(err451);}errors++;}}}else {const err452 = {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 = [err452];}else {vErrors.push(err452);}errors++;}}}else {const err453 = {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 = [err453];}else {vErrors.push(err453);}errors++;}}if(data108.duplication !== undefined){let data236 = data108.duplication;if(data236 && typeof data236 == "object" && !Array.isArray(data236)){for(const key69 in data236){if(!((((((((key69 === "enabled") || (key69 === "baselinePath")) || (key69 === "tolerance")) || (key69 === "floors")) || (key69 === "components")) || (key69 === "targetDirs")) || (key69 === "refreshTimeoutMs")) || (key69 === "ignoreGlobs"))){const err454 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err454];}else {vErrors.push(err454);}errors++;}}if(data236.enabled !== undefined){if(typeof data236.enabled !== "boolean"){const err455 = {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 = [err455];}else {vErrors.push(err455);}errors++;}}if(data236.baselinePath !== undefined){let data238 = data236.baselinePath;const _errs616 = errors;const _errs617 = errors;if(typeof data238 === "string"){if(!pattern0.test(data238)){const err456 = {};if(vErrors === null){vErrors = [err456];}else {vErrors.push(err456);}errors++;}}var valid165 = _errs617 === errors;if(valid165){const err457 = {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 = [err457];}else {vErrors.push(err457);}errors++;}else {errors = _errs616;if(vErrors !== null){if(_errs616){vErrors.length = _errs616;}else {vErrors = null;}}}if(typeof data238 === "string"){if(func2(data238) < 1){const err458 = {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 = [err458];}else {vErrors.push(err458);}errors++;}}else {const err459 = {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 = [err459];}else {vErrors.push(err459);}errors++;}}if(data236.tolerance !== undefined){let data239 = data236.tolerance;if(data239 && typeof data239 == "object" && !Array.isArray(data239)){if(data239.kind === undefined){const err460 = {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 = [err460];}else {vErrors.push(err460);}errors++;}if(data239.value === undefined){const err461 = {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 = [err461];}else {vErrors.push(err461);}errors++;}for(const key70 in data239){if(!((key70 === "kind") || (key70 === "value"))){const err462 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key70},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err462];}else {vErrors.push(err462);}errors++;}}if(data239.kind !== undefined){let data240 = data239.kind;if(typeof data240 !== "string"){const err463 = {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 = [err463];}else {vErrors.push(err463);}errors++;}if(!((data240 === "absolute") || (data240 === "percent"))){const err464 = {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 = [err464];}else {vErrors.push(err464);}errors++;}}if(data239.value !== undefined){let data241 = data239.value;if((typeof data241 == "number") && (isFinite(data241))){if(data241 < 0 || isNaN(data241)){const err465 = {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 = [err465];}else {vErrors.push(err465);}errors++;}}else {const err466 = {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 = [err466];}else {vErrors.push(err466);}errors++;}}}else {const err467 = {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 = [err467];}else {vErrors.push(err467);}errors++;}}if(data236.floors !== undefined){let data242 = data236.floors;if(data242 && typeof data242 == "object" && !Array.isArray(data242)){for(const key71 in data242){let data243 = data242[key71];if(data243 && typeof data243 == "object" && !Array.isArray(data243)){for(const key72 in data243){let data244 = data243[key72];if(!((typeof data244 == "number") && (isFinite(data244)))){const err468 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key71.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key72.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 = [err468];}else {vErrors.push(err468);}errors++;}}}else {const err469 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key71.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 = [err469];}else {vErrors.push(err469);}errors++;}}}else {const err470 = {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 = [err470];}else {vErrors.push(err470);}errors++;}}if(data236.components !== undefined){let data245 = data236.components;if(data245 && typeof data245 == "object" && !Array.isArray(data245)){for(const key73 in data245){let data246 = data245[key73];if(Array.isArray(data246)){const len32 = data246.length;for(let i34=0; i34<len32; i34++){let data247 = data246[i34];if(typeof data247 === "string"){if(func2(data247) < 1){const err471 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key73.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err471];}else {vErrors.push(err471);}errors++;}}else {const err472 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key73.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err472];}else {vErrors.push(err472);}errors++;}}}else {const err473 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key73.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 = [err473];}else {vErrors.push(err473);}errors++;}}}else {const err474 = {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 = [err474];}else {vErrors.push(err474);}errors++;}}if(data236.targetDirs !== undefined){let data248 = data236.targetDirs;const _errs641 = errors;let valid172 = false;let passing4 = null;const _errs642 = errors;if(Array.isArray(data248)){const len33 = data248.length;for(let i35=0; i35<len33; i35++){if(typeof data248[i35] !== "string"){const err475 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i35,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err475];}else {vErrors.push(err475);}errors++;}}}else {const err476 = {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 = [err476];}else {vErrors.push(err476);}errors++;}var _valid5 = _errs642 === errors;if(_valid5){valid172 = true;passing4 = 0;}const _errs646 = errors;if(data248 && typeof data248 == "object" && !Array.isArray(data248)){for(const key74 in data248){if(!((key74 === "append") || (key74 === "prepend"))){const err477 = {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: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err477];}else {vErrors.push(err477);}errors++;}}if(data248.append !== undefined){let data250 = data248.append;if(Array.isArray(data250)){const len34 = data250.length;for(let i36=0; i36<len34; i36++){if(typeof data250[i36] !== "string"){const err478 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i36,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err478];}else {vErrors.push(err478);}errors++;}}}else {const err479 = {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 = [err479];}else {vErrors.push(err479);}errors++;}}if(data248.prepend !== undefined){let data252 = data248.prepend;if(Array.isArray(data252)){const len35 = data252.length;for(let i37=0; i37<len35; i37++){if(typeof data252[i37] !== "string"){const err480 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i37,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err480];}else {vErrors.push(err480);}errors++;}}}else {const err481 = {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 = [err481];}else {vErrors.push(err481);}errors++;}}}else {const err482 = {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 = [err482];}else {vErrors.push(err482);}errors++;}var _valid5 = _errs646 === errors;if(_valid5 && valid172){valid172 = false;passing4 = [passing4, 1];}else {if(_valid5){valid172 = true;passing4 = 1;}}if(!valid172){const err483 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err483];}else {vErrors.push(err483);}errors++;}else {errors = _errs641;if(vErrors !== null){if(_errs641){vErrors.length = _errs641;}else {vErrors = null;}}}}if(data236.refreshTimeoutMs !== undefined){let data254 = data236.refreshTimeoutMs;if(!(((typeof data254 == "number") && (!(data254 % 1) && !isNaN(data254))) && (isFinite(data254)))){const err484 = {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 = [err484];}else {vErrors.push(err484);}errors++;}if((typeof data254 == "number") && (isFinite(data254))){if(data254 < 1 || isNaN(data254)){const err485 = {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 = [err485];}else {vErrors.push(err485);}errors++;}}}if(data236.ignoreGlobs !== undefined){let data255 = data236.ignoreGlobs;if(Array.isArray(data255)){const len36 = data255.length;for(let i38=0; i38<len36; i38++){let data256 = data255[i38];if(typeof data256 === "string"){if(func2(data256) < 1){const err486 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err486];}else {vErrors.push(err486);}errors++;}}else {const err487 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err487];}else {vErrors.push(err487);}errors++;}}}else {const err488 = {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 = [err488];}else {vErrors.push(err488);}errors++;}}}else {const err489 = {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 = [err489];}else {vErrors.push(err489);}errors++;}}}else {const err490 = {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 = [err490];}else {vErrors.push(err490);}errors++;}}if(data104.formatAutofix !== undefined){let data257 = data104.formatAutofix;if(data257 && typeof data257 == "object" && !Array.isArray(data257)){for(const key75 in data257){if(!(key75 === "timeoutMs")){const err491 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err491];}else {vErrors.push(err491);}errors++;}}if(data257.timeoutMs !== undefined){let data258 = data257.timeoutMs;if(!(((typeof data258 == "number") && (!(data258 % 1) && !isNaN(data258))) && (isFinite(data258)))){const err492 = {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 = [err492];}else {vErrors.push(err492);}errors++;}if((typeof data258 == "number") && (isFinite(data258))){if(data258 < 1 || isNaN(data258)){const err493 = {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 = [err493];}else {vErrors.push(err493);}errors++;}}}}else {const err494 = {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 = [err494];}else {vErrors.push(err494);}errors++;}}if(data104.codingGuardrails !== undefined){let data259 = data104.codingGuardrails;if(data259 && typeof data259 == "object" && !Array.isArray(data259)){for(const key76 in data259){if(!(((key76 === "cyclomaticFlag") || (key76 === "cyclomaticMustFix")) || (key76 === "requireSiblingTest"))){const err495 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key76},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err495];}else {vErrors.push(err495);}errors++;}}if(data259.cyclomaticFlag !== undefined){let data260 = data259.cyclomaticFlag;if(!(((typeof data260 == "number") && (!(data260 % 1) && !isNaN(data260))) && (isFinite(data260)))){const err496 = {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 = [err496];}else {vErrors.push(err496);}errors++;}if((typeof data260 == "number") && (isFinite(data260))){if(data260 < 1 || isNaN(data260)){const err497 = {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 = [err497];}else {vErrors.push(err497);}errors++;}}}if(data259.cyclomaticMustFix !== undefined){let data261 = data259.cyclomaticMustFix;if(!(((typeof data261 == "number") && (!(data261 % 1) && !isNaN(data261))) && (isFinite(data261)))){const err498 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err498];}else {vErrors.push(err498);}errors++;}if((typeof data261 == "number") && (isFinite(data261))){if(data261 < 1 || isNaN(data261)){const err499 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err499];}else {vErrors.push(err499);}errors++;}}}if(data259.requireSiblingTest !== undefined){if(typeof data259.requireSiblingTest !== "boolean"){const err500 = {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 = [err500];}else {vErrors.push(err500);}errors++;}}}else {const err501 = {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 = [err501];}else {vErrors.push(err501);}errors++;}}if(data104.autoRefresh !== undefined){let data263 = data104.autoRefresh;if(data263 && typeof data263 == "object" && !Array.isArray(data263)){for(const key77 in data263){if(!(((key77 === "enabled") || (key77 === "crapJumpCap")) || (key77 === "scope"))){const err502 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err502];}else {vErrors.push(err502);}errors++;}}if(data263.enabled !== undefined){if(typeof data263.enabled !== "boolean"){const err503 = {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 = [err503];}else {vErrors.push(err503);}errors++;}}if(data263.crapJumpCap !== undefined){let data265 = data263.crapJumpCap;if((typeof data265 == "number") && (isFinite(data265))){if(data265 < 0 || isNaN(data265)){const err504 = {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 = [err504];}else {vErrors.push(err504);}errors++;}}else {const err505 = {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 = [err505];}else {vErrors.push(err505);}errors++;}}if(data263.scope !== undefined){let data266 = data263.scope;if(typeof data266 !== "string"){const err506 = {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 = [err506];}else {vErrors.push(err506);}errors++;}if(!((data266 === "diff") || (data266 === "full"))){const err507 = {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 = [err507];}else {vErrors.push(err507);}errors++;}}}else {const err508 = {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 = [err508];}else {vErrors.push(err508);}errors++;}}if(data104.baselineEpsilon !== undefined){let data267 = data104.baselineEpsilon;if(data267 && typeof data267 == "object" && !Array.isArray(data267)){for(const key78 in data267){if(!((((((((key78 === "maintainability") || (key78 === "crap")) || (key78 === "coverage")) || (key78 === "mutation")) || (key78 === "lint")) || (key78 === "lighthouse")) || (key78 === "bundle-size")) || (key78 === "duplication"))){const err509 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key78},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err509];}else {vErrors.push(err509);}errors++;}}if(data267.maintainability !== undefined){let data268 = data267.maintainability;if((typeof data268 == "number") && (isFinite(data268))){if(data268 < 0 || isNaN(data268)){const err510 = {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 = [err510];}else {vErrors.push(err510);}errors++;}}else {const err511 = {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 = [err511];}else {vErrors.push(err511);}errors++;}}if(data267.crap !== undefined){let data269 = data267.crap;if((typeof data269 == "number") && (isFinite(data269))){if(data269 < 0 || isNaN(data269)){const err512 = {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 = [err512];}else {vErrors.push(err512);}errors++;}}else {const err513 = {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 = [err513];}else {vErrors.push(err513);}errors++;}}if(data267.coverage !== undefined){let data270 = data267.coverage;if((typeof data270 == "number") && (isFinite(data270))){if(data270 < 0 || isNaN(data270)){const err514 = {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 = [err514];}else {vErrors.push(err514);}errors++;}}else {const err515 = {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 = [err515];}else {vErrors.push(err515);}errors++;}}if(data267.mutation !== undefined){let data271 = data267.mutation;if((typeof data271 == "number") && (isFinite(data271))){if(data271 < 0 || isNaN(data271)){const err516 = {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 = [err516];}else {vErrors.push(err516);}errors++;}}else {const err517 = {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 = [err517];}else {vErrors.push(err517);}errors++;}}if(data267.lint !== undefined){let data272 = data267.lint;if((typeof data272 == "number") && (isFinite(data272))){if(data272 < 0 || isNaN(data272)){const err518 = {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 = [err518];}else {vErrors.push(err518);}errors++;}}else {const err519 = {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 = [err519];}else {vErrors.push(err519);}errors++;}}if(data267.lighthouse !== undefined){let data273 = data267.lighthouse;if((typeof data273 == "number") && (isFinite(data273))){if(data273 < 0 || isNaN(data273)){const err520 = {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 = [err520];}else {vErrors.push(err520);}errors++;}}else {const err521 = {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 = [err521];}else {vErrors.push(err521);}errors++;}}if(data267["bundle-size"] !== undefined){let data274 = data267["bundle-size"];if((typeof data274 == "number") && (isFinite(data274))){if(data274 < 0 || isNaN(data274)){const err522 = {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 = [err522];}else {vErrors.push(err522);}errors++;}}else {const err523 = {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 = [err523];}else {vErrors.push(err523);}errors++;}}if(data267.duplication !== undefined){let data275 = data267.duplication;if((typeof data275 == "number") && (isFinite(data275))){if(data275 < 0 || isNaN(data275)){const err524 = {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 = [err524];}else {vErrors.push(err524);}errors++;}}else {const err525 = {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 = [err525];}else {vErrors.push(err525);}errors++;}}}else {const err526 = {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 = [err526];}else {vErrors.push(err526);}errors++;}}if(data104.requireBaselines !== undefined){if(typeof data104.requireBaselines !== "boolean"){const err527 = {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 = [err527];}else {vErrors.push(err527);}errors++;}}if(data104.navigability !== undefined){let data277 = data104.navigability;if(data277 && typeof data277 == "object" && !Array.isArray(data277)){for(const key79 in data277){if(!(((key79 === "routeGlobs") || (key79 === "navRegistry")) || (key79 === "journeySuite"))){const err528 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key79},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err528];}else {vErrors.push(err528);}errors++;}}if(data277.routeGlobs !== undefined){let data278 = data277.routeGlobs;if(Array.isArray(data278)){const len37 = data278.length;for(let i39=0; i39<len37; i39++){if(typeof data278[i39] !== "string"){const err529 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i39,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err529];}else {vErrors.push(err529);}errors++;}}}else {const err530 = {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 = [err530];}else {vErrors.push(err530);}errors++;}}if(data277.navRegistry !== undefined){let data280 = data277.navRegistry;if(Array.isArray(data280)){const len38 = data280.length;for(let i40=0; i40<len38; i40++){if(typeof data280[i40] !== "string"){const err531 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i40,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err531];}else {vErrors.push(err531);}errors++;}}}else {const err532 = {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 = [err532];}else {vErrors.push(err532);}errors++;}}if(data277.journeySuite !== undefined){if(typeof data277.journeySuite !== "string"){const err533 = {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 = [err533];}else {vErrors.push(err533);}errors++;}}}else {const err534 = {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 = [err534];}else {vErrors.push(err534);}errors++;}}}else {const err535 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err535];}else {vErrors.push(err535);}errors++;}}if(data70.mergeWatch !== undefined){let data283 = data70.mergeWatch;if(data283 && typeof data283 == "object" && !Array.isArray(data283)){for(const key80 in data283){if(!(((((key80 === "mode") || (key80 === "intervalSeconds")) || (key80 === "maxWaitSeconds")) || (key80 === "maxBudgetSeconds")) || (key80 === "updateAttempts"))){const err536 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key80},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err536];}else {vErrors.push(err536);}errors++;}}if(data283.mode !== undefined){let data284 = data283.mode;if(typeof data284 !== "string"){const err537 = {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 = [err537];}else {vErrors.push(err537);}errors++;}if(!((data284 === "sync") || (data284 === "async"))){const err538 = {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 = [err538];}else {vErrors.push(err538);}errors++;}}if(data283.intervalSeconds !== undefined){let data285 = data283.intervalSeconds;if(!(((typeof data285 == "number") && (!(data285 % 1) && !isNaN(data285))) && (isFinite(data285)))){const err539 = {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 = [err539];}else {vErrors.push(err539);}errors++;}if((typeof data285 == "number") && (isFinite(data285))){if(data285 < 1 || isNaN(data285)){const err540 = {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 = [err540];}else {vErrors.push(err540);}errors++;}}}if(data283.maxWaitSeconds !== undefined){let data286 = data283.maxWaitSeconds;if(!(((typeof data286 == "number") && (!(data286 % 1) && !isNaN(data286))) && (isFinite(data286)))){const err541 = {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 = [err541];}else {vErrors.push(err541);}errors++;}if((typeof data286 == "number") && (isFinite(data286))){if(data286 < 1 || isNaN(data286)){const err542 = {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 = [err542];}else {vErrors.push(err542);}errors++;}}}if(data283.maxBudgetSeconds !== undefined){let data287 = data283.maxBudgetSeconds;if(!(((typeof data287 == "number") && (!(data287 % 1) && !isNaN(data287))) && (isFinite(data287)))){const err543 = {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 = [err543];}else {vErrors.push(err543);}errors++;}if((typeof data287 == "number") && (isFinite(data287))){if(data287 < 1 || isNaN(data287)){const err544 = {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 = [err544];}else {vErrors.push(err544);}errors++;}}}if(data283.updateAttempts !== undefined){let data288 = data283.updateAttempts;if(!(((typeof data288 == "number") && (!(data288 % 1) && !isNaN(data288))) && (isFinite(data288)))){const err545 = {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 = [err545];}else {vErrors.push(err545);}errors++;}if((typeof data288 == "number") && (isFinite(data288))){if(data288 < 0 || isNaN(data288)){const err546 = {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 = [err546];}else {vErrors.push(err546);}errors++;}}}}else {const err547 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err547];}else {vErrors.push(err547);}errors++;}}if(data70.codeReview !== undefined){let data289 = data70.codeReview;if(data289 && typeof data289 == "object" && !Array.isArray(data289)){for(const key81 in data289){if(!(((((key81 === "providers") || (key81 === "providerConfig")) || (key81 === "maxFixAttempts")) || (key81 === "maxFixScopeFiles")) || (key81 === "autoFixSeverity"))){const err548 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key81},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err548];}else {vErrors.push(err548);}errors++;}}if(data289.providers !== undefined){let data290 = data289.providers;if(Array.isArray(data290)){const len39 = data290.length;for(let i41=0; i41<len39; i41++){let data291 = data290[i41];if(data291 && typeof data291 == "object" && !Array.isArray(data291)){if(data291.name === undefined){const err549 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err549];}else {vErrors.push(err549);}errors++;}for(const key82 in data291){if(!(((((key82 === "name") || (key82 === "scopes")) || (key82 === "optional")) || (key82 === "manualPrompt")) || (key82 === "when"))){const err550 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key82},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err550];}else {vErrors.push(err550);}errors++;}}if(data291.name !== undefined){let data292 = data291.name;if(typeof data292 !== "string"){const err551 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err551];}else {vErrors.push(err551);}errors++;}if(!((((data292 === "native") || (data292 === "codex")) || (data292 === "security-review")) || (data292 === "ultrareview"))){const err552 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.name.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err552];}else {vErrors.push(err552);}errors++;}}if(data291.scopes !== undefined){let data293 = data291.scopes;if(Array.isArray(data293)){const len40 = data293.length;for(let i42=0; i42<len40; i42++){let data294 = data293[i42];if(typeof data294 !== "string"){const err553 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err553];}else {vErrors.push(err553);}errors++;}if(!((data294 === "story") || (data294 === "epic"))){const err554 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.scopes.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err554];}else {vErrors.push(err554);}errors++;}}}else {const err555 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err555];}else {vErrors.push(err555);}errors++;}}if(data291.optional !== undefined){if(typeof data291.optional !== "boolean"){const err556 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/optional",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/optional/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err556];}else {vErrors.push(err556);}errors++;}}if(data291.manualPrompt !== undefined){if(typeof data291.manualPrompt !== "boolean"){const err557 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/manualPrompt",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/manualPrompt/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err557];}else {vErrors.push(err557);}errors++;}}if(data291.when !== undefined){let data297 = data291.when;if(data297 && typeof data297 == "object" && !Array.isArray(data297)){for(const key83 in data297){if(!((key83 === "label") || (key83 === "labelAny"))){const err558 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key83},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err558];}else {vErrors.push(err558);}errors++;}}if(data297.label !== undefined){let data298 = data297.label;if(typeof data298 === "string"){if(func2(data298) < 1){const err559 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err559];}else {vErrors.push(err559);}errors++;}}else {const err560 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err560];}else {vErrors.push(err560);}errors++;}}if(data297.labelAny !== undefined){let data299 = data297.labelAny;if(Array.isArray(data299)){if(data299.length < 1){const err561 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err561];}else {vErrors.push(err561);}errors++;}const len41 = data299.length;for(let i43=0; i43<len41; i43++){let data300 = data299[i43];if(typeof data300 === "string"){if(func2(data300) < 1){const err562 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err562];}else {vErrors.push(err562);}errors++;}}else {const err563 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err563];}else {vErrors.push(err563);}errors++;}}}else {const err564 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err564];}else {vErrors.push(err564);}errors++;}}}else {const err565 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err565];}else {vErrors.push(err565);}errors++;}}}else {const err566 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err566];}else {vErrors.push(err566);}errors++;}}}else {const err567 = {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 = [err567];}else {vErrors.push(err567);}errors++;}}if(data289.providerConfig !== undefined){let data301 = data289.providerConfig;if(data301 && typeof data301 == "object" && !Array.isArray(data301)){}else {const err568 = {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 = [err568];}else {vErrors.push(err568);}errors++;}}if(data289.maxFixAttempts !== undefined){let data302 = data289.maxFixAttempts;if(!(((typeof data302 == "number") && (!(data302 % 1) && !isNaN(data302))) && (isFinite(data302)))){const err569 = {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 = [err569];}else {vErrors.push(err569);}errors++;}if((typeof data302 == "number") && (isFinite(data302))){if(data302 < 0 || isNaN(data302)){const err570 = {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 = [err570];}else {vErrors.push(err570);}errors++;}}}if(data289.maxFixScopeFiles !== undefined){let data303 = data289.maxFixScopeFiles;if(!(((typeof data303 == "number") && (!(data303 % 1) && !isNaN(data303))) && (isFinite(data303)))){const err571 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err571];}else {vErrors.push(err571);}errors++;}if((typeof data303 == "number") && (isFinite(data303))){if(data303 < 1 || isNaN(data303)){const err572 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err572];}else {vErrors.push(err572);}errors++;}}}if(data289.autoFixSeverity !== undefined){let data304 = data289.autoFixSeverity;if(typeof data304 !== "string"){const err573 = {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 = [err573];}else {vErrors.push(err573);}errors++;}if(!((data304 === "high") || (data304 === "medium"))){const err574 = {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 = [err574];}else {vErrors.push(err574);}errors++;}}}else {const err575 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err575];}else {vErrors.push(err575);}errors++;}}if(data70.review !== undefined){let data305 = data70.review;if(data305 && typeof data305 == "object" && !Array.isArray(data305)){for(const key84 in data305){if(!(key84 === "lensDiffFloor")){const err576 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key84},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err576];}else {vErrors.push(err576);}errors++;}}if(data305.lensDiffFloor !== undefined){let data306 = data305.lensDiffFloor;if(!(((typeof data306 == "number") && (!(data306 % 1) && !isNaN(data306))) && (isFinite(data306)))){const err577 = {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 = [err577];}else {vErrors.push(err577);}errors++;}if((typeof data306 == "number") && (isFinite(data306))){if(data306 < 0 || isNaN(data306)){const err578 = {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 = [err578];}else {vErrors.push(err578);}errors++;}}}}else {const err579 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err579];}else {vErrors.push(err579);}errors++;}}if(data70.refactorStage !== undefined){let data307 = data70.refactorStage;if(data307 && typeof data307 == "object" && !Array.isArray(data307)){for(const key85 in data307){if(!(key85 === "enabled")){const err580 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key85},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err580];}else {vErrors.push(err580);}errors++;}}if(data307.enabled !== undefined){if(typeof data307.enabled !== "boolean"){const err581 = {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 = [err581];}else {vErrors.push(err581);}errors++;}}}else {const err582 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err582];}else {vErrors.push(err582);}errors++;}}if(data70.acceptanceEval !== undefined){let data309 = data70.acceptanceEval;if(data309 && typeof data309 == "object" && !Array.isArray(data309)){for(const key86 in data309){if(!(key86 === "maxRounds")){const err583 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key86},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err583];}else {vErrors.push(err583);}errors++;}}if(data309.maxRounds !== undefined){let data310 = data309.maxRounds;if(!(((typeof data310 == "number") && (!(data310 % 1) && !isNaN(data310))) && (isFinite(data310)))){const err584 = {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 = [err584];}else {vErrors.push(err584);}errors++;}if((typeof data310 == "number") && (isFinite(data310))){if(data310 < 1 || isNaN(data310)){const err585 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err585];}else {vErrors.push(err585);}errors++;}}}}else {const err586 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err586];}else {vErrors.push(err586);}errors++;}}if(data70.feedbackLoop !== undefined){let data311 = data70.feedbackLoop;if(data311 && typeof data311 == "object" && !Array.isArray(data311)){for(const key87 in data311){if(!(((key87 === "auditResultsAutoFile") || (key87 === "retroProposals")) || (key87 === "frictionWindowDays"))){const err587 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key87},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err587];}else {vErrors.push(err587);}errors++;}}if(data311.auditResultsAutoFile !== undefined){if(typeof data311.auditResultsAutoFile !== "boolean"){const err588 = {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 = [err588];}else {vErrors.push(err588);}errors++;}}if(data311.retroProposals !== undefined){if(typeof data311.retroProposals !== "boolean"){const err589 = {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 = [err589];}else {vErrors.push(err589);}errors++;}}if(data311.frictionWindowDays !== undefined){let data314 = data311.frictionWindowDays;if(!(((typeof data314 == "number") && (!(data314 % 1) && !isNaN(data314))) && (isFinite(data314)))){const err590 = {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 = [err590];}else {vErrors.push(err590);}errors++;}if((typeof data314 == "number") && (isFinite(data314))){if(data314 < 1 || isNaN(data314)){const err591 = {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 = [err591];}else {vErrors.push(err591);}errors++;}}}}else {const err592 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err592];}else {vErrors.push(err592);}errors++;}}if(data70.auditToStories !== undefined){let data315 = data70.auditToStories;if(data315 && typeof data315 == "object" && !Array.isArray(data315)){for(const key88 in data315){if(!((key88 === "severityFloor") || (key88 === "autoComment"))){const err593 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key88},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err593];}else {vErrors.push(err593);}errors++;}}if(data315.severityFloor !== undefined){let data316 = data315.severityFloor;if(typeof data316 !== "string"){const err594 = {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 = [err594];}else {vErrors.push(err594);}errors++;}if(!(((((data316 === "critical") || (data316 === "high")) || (data316 === "medium")) || (data316 === "low")) || (data316 === "all"))){const err595 = {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 = [err595];}else {vErrors.push(err595);}errors++;}}if(data315.autoComment !== undefined){if(typeof data315.autoComment !== "boolean"){const err596 = {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 = [err596];}else {vErrors.push(err596);}errors++;}}}else {const err597 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err597];}else {vErrors.push(err597);}errors++;}}if(data70.ci !== undefined){let data318 = data70.ci;if(data318 && typeof data318 == "object" && !Array.isArray(data318)){for(const key89 in data318){if(!((((key89 === "watch") || (key89 === "autoMerge")) || (key89 === "blockOnAdvisoryFailure")) || (key89 === "advisoryAllowlist"))){const err598 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key89},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err598];}else {vErrors.push(err598);}errors++;}}if(data318.watch !== undefined){let data319 = data318.watch;if(data319 && typeof data319 == "object" && !Array.isArray(data319)){for(const key90 in data319){if(!((((key90 === "pollIntervalMs") || (key90 === "maxPolls")) || (key90 === "maxResumes")) || (key90 === "attachWindowMs"))){const err599 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key90},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err599];}else {vErrors.push(err599);}errors++;}}if(data319.pollIntervalMs !== undefined){let data320 = data319.pollIntervalMs;if(!(((typeof data320 == "number") && (!(data320 % 1) && !isNaN(data320))) && (isFinite(data320)))){const err600 = {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 = [err600];}else {vErrors.push(err600);}errors++;}if((typeof data320 == "number") && (isFinite(data320))){if(data320 < 1 || isNaN(data320)){const err601 = {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 = [err601];}else {vErrors.push(err601);}errors++;}}}if(data319.maxPolls !== undefined){let data321 = data319.maxPolls;if(!(((typeof data321 == "number") && (!(data321 % 1) && !isNaN(data321))) && (isFinite(data321)))){const err602 = {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 = [err602];}else {vErrors.push(err602);}errors++;}if((typeof data321 == "number") && (isFinite(data321))){if(data321 < 1 || isNaN(data321)){const err603 = {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 = [err603];}else {vErrors.push(err603);}errors++;}}}if(data319.maxResumes !== undefined){let data322 = data319.maxResumes;if(!(((typeof data322 == "number") && (!(data322 % 1) && !isNaN(data322))) && (isFinite(data322)))){const err604 = {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 = [err604];}else {vErrors.push(err604);}errors++;}if((typeof data322 == "number") && (isFinite(data322))){if(data322 < 0 || isNaN(data322)){const err605 = {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 = [err605];}else {vErrors.push(err605);}errors++;}}}if(data319.attachWindowMs !== undefined){let data323 = data319.attachWindowMs;if(!(((typeof data323 == "number") && (!(data323 % 1) && !isNaN(data323))) && (isFinite(data323)))){const err606 = {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 = [err606];}else {vErrors.push(err606);}errors++;}if((typeof data323 == "number") && (isFinite(data323))){if(data323 < 1 || isNaN(data323)){const err607 = {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 = [err607];}else {vErrors.push(err607);}errors++;}}}}else {const err608 = {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 = [err608];}else {vErrors.push(err608);}errors++;}}if(data318.autoMerge !== undefined){let data324 = data318.autoMerge;if(typeof data324 !== "string"){const err609 = {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 = [err609];}else {vErrors.push(err609);}errors++;}if(!((data324 === "trust-ci") || (data324 === "strict"))){const err610 = {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 = [err610];}else {vErrors.push(err610);}errors++;}}if(data318.blockOnAdvisoryFailure !== undefined){if(typeof data318.blockOnAdvisoryFailure !== "boolean"){const err611 = {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 = [err611];}else {vErrors.push(err611);}errors++;}}if(data318.advisoryAllowlist !== undefined){let data326 = data318.advisoryAllowlist;if(Array.isArray(data326)){const len42 = data326.length;for(let i44=0; i44<len42; i44++){if(typeof data326[i44] !== "string"){const err612 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i44,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err612];}else {vErrors.push(err612);}errors++;}}}else {const err613 = {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 = [err613];}else {vErrors.push(err613);}errors++;}}}else {const err614 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err614];}else {vErrors.push(err614);}errors++;}}if(data70.routing !== undefined){let data328 = data70.routing;if(data328 && typeof data328 == "object" && !Array.isArray(data328)){for(const key91 in data328){if(!((((key91 === "roleScopedAgents") || (key91 === "freshCriticSampleRate")) || (key91 === "ceremonyProfile")) || (key91 === "closeAndLand"))){const err615 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key91},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err615];}else {vErrors.push(err615);}errors++;}}if(data328.roleScopedAgents !== undefined){if(typeof data328.roleScopedAgents !== "boolean"){const err616 = {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 = [err616];}else {vErrors.push(err616);}errors++;}}if(data328.freshCriticSampleRate !== undefined){let data330 = data328.freshCriticSampleRate;if((typeof data330 == "number") && (isFinite(data330))){if(data330 > 1 || isNaN(data330)){const err617 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1"};if(vErrors === null){vErrors = [err617];}else {vErrors.push(err617);}errors++;}if(data330 < 0 || isNaN(data330)){const err618 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err618];}else {vErrors.push(err618);}errors++;}}else {const err619 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err619];}else {vErrors.push(err619);}errors++;}}if(data328.ceremonyProfile !== undefined){let data331 = data328.ceremonyProfile;if(typeof data331 !== "string"){const err620 = {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 = [err620];}else {vErrors.push(err620);}errors++;}if(!(((data331 === "minimal") || (data331 === "standard")) || (data331 === "strict"))){const err621 = {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 = [err621];}else {vErrors.push(err621);}errors++;}}if(data328.closeAndLand !== undefined){if(typeof data328.closeAndLand !== "boolean"){const err622 = {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 = [err622];}else {vErrors.push(err622);}errors++;}}}else {const err623 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err623];}else {vErrors.push(err623);}errors++;}}}else {const err624 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err624];}else {vErrors.push(err624);}errors++;}}if(data.qa !== undefined){let data333 = data.qa;if(data333 && typeof data333 == "object" && !Array.isArray(data333)){for(const key92 in data333){if(!(((((((key92 === "featureRoot") || (key92 === "fixturesManifest")) || (key92 === "environments")) || (key92 === "personas")) || (key92 === "gherkinLint")) || (key92 === "consoleAllowlist")) || (key92 === "designTokens"))){const err625 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key92},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err625];}else {vErrors.push(err625);}errors++;}}if(data333.featureRoot !== undefined){let data334 = data333.featureRoot;const _errs838 = errors;const _errs839 = errors;if(typeof data334 === "string"){if(!pattern0.test(data334)){const err626 = {};if(vErrors === null){vErrors = [err626];}else {vErrors.push(err626);}errors++;}}var valid212 = _errs839 === errors;if(valid212){const err627 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err627];}else {vErrors.push(err627);}errors++;}else {errors = _errs838;if(vErrors !== null){if(_errs838){vErrors.length = _errs838;}else {vErrors = null;}}}if(typeof data334 === "string"){if(func2(data334) < 1){const err628 = {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 = [err628];}else {vErrors.push(err628);}errors++;}}else {const err629 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err629];}else {vErrors.push(err629);}errors++;}}if(data333.fixturesManifest !== undefined){let data335 = data333.fixturesManifest;const _errs842 = errors;const _errs843 = errors;if(typeof data335 === "string"){if(!pattern0.test(data335)){const err630 = {};if(vErrors === null){vErrors = [err630];}else {vErrors.push(err630);}errors++;}}var valid213 = _errs843 === errors;if(valid213){const err631 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err631];}else {vErrors.push(err631);}errors++;}else {errors = _errs842;if(vErrors !== null){if(_errs842){vErrors.length = _errs842;}else {vErrors = null;}}}if(typeof data335 === "string"){if(func2(data335) < 1){const err632 = {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 = [err632];}else {vErrors.push(err632);}errors++;}}else {const err633 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err633];}else {vErrors.push(err633);}errors++;}}if(data333.environments !== undefined){let data336 = data333.environments;if(data336 && typeof data336 == "object" && !Array.isArray(data336)){if(Object.keys(data336).length < 1){const err634 = {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 = [err634];}else {vErrors.push(err634);}errors++;}for(const key93 in data336){let data337 = data336[key93];if(data337 && typeof data337 == "object" && !Array.isArray(data337)){if(data337.baseUrl === undefined){const err635 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err635];}else {vErrors.push(err635);}errors++;}for(const key94 in data337){if(!(((key94 === "baseUrl") || (key94 === "signInSeam")) || (key94 === "allowWrites"))){const err636 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key94},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err636];}else {vErrors.push(err636);}errors++;}}if(data337.baseUrl !== undefined){let data338 = data337.baseUrl;const _errs852 = errors;const _errs853 = errors;if(typeof data338 === "string"){if(!pattern0.test(data338)){const err637 = {};if(vErrors === null){vErrors = [err637];}else {vErrors.push(err637);}errors++;}}var valid216 = _errs853 === errors;if(valid216){const err638 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err638];}else {vErrors.push(err638);}errors++;}else {errors = _errs852;if(vErrors !== null){if(_errs852){vErrors.length = _errs852;}else {vErrors = null;}}}if(typeof data338 === "string"){if(func2(data338) < 1){const err639 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err639];}else {vErrors.push(err639);}errors++;}}else {const err640 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err640];}else {vErrors.push(err640);}errors++;}}if(data337.signInSeam !== undefined){let data339 = data337.signInSeam;const _errs855 = errors;let valid217 = false;let passing5 = null;const _errs856 = errors;if(data339 && typeof data339 == "object" && !Array.isArray(data339)){if(data339.urlTemplate === undefined){const err641 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err641];}else {vErrors.push(err641);}errors++;}for(const key95 in data339){if(!(key95 === "urlTemplate")){const err642 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key95},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err642];}else {vErrors.push(err642);}errors++;}}if(data339.urlTemplate !== undefined){let data340 = data339.urlTemplate;const _errs861 = errors;const _errs862 = errors;if(typeof data340 === "string"){if(!pattern0.test(data340)){const err643 = {};if(vErrors === null){vErrors = [err643];}else {vErrors.push(err643);}errors++;}}var valid219 = _errs862 === errors;if(valid219){const err644 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err644];}else {vErrors.push(err644);}errors++;}else {errors = _errs861;if(vErrors !== null){if(_errs861){vErrors.length = _errs861;}else {vErrors = null;}}}if(typeof data340 === "string"){if(func2(data340) < 1){const err645 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err645];}else {vErrors.push(err645);}errors++;}}else {const err646 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err646];}else {vErrors.push(err646);}errors++;}}}else {const err647 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err647];}else {vErrors.push(err647);}errors++;}var _valid6 = _errs856 === errors;if(_valid6){valid217 = true;passing5 = 0;}const _errs863 = errors;if(data339 && typeof data339 == "object" && !Array.isArray(data339)){if(data339.skill === undefined){const err648 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err648];}else {vErrors.push(err648);}errors++;}for(const key96 in data339){if(!(key96 === "skill")){const err649 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key96},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err649];}else {vErrors.push(err649);}errors++;}}if(data339.skill !== undefined){let data341 = data339.skill;const _errs868 = errors;const _errs869 = errors;if(typeof data341 === "string"){if(!pattern0.test(data341)){const err650 = {};if(vErrors === null){vErrors = [err650];}else {vErrors.push(err650);}errors++;}}var valid221 = _errs869 === errors;if(valid221){const err651 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err651];}else {vErrors.push(err651);}errors++;}else {errors = _errs868;if(vErrors !== null){if(_errs868){vErrors.length = _errs868;}else {vErrors = null;}}}if(typeof data341 === "string"){if(func2(data341) < 1){const err652 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err652];}else {vErrors.push(err652);}errors++;}}else {const err653 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err653];}else {vErrors.push(err653);}errors++;}}}else {const err654 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err654];}else {vErrors.push(err654);}errors++;}var _valid6 = _errs863 === errors;if(_valid6 && valid217){valid217 = false;passing5 = [passing5, 1];}else {if(_valid6){valid217 = true;passing5 = 1;}}if(!valid217){const err655 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err655];}else {vErrors.push(err655);}errors++;}else {errors = _errs855;if(vErrors !== null){if(_errs855){vErrors.length = _errs855;}else {vErrors = null;}}}}if(data337.allowWrites !== undefined){if(typeof data337.allowWrites !== "boolean"){const err656 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err656];}else {vErrors.push(err656);}errors++;}}}else {const err657 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err657];}else {vErrors.push(err657);}errors++;}}}else {const err658 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err658];}else {vErrors.push(err658);}errors++;}}if(data333.personas !== undefined){let data343 = data333.personas;const _errs873 = errors;let valid222 = false;let passing6 = null;const _errs874 = errors;if(Array.isArray(data343)){if(data343.length < 1){const err659 = {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 = [err659];}else {vErrors.push(err659);}errors++;}const len43 = data343.length;for(let i45=0; i45<len43; i45++){let data344 = data343[i45];const _errs878 = errors;const _errs879 = errors;if(typeof data344 === "string"){if(!pattern0.test(data344)){const err660 = {};if(vErrors === null){vErrors = [err660];}else {vErrors.push(err660);}errors++;}}var valid225 = _errs879 === errors;if(valid225){const err661 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err661];}else {vErrors.push(err661);}errors++;}else {errors = _errs878;if(vErrors !== null){if(_errs878){vErrors.length = _errs878;}else {vErrors = null;}}}if(typeof data344 === "string"){if(func2(data344) < 1){const err662 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err662];}else {vErrors.push(err662);}errors++;}}else {const err663 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err663];}else {vErrors.push(err663);}errors++;}}}else {const err664 = {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 = [err664];}else {vErrors.push(err664);}errors++;}var _valid7 = _errs874 === errors;if(_valid7){valid222 = true;passing6 = 0;}const _errs880 = errors;if(data343 && typeof data343 == "object" && !Array.isArray(data343)){if(Object.keys(data343).length < 1){const err665 = {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 = [err665];}else {vErrors.push(err665);}errors++;}for(const key97 in data343){let data345 = data343[key97];const _errs884 = errors;let valid227 = false;let passing7 = null;const _errs885 = errors;if(data345 && typeof data345 == "object" && !Array.isArray(data345)){if(data345.credentialRef === undefined){const err666 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err666];}else {vErrors.push(err666);}errors++;}for(const key98 in data345){if(!(key98 === "credentialRef")){const err667 = {instancePath:instancePath+"/qa/personas/" + key97.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key98},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err667];}else {vErrors.push(err667);}errors++;}}if(data345.credentialRef !== undefined){let data346 = data345.credentialRef;const _errs890 = errors;const _errs891 = errors;if(typeof data346 === "string"){if(!pattern0.test(data346)){const err668 = {};if(vErrors === null){vErrors = [err668];}else {vErrors.push(err668);}errors++;}}var valid229 = _errs891 === errors;if(valid229){const err669 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err669];}else {vErrors.push(err669);}errors++;}else {errors = _errs890;if(vErrors !== null){if(_errs890){vErrors.length = _errs890;}else {vErrors = null;}}}if(typeof data346 === "string"){if(func2(data346) < 1){const err670 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err670];}else {vErrors.push(err670);}errors++;}}else {const err671 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err671];}else {vErrors.push(err671);}errors++;}}}else {const err672 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err672];}else {vErrors.push(err672);}errors++;}var _valid8 = _errs885 === errors;if(_valid8){valid227 = true;passing7 = 0;}const _errs892 = errors;if(data345 && typeof data345 == "object" && !Array.isArray(data345)){if(data345.signInSkill === undefined){const err673 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err673];}else {vErrors.push(err673);}errors++;}for(const key99 in data345){if(!(key99 === "signInSkill")){const err674 = {instancePath:instancePath+"/qa/personas/" + key97.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key99},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err674];}else {vErrors.push(err674);}errors++;}}if(data345.signInSkill !== undefined){let data347 = data345.signInSkill;const _errs897 = errors;const _errs898 = errors;if(typeof data347 === "string"){if(!pattern0.test(data347)){const err675 = {};if(vErrors === null){vErrors = [err675];}else {vErrors.push(err675);}errors++;}}var valid231 = _errs898 === errors;if(valid231){const err676 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err676];}else {vErrors.push(err676);}errors++;}else {errors = _errs897;if(vErrors !== null){if(_errs897){vErrors.length = _errs897;}else {vErrors = null;}}}if(typeof data347 === "string"){if(func2(data347) < 1){const err677 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err677];}else {vErrors.push(err677);}errors++;}}else {const err678 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err678];}else {vErrors.push(err678);}errors++;}}}else {const err679 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err679];}else {vErrors.push(err679);}errors++;}var _valid8 = _errs892 === errors;if(_valid8 && valid227){valid227 = false;passing7 = [passing7, 1];}else {if(_valid8){valid227 = true;passing7 = 1;}}if(!valid227){const err680 = {instancePath:instancePath+"/qa/personas/" + key97.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing7},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err680];}else {vErrors.push(err680);}errors++;}else {errors = _errs884;if(vErrors !== null){if(_errs884){vErrors.length = _errs884;}else {vErrors = null;}}}}}else {const err681 = {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 = [err681];}else {vErrors.push(err681);}errors++;}var _valid7 = _errs880 === errors;if(_valid7 && valid222){valid222 = false;passing6 = [passing6, 1];}else {if(_valid7){valid222 = true;passing6 = 1;}}if(!valid222){const err682 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing6},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err682];}else {vErrors.push(err682);}errors++;}else {errors = _errs873;if(vErrors !== null){if(_errs873){vErrors.length = _errs873;}else {vErrors = null;}}}}if(data333.gherkinLint !== undefined){let data348 = data333.gherkinLint;if(data348 && typeof data348 == "object" && !Array.isArray(data348)){if(data348.scopes === undefined){const err683 = {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 = [err683];}else {vErrors.push(err683);}errors++;}for(const key100 in data348){if(!(((key100 === "scopes") || (key100 === "exemptionTags")) || (key100 === "stepWaivers"))){const err684 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key100},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err684];}else {vErrors.push(err684);}errors++;}}if(data348.scopes !== undefined){let data349 = data348.scopes;if(data349 && typeof data349 == "object" && !Array.isArray(data349)){if(Object.keys(data349).length < 1){const err685 = {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 = [err685];}else {vErrors.push(err685);}errors++;}for(const key101 in data349){let data350 = data349[key101];if(data350 && typeof data350 == "object" && !Array.isArray(data350)){if(data350.featureRoots === undefined){const err686 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err686];}else {vErrors.push(err686);}errors++;}if(data350.stepRoots === undefined){const err687 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err687];}else {vErrors.push(err687);}errors++;}for(const key102 in data350){if(!((key102 === "featureRoots") || (key102 === "stepRoots"))){const err688 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key102},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err688];}else {vErrors.push(err688);}errors++;}}if(data350.featureRoots !== undefined){let data351 = data350.featureRoots;if(Array.isArray(data351)){if(data351.length < 1){const err689 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err689];}else {vErrors.push(err689);}errors++;}const len44 = data351.length;for(let i46=0; i46<len44; i46++){let data352 = data351[i46];const _errs912 = errors;const _errs913 = errors;if(typeof data352 === "string"){if(!pattern0.test(data352)){const err690 = {};if(vErrors === null){vErrors = [err690];}else {vErrors.push(err690);}errors++;}}var valid237 = _errs913 === errors;if(valid237){const err691 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err691];}else {vErrors.push(err691);}errors++;}else {errors = _errs912;if(vErrors !== null){if(_errs912){vErrors.length = _errs912;}else {vErrors = null;}}}if(typeof data352 === "string"){if(func2(data352) < 1){const err692 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err692];}else {vErrors.push(err692);}errors++;}}else {const err693 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err693];}else {vErrors.push(err693);}errors++;}}}else {const err694 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err694];}else {vErrors.push(err694);}errors++;}}if(data350.stepRoots !== undefined){let data353 = data350.stepRoots;if(Array.isArray(data353)){if(data353.length < 1){const err695 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err695];}else {vErrors.push(err695);}errors++;}const len45 = data353.length;for(let i47=0; i47<len45; i47++){let data354 = data353[i47];const _errs918 = errors;const _errs919 = errors;if(typeof data354 === "string"){if(!pattern0.test(data354)){const err696 = {};if(vErrors === null){vErrors = [err696];}else {vErrors.push(err696);}errors++;}}var valid240 = _errs919 === errors;if(valid240){const err697 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err697];}else {vErrors.push(err697);}errors++;}else {errors = _errs918;if(vErrors !== null){if(_errs918){vErrors.length = _errs918;}else {vErrors = null;}}}if(typeof data354 === "string"){if(func2(data354) < 1){const err698 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err698];}else {vErrors.push(err698);}errors++;}}else {const err699 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err699];}else {vErrors.push(err699);}errors++;}}}else {const err700 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err700];}else {vErrors.push(err700);}errors++;}}}else {const err701 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err701];}else {vErrors.push(err701);}errors++;}}}else {const err702 = {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 = [err702];}else {vErrors.push(err702);}errors++;}}if(data348.exemptionTags !== undefined){let data355 = data348.exemptionTags;if(Array.isArray(data355)){const len46 = data355.length;for(let i48=0; i48<len46; i48++){let data356 = data355[i48];const _errs924 = errors;const _errs925 = errors;if(typeof data356 === "string"){if(!pattern0.test(data356)){const err703 = {};if(vErrors === null){vErrors = [err703];}else {vErrors.push(err703);}errors++;}}var valid243 = _errs925 === errors;if(valid243){const err704 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err704];}else {vErrors.push(err704);}errors++;}else {errors = _errs924;if(vErrors !== null){if(_errs924){vErrors.length = _errs924;}else {vErrors = null;}}}if(typeof data356 === "string"){if(func2(data356) < 1){const err705 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err705];}else {vErrors.push(err705);}errors++;}}else {const err706 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err706];}else {vErrors.push(err706);}errors++;}}}else {const err707 = {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 = [err707];}else {vErrors.push(err707);}errors++;}}if(data348.stepWaivers !== undefined){let data357 = data348.stepWaivers;if(Array.isArray(data357)){const len47 = data357.length;for(let i49=0; i49<len47; i49++){let data358 = data357[i49];if(typeof data358 === "string"){if(func2(data358) < 1){const err708 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err708];}else {vErrors.push(err708);}errors++;}}else {const err709 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err709];}else {vErrors.push(err709);}errors++;}}}else {const err710 = {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 = [err710];}else {vErrors.push(err710);}errors++;}}}else {const err711 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err711];}else {vErrors.push(err711);}errors++;}}if(data333.consoleAllowlist !== undefined){let data359 = data333.consoleAllowlist;if(Array.isArray(data359)){const len48 = data359.length;for(let i50=0; i50<len48; i50++){let data360 = data359[i50];const _errs934 = errors;const _errs935 = errors;if(typeof data360 === "string"){if(!pattern0.test(data360)){const err712 = {};if(vErrors === null){vErrors = [err712];}else {vErrors.push(err712);}errors++;}}var valid248 = _errs935 === errors;if(valid248){const err713 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err713];}else {vErrors.push(err713);}errors++;}else {errors = _errs934;if(vErrors !== null){if(_errs934){vErrors.length = _errs934;}else {vErrors = null;}}}if(typeof data360 === "string"){if(func2(data360) < 1){const err714 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err714];}else {vErrors.push(err714);}errors++;}}else {const err715 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err715];}else {vErrors.push(err715);}errors++;}}}else {const err716 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err716];}else {vErrors.push(err716);}errors++;}}if(data333.designTokens !== undefined){let data361 = data333.designTokens;const _errs938 = errors;const _errs939 = errors;if(typeof data361 === "string"){if(!pattern0.test(data361)){const err717 = {};if(vErrors === null){vErrors = [err717];}else {vErrors.push(err717);}errors++;}}var valid249 = _errs939 === errors;if(valid249){const err718 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err718];}else {vErrors.push(err718);}errors++;}else {errors = _errs938;if(vErrors !== null){if(_errs938){vErrors.length = _errs938;}else {vErrors = null;}}}if(typeof data361 === "string"){if(func2(data361) < 1){const err719 = {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 = [err719];}else {vErrors.push(err719);}errors++;}}else {const err720 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err720];}else {vErrors.push(err720);}errors++;}}}else {const err721 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err721];}else {vErrors.push(err721);}errors++;}}}else {const err722 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err722];}else {vErrors.push(err722);}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},"branchProtection":{"type":"object","description":"Branch-protection stance applied to `project.baseBranch` by the GitHub bootstrap, and reproduced locally before every push.","properties":{"enforce":{"type":"boolean","description":"When true, the GitHub bootstrap writes the required-check ruleset. False leaves the remote stance alone.","default":true},"requiredChecks":{"type":"array","items":{"type":"object","description":"One required status check: the context name GitHub gates the merge on, plus the argv the framework runs locally to reproduce it.","required":["name","cmd"],"properties":{"name":{"type":"string","minLength":1,"description":"Required status-check context name as GitHub reports it."},"cmd":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"argv array (never a shell string) the local pre-push validation runs to reproduce the check."}},"additionalProperties":false},"description":"Checks that must pass before a Story PR merges. Each entry carries both the remote context name and the local argv.","default":[{"name":"lint","cmd":["npm","run","lint"]},{"name":"test","cmd":["npm","test"]},{"name":"baselines","cmd":["node",".agents/scripts/check-baselines.js"]}]}},"additionalProperties":false},"mergeMethods":{"type":"object","description":"Repository merge-method stance the GitHub bootstrap enforces. The framework ships squash-only with auto-merge on, which is what the one-PR-per-Story model needs for release-please to parse each landed subject.","properties":{"allow_squash_merge":{"type":"boolean","default":true},"allow_rebase_merge":{"type":"boolean","default":false},"allow_merge_commit":{"type":"boolean","default":false},"allow_auto_merge":{"type":"boolean","default":true},"delete_branch_on_merge":{"type":"boolean","default":true}},"additionalProperties":false},"notifications":{"type":"object","description":"Allowlist-gated notification channels. An event fires on a channel only when it is named in that channel's array.","properties":{"mentionOperator":{"type":"boolean","description":"When true, `github.operatorHandle` is @-mentioned in the comments the notifier posts.","default":false},"commentEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message"]},"uniqueItems":true,"description":"Events mirrored onto the Story issue as a comment. Deliberately narrower than `webhookEvents`: only Story-scoped events whose message reads as narrative an operator wants durably on the ticket belong here.","default":["state-transition","story-merged","operator-message"]},"webhookEvents":{"type":"array","items":{"type":"string","enum":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]},"uniqueItems":true,"description":"Events dispatched to the configured webhook. The vocabulary is the allowlist the webhook channel gates on; `merge.unlanded` and `merge.flip-failed` are allowlistable but reach the run ledger rather than `notify()` today.","default":["state-transition","story-merged","story-closing","operator-message","merge.unlanded","merge.flip-failed"]}},"additionalProperties":false}},"additionalProperties":false},"planning":{"type":"object","description":"Inputs to `/mandrel-plan`: risk escalation heuristics, ceremony-lite routing, the memory-hygiene advisory thresholds, and the cross-Story conflict-finding severity gates.","properties":{"riskHeuristics":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Prose heuristics the planner escalates a Story against. A plain array replaces the framework list; the `{ append, prepend }` extender form deep-merges with it.","default":["Destructive or irreversible data mutations (dropping tables, deleting rows without soft-delete or backup, truncating production state).","Modifications to shared security or auth infrastructure (IAM policies, auth middleware, session or token handling, secret rotation).","Changes to CI/CD, deployment pipelines, or release gating that could disable safety checks or ship unverified code to production.","Monorepo-wide AST or text replacements touching overlapping files in parallel (catastrophic merge-conflict risk across concurrent agents).","Schema migrations that rewrite existing rows or drop columns without a backfill or rollback plan."]},"complexityGate":{"type":"object","description":"Shape-derived ceremony-lite complexity routing. A lite claim is validated against the authored Story shape at persist and re-derived from the Story body at dispatch; conservative (full on any doubt). Never relaxes the Story-ticket / PR-to-main / repo-gates / security-baseline non-negotiables.","properties":{"enabled":{"type":"boolean","description":"Master switch. When false, lite routing is disabled everywhere: persist refuses lite claims and dispatch always takes the sub-agent path. Default true."},"maxArtifacts":{"type":"integer","minimum":0,"description":"Enumerated-artifact threshold reported by the plan-context complexity signals. An input signal for the planner verdict — carries no routing authority. Default 1."}},"additionalProperties":false},"memoryPool":{"type":"object","description":"Thresholds 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":{"staleAfterDays":{"type":"integer","minimum":1,"description":"Recommend a consolidation pass once the pool's stamp is older than this many days. Default 30.","default":30},"growthDelta":{"type":"integer","minimum":1,"description":"Recommend a consolidation pass once this many entries have been written since the last one. Measured against the entry count the last pass stamped, so a stamp predating that field leaves growth unmeasured and only the age threshold applies. Default 25.","default":25},"indexByteCeiling":{"type":"integer","minimum":1,"description":"Recommend a consolidation pass once the pool's `MEMORY.md` index exceeds this many bytes. Independent of the age and growth thresholds: 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},"failOnSharedEditors":{"type":"boolean","description":"When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).","default":false},"requireExplicitCrossStoryDeps":{"type":"boolean","description":"When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only).","default":false},"crossCuttingRegistries":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted.","default":["lib/orchestration/lifecycle/listeners/index.js","**/listeners/index.js","**/handlers/index.js"]},"failOnRegistryConflicts":{"type":"boolean","description":"When true, upgrade cross-cutting registry conflict findings to hard errors (default false).","default":false},"failOnLargeFanOut":{"type":"boolean","description":"When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory).","default":false},"largeFanOutThreshold":{"type":"integer","minimum":0,"description":"Call-site count above which a Story that deletes a module emits a fan-out-warning. Counts base-branch references to the deleted path basename. Soft by default; does not size or reject Stories. Default 10.","default":10},"navigation":{"type":"object","description":"Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"delivery":{"type":"object","description":"Everything `/mandrel-deliver` and `single-story-close` consume: execution timeouts, worktree isolation, runner concurrency, docs freshness, signals, quality gates, merge/CI watch, review ceremony, and the feedback loop.","properties":{"execution":{"type":"object","description":"Wall-clock bounds on the subprocesses delivery spawns.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Per-command timeout (ms) for the long-running spawns delivery drives — the close-validation chain and the gate CLIs.","default":600000},"fullSuiteLock":{"type":"boolean","description":"Serialize full-suite spawns (`npm test` / `npm run test:coverage`) behind a host-level advisory lock, so two concurrent deliveries on one checkout do not run two suites against the same cores. Best-effort: a wait that expires spawns anyway, so the lock can never fail a delivery. Set false — or export `MANDREL_FULL_SUITE_LOCK=0` for one invocation — to disable.","default":true},"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"]}}]},"signals":{"type":"object","description":"Detector thresholds for the surviving performance-signal categories. Each block is shallow-merged by the resolver.","properties":{"rework":{"type":"object","description":"Rework detector — repeated edits to one file in a run.","properties":{"editsPerFile":{"type":"integer","minimum":1,"description":"Edits to a single file within one run that trip the rework signal.","default":5}},"additionalProperties":false},"retry":{"type":"object","description":"Retry detector — the same command failing repeatedly.","properties":{"repeatCount":{"type":"integer","minimum":1,"description":"Repeats of an identical failing command that trip the retry signal.","default":3}},"additionalProperties":false}},"additionalProperties":false},"quality":{"type":"object","description":"Quality-gate configuration. Every gate lives under `gates.<tier>` and shares the same `{ enabled, baselinePath, tolerance, floors, components }` base; shared scoping lives at this block root.","properties":{"gateScoping":{"type":"object","description":"Shared scope applied to every gate that supports one, unless the gate overrides it.","properties":{"scope":{"type":"string","enum":["diff","full"],"description":"Score only the files changed against `diffRef` (`diff`) or every file in the gate target dirs (`full`).","default":"diff"},"diffRef":{"type":"string","minLength":1,"description":"Git ref the `diff` scope is computed against.","default":"main"}},"additionalProperties":false},"gates":{"type":"object","description":"The eight quality gates, each sharing the `{ enabled, baselinePath, tolerance, floors, components }` base.","properties":{"lint":{"type":"object","description":"Lint-count ratchet. Floors are absolute error/warning counts; the baseline pins the current count so a regression is visible even while the floor is not yet met.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/lint.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"errorCount":0}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}}},"additionalProperties":false},"coverage":{"type":"object","description":"Line/branch/function coverage ratchet, read from the Istanbul JSON summary the project test run emits.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/coverage.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"lines":90,"branches":85,"functions":90}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"coveragePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-relative path to the Istanbul `coverage-final.json` the capture step writes and the gate reads.","default":"coverage/coverage-final.json"},"timeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for the `npm run test:coverage` capture spawn. A SIGKILL at the budget boundary maps to exit 124 so close-validation can tell a hang from a test failure.","default":600000}},"additionalProperties":false},"crap":{"type":"object","description":"CRAP (Change Risk Anti-Pattern) ratchet — per-method cyclomatic complexity joined against per-method coverage.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/crap.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.05}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"max":30,"p95":20,"methodsAbove20":50}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the CRAP gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":["src"]},"newMethodCeiling":{"type":"integer","minimum":1,"description":"Hard CRAP ceiling applied to a method the diff introduces. A new method above it fails the gate regardless of the baseline.","default":30},"requireCoverage":{"type":"boolean","description":"When true, the gate refuses to score without a coverage artifact rather than silently reporting complexity-only rows.","default":true},"minMethodResolutionRate":{"type":"number","minimum":0,"maximum":1,"description":"Fail-closed floor on the per-method coverage JOIN (Story #4775): the fraction of methods that must resolve a coverage entry, counted only over files that HAVE one, before `update-crap-baseline.js` will persist. A broken join is silent by construction — unresolved methods are simply absent — so the updater refuses rather than writing a thin baseline and logging it as success. Not enforced below 25 joinable methods, where a diff-scoped run’s rate is noise. Default 0.75; a healthy repo resolves ~98%."},"friction":{"type":"object","description":"Friction-signal wiring for a CRAP baseline regression, so a recurring one can reach the actionable threshold.","properties":{"markerKey":{"type":"string","minLength":1,"description":"Signal marker key the regression is recorded under."}},"additionalProperties":false,"default":{"markerKey":"crap-baseline-regression"}},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate CRAP baseline refresh in the compared range. A range commit carrying it that also touches the baseline file demotes head-vs-base regressions; floors stay enforced.","default":"baseline-refresh:"},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run crap:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from CRAP discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]},"incrementalCoverage":{"type":"object","description":"The two independent full-suite economies (Story #4981, split by Story #5173). `skipWhenUnchanged` (default true) decides WHETHER to capture — no changed file under `crap.targetDirs` versus `baseRef` means no capture at all — and is a pure saving. `baselineJoin` (default false) loosens gate semantics: the CRAP join resolves a method in an untouched file from its committed baseline row instead of requiring fresh coverage for it. Neither narrows the capture run itself: a capture that does happen is the ordinary full `npm run test:coverage` (Story #5065).","properties":{"skipWhenUnchanged":{"type":"boolean","description":"Skip the capture entirely when no changed file under `crap.targetDirs` versus `baseRef` was touched. The only measured saving, and gate-semantics-neutral. Defaults to true.","default":true},"baselineJoin":{"type":"boolean","description":"Let the CRAP join resolve a method in a file the diff did not touch from its committed baseline row instead of requiring fresh coverage for it. A gate loosening, not a saving — defaults to false.","default":false},"enabled":{"type":"boolean","description":"DEPRECATED alias for setting both `skipWhenUnchanged` and `baselineJoin`. Prefer the two switches: they are not equally safe, and bundling them is why the earlier default flip was reverted. Either explicit switch overrides this alias."},"baseRef":{"type":"string","minLength":1,"description":"Git ref the changed-file set is computed against. Omitted falls back to the gate’s own `--ref` (`main`)."}},"additionalProperties":false}},"additionalProperties":false},"maintainability":{"type":"object","description":"Maintainability-index ratchet. Scores per file as the average over its methods, so deleting a small high-MI method can legitimately lower a file’s score.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/maintainability.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0.5}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"min":70}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the maintainability gate scores. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/` plus `tests/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal.","default":[]},"refreshTag":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Commit-subject substring that acknowledges a deliberate maintainability baseline refresh in the compared range. Mirrors the CRAP gate's `refreshTag`; a range commit carrying it that touches the baseline file demotes head-vs-base regressions (floors still enforced)."},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run maintainability:update` spawned by the baseline-attribution refresh path. Mirrors `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked`. Default 60000 (Story #2165).","default":60000},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from MI discovery before scoring. Orthogonal to `components` (grouping) — a file excluded here never appears in any component bucket. Absent or empty preserves the existing IGNORED_DIRS-only behaviour (Story #3217).","default":[]}},"additionalProperties":false},"mutation":{"type":"object","description":"Stryker mutation-score ratchet. Off in practice for most consumers — the baseline kind is registered but no framework path runs Stryker.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":true},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/mutation.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"score":60}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"strykerConfigPath":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Repo-relative path to the Stryker config. `null` lets Stryker resolve its own default.","default":null}},"additionalProperties":false},"lighthouse":{"type":"object","description":"Lighthouse category-score ratchet for web targets. Off by default — it needs a running deployment.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/lighthouse.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"performance":0,"accessibility":0,"bestPractices":0,"seo":0}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"baseUrl":{"type":["string","null"],"minLength":1,"not":{"type":"string","pattern":"([;&|`]|\\$\\()"},"description":"Origin the routes are resolved against. `null` leaves the gate unusable, which is why it ships disabled.","default":null},"routes":{"type":"array","items":{"type":"object","description":"One route the Lighthouse run scores.","required":["path"],"properties":{"path":{"type":"string","minLength":1,"description":"Route path appended to `baseUrl`."},"formFactor":{"type":"string","enum":["mobile","desktop"],"description":"Emulated form factor for this route."}},"additionalProperties":false},"description":"Routes to score on each run.","default":[]}},"additionalProperties":false},"bundle-size":{"type":"object","description":"Built-artifact size ratchet for web targets. Off by default — it needs declared bundles.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/bundle-size.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"percent","value":0}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"bundles":{"type":"array","items":{"type":"object","description":"One built artifact the bundle-size gate weighs.","required":["name","path","limit"],"properties":{"name":{"type":"string","minLength":1,"description":"Label the rollup row is keyed by."},"path":{"type":"string","minLength":1,"description":"Glob or path of the built artifact to measure."},"limit":{"type":"string","minLength":1,"description":"Human size ceiling (e.g. `\"180 kB\"`)."}},"additionalProperties":false},"description":"The artifacts to weigh. Empty means the gate has nothing to do.","default":[]}},"additionalProperties":false},"duplication":{"type":"object","description":"Code-duplication (DRY) gate (Story #3664). Shares the gate base and adds the scan-scope extras: the `targetDirs` the duplication scanner walks, a bounded refresh timeout mirroring crap/MI, and `ignoreGlobs` to exclude files from the scan.","properties":{"enabled":{"type":"boolean","description":"When false, the checker exits 0 with a skip line and the gate is reported as `skipped`, never omitted.","default":false},"baselinePath":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Repo-root-relative path to the gate's committed baseline artifact.","default":"baselines/duplication.json"},"tolerance":{"type":"object","description":"How much a rollup may drift from the committed baseline before the gate reports a regression.","required":["kind","value"],"properties":{"kind":{"type":"string","enum":["absolute","percent"],"description":"Whether `value` is read as raw metric units (`absolute`) or as a percentage of the baseline (`percent`)."},"value":{"type":"number","minimum":0,"description":"The tolerance magnitude. 0 means no drift is allowed."}},"additionalProperties":false,"default":{"kind":"absolute","value":1}},"floors":{"type":"object","description":"Workspace-keyed absolute floors: `{ \"<workspace>\": { \"<metric>\": number } }`. `\"*\"` is the project-wide catch-all; the metric keyset is open so per-rollup keys flow through without each gate enumerating them. Floors are absolute — unlike `tolerance`, they are enforced regardless of the baseline.","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}},"default":{"*":{"percentage":25}}},"components":{"type":"object","description":"Per-gate component map — component name to the glob list whose files roll up under it. Defaults to `{ \"*\": [\"**\"] }` at the resolver layer.","additionalProperties":{"type":"array","items":{"type":"string","minLength":1}}},"targetDirs":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","properties":{"append":{"type":"array","items":{"type":"string"}},"prepend":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}],"description":"Directories whose JS sources the duplication (DRY) gate scans for copy-paste clones. Mandrel ships a `src/`-centric default; projects whose executable code lives elsewhere (e.g. this repo's `.agents/scripts/`) override here. The framework default is intentionally not auto-discovered, so an override is the explicit, auditable signal (Story #3664).","default":["src"]},"refreshTimeoutMs":{"type":"integer","minimum":1,"description":"Bounded timeout (ms) for `npm run duplication:update` spawned by the baseline-attribution refresh path. Mirrors `crap.refreshTimeoutMs` / `coverage.timeoutMs`: a SIGKILL fired at the budget boundary maps to exit 124. Default 60000 (Story #3664).","default":60000},"ignoreGlobs":{"type":"array","items":{"type":"string","minLength":1},"description":"Minimatch glob patterns matched against the canonicalised repo-relative path of each discovered file. Files matching any pattern are excluded from duplication discovery before scanning. Orthogonal to `components` (grouping). Absent or empty preserves the existing behaviour (Story #3664).","default":[]}},"additionalProperties":false}},"additionalProperties":false},"formatAutofix":{"type":"object","description":"Bounded-timeout knob for the close-time `npx biome format --write` spawn (Story #2165). A SIGKILL fired at the budget boundary maps to exit 124 so the close orchestrator can flip the Story to `agent::blocked` with a friction comment.","properties":{"timeoutMs":{"type":"integer","minimum":1,"description":"Timeout (ms) for the format-write spawn.","default":60000}},"additionalProperties":false},"codingGuardrails":{"type":"object","description":"Authoring-time cyclomatic-complexity advisories surfaced by the quality-preview pre-commit gate.","properties":{"cyclomaticFlag":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method is flagged for a refactor look.","default":8},"cyclomaticMustFix":{"type":"integer","minimum":1,"description":"Cyclomatic complexity at which a new or changed method must be decomposed before the diff closes.","default":12},"requireSiblingTest":{"type":"boolean","description":"When true, a new source file with no colocated sibling test is reported by the guardrails pass.","default":false}},"additionalProperties":false},"autoRefresh":{"type":"object","description":"Baseline-attribution auto-refresh: when a gate can prove a regression is a legitimate consequence of the diff, it rewrites the baseline instead of blocking.","properties":{"enabled":{"type":"boolean","description":"Master switch for the auto-refresh path. When false, every baseline refresh is a deliberate operator action.","default":true},"crapJumpCap":{"type":"number","minimum":0,"description":"Largest single-row CRAP jump the auto-refresh will absorb. A larger jump is reported as a regression rather than rewritten.","default":5},"scope":{"type":"string","enum":["diff","full"],"description":"Whether an auto-refresh rescores only the changed files (`diff`) or every file in the target dirs (`full`).","default":"diff"}},"additionalProperties":false},"baselineEpsilon":{"type":"object","description":"Per-kind epsilon for s-stability-epsilon (Story #1964). Sub-epsilon row deltas resolve to prior bytes so env variance does not rewrite the on-disk baseline.","properties":{"maintainability":{"type":"number","minimum":0,"default":0.5},"crap":{"type":"number","minimum":0,"default":0.5},"coverage":{"type":"number","minimum":0,"default":0.1},"mutation":{"type":"number","minimum":0,"default":0.5},"lint":{"type":"number","minimum":0,"default":0},"lighthouse":{"type":"number","minimum":0,"default":1},"bundle-size":{"type":"number","minimum":0,"default":1024},"duplication":{"type":"number","minimum":0,"default":0.5}},"additionalProperties":false},"requireBaselines":{"type":"boolean","description":"Story #4495. Fail-closed baseline-enforcement policy for the unified check-baselines close-validation gate. When false (default), a consumer that enables baseline gates (crap/maintainability/…) but has not committed the corresponding baseline artifacts under baselines/ gets a clean skip-with-reason instead of a deterministic first-try close failure. Set true to keep the gate registered so an absent baseline artifact fails close-validation with a preflight hint naming the fix (the fail-closed posture).","default":false},"navigability":{"type":"object","description":"Navigability lens + journey-suite config (Epic #4131, F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and /mandrel-deliver's per-Story ceremony (journey suite). Opt-in: absent or empty routeGlobs degrades to a silent no-op.","properties":{"routeGlobs":{"type":"array","items":{"type":"string"},"description":"Glob patterns (pages/**, app/**/route.ts) marking paths that add a user-facing route — the route-tree SSOT the navigability lens enumerates and the route-added routing predicate matches against.","default":[]},"navRegistry":{"type":"array","items":{"type":"string"},"description":"Tokens identifying the nav-registry SSOT the navigability lens checks every route resolves a nav door against.","default":[]},"journeySuite":{"type":"string","description":"Path or command for the per-persona journey suite /mandrel-deliver's per-Story ceremony runs."}},"additionalProperties":false}},"additionalProperties":false},"mergeWatch":{"type":"object","description":"Knobs consumed by the close-and-land merge wait (Story #4543; defaults in `lib/orchestration/merge-poll.js`). `mode` (Story #4698) selects the close-time merge posture. `intervalSeconds` is the poll cadence between `gh pr view` probes after the arm. `maxWaitSeconds` bounds ONE invocation of the merge wait and its expiry returns a resumable `pending` terminal with no label mutation; `maxBudgetSeconds` bounds the CUMULATIVE wait across resumes (anchored at the PR's createdAt, so a resume does not restart the clock) and exhausting it is the genuine give-up that classifies and blocks. `updateAttempts` caps the bounded update of a behind-the-base PR.","properties":{"mode":{"type":"string","enum":["sync","async"],"description":"Close-time merge-wait posture (Story #4698). `sync` (default) keeps the in-close foreground merge wait unchanged. `async` caps the per-invocation wait to a short ~60s probe window — long enough to catch an instant merge and, via the head-anchored required-check predicate, an instantly-red required check — then returns the resumable `pending` terminal (exit 3) with a `nextCommand`. Opt in when slow CI makes the foreground wait routinely expire: the worker launches `nextCommand` in the background instead of burning the host tool slot polling. `maxBudgetSeconds` (the cumulative give-up) is unchanged."},"intervalSeconds":{"type":"integer","minimum":1,"description":"Seconds between merge-wait polls. Default 30.","default":30},"maxWaitSeconds":{"type":"integer","minimum":1,"description":"Per-invocation merge-wait bound (seconds). Default 300 (5 minutes) — chosen to fit inside a single host tool invocation (~10 min ceiling) alongside the close gates that precede the wait. Expiry yields `pending` (exit 3), never a block. Headless callers with no host ceiling raise this to land in one block."},"maxBudgetSeconds":{"type":"integer","minimum":1,"description":"Cumulative wall-clock budget (seconds) across merge-wait resumes, anchored at the PR's createdAt. Default 3600 (60 minutes). Exhausting this classifies the block and transitions the Story to agent::blocked.","default":3600},"updateAttempts":{"type":"integer","minimum":0,"description":"Maximum times the merge wait will bring a behind-the-base PR up to date before giving up on the branch. Default 3. Set 0 to disable the update."}},"additionalProperties":false},"codeReview":{"type":"object","description":"Review-provider chain plus bounded-retry knobs for the /mandrel-deliver code-review ceremony.","properties":{"providers":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","enum":["native","codex","security-review","ultrareview"],"description":"Registered provider key. Inline: native, codex, security-review. Manual-prompt: ultrareview."},"scopes":{"type":"array","items":{"type":"string","enum":["story","epic"]},"description":"Invocation scopes this entry fires on. Default (omitted) is both."},"optional":{"type":"boolean","default":false,"description":"When true, construction failure (host missing CLI/plugin) is logged and the entry is skipped instead of hard-failing the chain. Use for cross-runtime portability."},"manualPrompt":{"type":"boolean","default":false,"description":"When true, the entry is loaded from the manual-prompt registry: contributes a one-line operator suggestion via `renderPrompt()` instead of running a review via `runReview()`. Does not affect severity counts or `halted`."},"when":{"type":"object","description":"Optional label-gated invocation predicate. Evaluated against the ticket's current labels at invocation time; when false, the entry is silently skipped for this run.","properties":{"label":{"type":"string","minLength":1,"description":"Single label that MUST be present on the ticket."},"labelAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Run when ANY of the listed labels is present."}},"additionalProperties":false}},"additionalProperties":false},"description":"Review-provider chain (Story #2871). When unset or empty, defaults to [{ name: \"native\" }]. The orchestrator iterates inline entries in declaration order and merges their Finding[] before posting one structured comment; manual-prompt entries (e.g. ultrareview) contribute a trailing 'Manual review suggestions' section. Selecting an adapter whose probe fails hard-fails at factory construction unless declared `optional: true` in the chain.","default":[{"name":"native"},{"name":"security-review","scopes":["story"],"optional":true},{"name":"ultrareview","scopes":["story"],"manualPrompt":true,"when":{"label":"risk::high"}}]},"providerConfig":{"type":"object","additionalProperties":true,"description":"Optional escape hatch for adapter-specific configuration. No documented keys in Epic #2815; reserved so future adapters can be configured without another schema migration."},"maxFixAttempts":{"type":"integer","minimum":0,"description":"Maximum auto-fix retry attempts per finding in /mandrel-deliver Phase 5 (code-review). 0 disables auto-fix. Default 3.","default":3},"maxFixScopeFiles":{"type":"integer","minimum":1,"description":"Maximum file count a single auto-fix may modify before escalating to agent::blocked. Default 5.","default":5},"autoFixSeverity":{"type":"string","enum":["high","medium"],"description":"Severity threshold for on-branch remediation in /mandrel-deliver Phase 5 (code-review). `medium` (default) routes 🔴/🟠/🟡 findings into the host-LLM focused-fix routing (Mediums batched per lens: one commit per lens, a single validation + rescan at the end) while 🟢 suggestions still graduate to follow-up issues; `high` reproduces the pre-4399 Critical/High-only routing. Hard cutover — no back-compat flag.","default":"medium"}},"additionalProperties":false},"review":{"type":"object","description":"Close-scope review tuning (Story #4699). Governs the Story-scope local-lens pass that runs inside the close subprocess; the maker-blind code-review pass and all hard gates are unaffected.","properties":{"lensDiffFloor":{"type":"integer","minimum":0,"description":"Changed-line floor for the close-scope lens walk (Story #4699). A diff strictly below this many changed lines (additions + deletions) with zero sensitive-path hits skips lens materialization and records the skip in the findings-yield ledger. Default 40; 0 disables the skip. Hard gates and the maker-blind code-review pass are unaffected."}},"additionalProperties":false},"refactorStage":{"type":"object","description":"Opt-in, config-gated post-green refactor checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly additive and default-OFF: when disabled, story-deliver behaves exactly as before. Advisory only — never changes existing close-validation gate semantics.","properties":{"enabled":{"type":"boolean","description":"When true, story-deliver runs an advisory post-green refactor stage (core/code-review-and-quality skill, Post-Green Refactor Pass) after the suite is green. Default false — when unset the stage is skipped and close-validation gate semantics are unchanged.","default":false}},"additionalProperties":false},"acceptanceEval":{"type":"object","description":"Story #3819. Bounded per-Story acceptance self-eval loop. After the implementation commits land and before the Story-implementation phase flips to `closing`, an independent (fresh-context) critic pass scores the caller-injected change set against each inline `acceptance[]` item, redrafts the unmet items, and re-evaluates — capped at `maxRounds` redraft rounds, then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the loop is a hard cutover (always on).","properties":{"maxRounds":{"type":"integer","minimum":1,"description":"Maximum number of redraft rounds before escalation. Default 2; clamped into [1, hard ceiling] by lib/config/acceptance-eval.js so the cap can never be disabled (maxRounds: 0 clamps up to 1).","default":2}},"additionalProperties":false},"feedbackLoop":{"type":"object","description":"Opt-out toggles for the close-time auto-file graduators. All default to auto-filing on.","properties":{"auditResultsAutoFile":{"type":"boolean","description":"When true (default), the close-time audit-results graduator auto-files non-blocking audit-results findings as follow-up issues routed by source classification. Set to false to suppress auto-filing; findings remain accessible in the structured comments on the Story.","default":true},"retroProposals":{"type":"boolean","description":"When true (default), the retro auto-files its actionable routed proposals as meta::<framework-gap|consumer-improvement> + friction::<category> issues via the graduator pre-parsed-findings seam, and the rendered retro sections list the filed issue numbers instead of paste-ready gh command stanzas. Set to false to fall back to the command stanzas.","default":true},"frictionWindowDays":{"type":"integer","minimum":1,"description":"How many days back the run-scope friction recurrence window reaches (Story #4850). The window spans every surviving per-Story signal stream rather than the triggering run's own Stories, so that a defect firing once per Story can reach the actionable threshold; this bounds it by age so a defect fixed weeks ago stops re-routing. Rows older than the bound — and rows carrying no readable timestamp — are excluded and counted on the roll-up step result. Default 30."}},"additionalProperties":false},"auditToStories":{"type":"object","description":"Knobs for the `/audit-to-stories` unattended (`--auto`) sweep (Story #4626).","properties":{"severityFloor":{"type":"string","enum":["critical","high","medium","low","all"],"description":"Minimum severity a finding must meet to be proposed as a Story on an unattended `/audit-to-stories --auto` sweep (Story #4626). Default high."},"autoComment":{"type":"boolean","description":"When true (default), `/audit-to-stories --auto` posts a re-detected comment on an already-open matched Issue instead of silently skipping it."}},"additionalProperties":false},"ci":{"type":"object","description":"CI-aware delivery namespace (Story #4356, Epic #4355): the merge/CI watch poll loop and the merge posture.","properties":{"watch":{"type":"object","description":"Story #4356 (Epic #4355). Poll-loop tuning for the merge/CI watch. pollIntervalMs is the cadence between check probes; maxPolls caps total probes before the watcher gives up; maxResumes caps how many times the watcher may resume after a transient stall; attachWindowMs bounds the wait for a required context to attach at all.","properties":{"pollIntervalMs":{"type":"integer","minimum":1,"description":"Milliseconds between check probes.","default":10000},"maxPolls":{"type":"integer","minimum":1,"description":"Total probes before the watcher gives up on one invocation.","default":180},"maxResumes":{"type":"integer","minimum":0,"description":"How many times the watcher may resume after a transient stall. 0 disables resuming.","default":3},"attachWindowMs":{"type":"integer","minimum":1,"description":"Story #4890. How long (ms) the watch keeps re-resolving an EMPTY `gh pr checks --required` set before it stops waiting for a required context to attach. A ruleset attaches its contexts asynchronously and the arrival latency is set by the slowest one, so a required context that is an aggregator job gated on every other tier is the last to appear — measured at 16m52s on this repository. Default 1200000 (20 minutes). Raise it for a repository whose contexts arrive later still; exhausting the window is never reported as a red check (the watch exits 2, not-yet-started).","default":1200000}},"additionalProperties":false},"autoMerge":{"type":"string","enum":["trust-ci","strict"],"description":"Story #4356 (Epic #4355). Merge posture. 'trust-ci' (default) merges once required checks pass; 'strict' additionally requires a clean review gate.","default":"trust-ci"},"blockOnAdvisoryFailure":{"type":"boolean","description":"Story #5096. When true (default), delivery refuses to arm — and disarms — GitHub native auto-merge while a non-required (advisory) check is genuinely red on the PR head and GitHub reports the PR mergeable anyway (mergeStateStatus=UNSTABLE). `--auto` waits on REQUIRED contexts only, so without this a red advisory quality gate merges unattended. Set false to restore the pre-#5096 behaviour verbatim.","default":true},"advisoryAllowlist":{"type":"array","items":{"type":"string"},"description":"Story #5096. Check-run names exempt from blockOnAdvisoryFailure — a red run whose name matches exactly never blocks arming. Matching is exact; an unnamed run can never match and always blocks.","default":[]},"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 maker-checker sampling. The v1 singleDelivery epic-route kill-switch was removed in Stage 6.","properties":{"roleScopedAgents":{"type":"boolean","description":"Epic #4478 (M7-B). Kill-switch for the role-scoped boot contexts. When true (default), a converted delivery spawn (`story-worker`, `acceptance-critic`) boots on its own `.claude/agents/<role>.md` system prompt instead of re-paying the full CLAUDE.md @-import closure. When false, every converted spawn falls back to `subagent_type: general-purpose` — the instant, code-rollback-free per-consumer revert, and the universal escape for hosts that ignore `.claude/agents/`. The fallback is the full-closure agent that ran before M7-B, so flipping it off never drops a gate.","default":true},"freshCriticSampleRate":{"type":"number","minimum":0,"maximum":1,"description":"Epic #4478 (M7-B, Part 2). Maker-checker sampling floor. Under the standard profile, a change set touching no sensitive path routes its acceptance clusters down the contract-identical inline critic path, but this fraction of them is still forced through a fresh-context critic so a low derived level never means zero independent checking. Clamped to [0, 1]; 0 disables the floor, 1 forces every cluster fresh. Consumed by resolveCeremonyForRisk (lib/orchestration/ceremony-routing.js).","default":0.2},"ceremonyProfile":{"type":"string","enum":["minimal","standard","strict"],"description":"Acceptance-ceremony depth. minimal = always inline critic; strict = always fresh-context critic; standard (default) = routed off the change level derived from the Story diff, with the maker-checker sampling floor.","default":"standard"},"closeAndLand":{"type":"boolean","description":"When true (default), single-story-close lands through merge in one close. Opt out per-run with --no-wait-merge.","default":true}},"additionalProperties":false}},"additionalProperties":false},"qa":{"type":"object","description":"Agent-driven QA harness contract (Epic #3214; environment-keyed by Epic #4326). Optional top-level block. All filesystem-pointer fields (featureRoot, fixturesManifest, designTokens) carry safeString guards rejecting shell-injection metacharacters. environments is a map of named deployment targets (each with a baseUrl, a per-environment url-template/skill sign-in seam, and an optional allowWrites gate); personas resolve to a stored credential reference or a sign-in skill, never an inline secret.","properties":{"featureRoot":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Directory holding the Gherkin feature files the QA sweep drives.","default":"tests/features"},"fixturesManifest":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"description":"Path to the persona/fixture manifest the harness seeds from.","default":"tests/fixtures/personas.json"},"environments":{"type":"object","description":"Deployment targets the QA harness can run against (Epic #4326). A map keyed by environment name (e.g. `local`, `staging`), each carrying its own `baseUrl`, an optional per-environment sign-in seam, and an optional `allowWrites` gate. `signInSeam` is the union `{ urlTemplate }` (a dev impersonation route) or `{ skill }` (a skill id such as `stack/qa/acme-sso`, resolved against `.agents/skills/` then the consumer-writable `.agents/local/skills/` zone, and rejected loudly by resolveQaEnvironment when it resolves under neither); omit it entirely for a target with no sign-in seam. resolveQaEnvironment selects one environment per invocation by name or by raw-URL origin match against `baseUrl`; `allowWrites` defaults to true only for the `local` environment. Replaces the retired top-level single `signInSeam`.","default":{"local":{"baseUrl":"http://localhost:3000","signInSeam":{"urlTemplate":"/dev/sign-in-as/{persona}"}},"staging":{"baseUrl":"https://staging.example.test","allowWrites":false}},"minProperties":1,"additionalProperties":{"type":"object","properties":{"baseUrl":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1},"signInSeam":{"oneOf":[{"type":"object","properties":{"urlTemplate":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1}},"required":["urlTemplate"],"additionalProperties":false},{"type":"object","properties":{"skill":{"type":"string","not":{"pattern":"([;&|`]|\\$\\()"},"minLength":1,"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 pattern29 = 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.branchProtection !== undefined){let data22 = data15.branchProtection;if(data22 && typeof data22 == "object" && !Array.isArray(data22)){for(const key5 in data22){if(!((key5 === "enforce") || (key5 === "requiredChecks"))){const err68 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key5},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}if(data22.enforce !== undefined){if(typeof data22.enforce !== "boolean"){const err69 = {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 = [err69];}else {vErrors.push(err69);}errors++;}}if(data22.requiredChecks !== undefined){let data24 = data22.requiredChecks;if(Array.isArray(data24)){const len1 = data24.length;for(let i1=0; i1<len1; i1++){let data25 = data24[i1];if(data25 && typeof data25 == "object" && !Array.isArray(data25)){if(data25.name === undefined){const err70 = {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 = [err70];}else {vErrors.push(err70);}errors++;}if(data25.cmd === undefined){const err71 = {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 = [err71];}else {vErrors.push(err71);}errors++;}for(const key6 in data25){if(!((key6 === "name") || (key6 === "cmd"))){const err72 = {instancePath:instancePath+"/github/branchProtection/requiredChecks/" + i1,schemaPath:"#/properties/github/properties/branchProtection/properties/requiredChecks/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key6},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err72];}else {vErrors.push(err72);}errors++;}}if(data25.name !== undefined){let data26 = data25.name;if(typeof data26 === "string"){if(func2(data26) < 1){const err73 = {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 = [err73];}else {vErrors.push(err73);}errors++;}}else {const err74 = {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 = [err74];}else {vErrors.push(err74);}errors++;}}if(data25.cmd !== undefined){let data27 = data25.cmd;if(Array.isArray(data27)){if(data27.length < 1){const err75 = {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 = [err75];}else {vErrors.push(err75);}errors++;}const len2 = data27.length;for(let i2=0; i2<len2; i2++){let data28 = data27[i2];if(typeof data28 === "string"){if(func2(data28) < 1){const err76 = {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 = [err76];}else {vErrors.push(err76);}errors++;}}else {const err77 = {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 = [err77];}else {vErrors.push(err77);}errors++;}}}else {const err78 = {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 = [err78];}else {vErrors.push(err78);}errors++;}}}else {const err79 = {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 = [err79];}else {vErrors.push(err79);}errors++;}}}else {const err80 = {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 = [err80];}else {vErrors.push(err80);}errors++;}}}else {const err81 = {instancePath:instancePath+"/github/branchProtection",schemaPath:"#/properties/github/properties/branchProtection/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err81];}else {vErrors.push(err81);}errors++;}}if(data15.mergeMethods !== undefined){let data29 = data15.mergeMethods;if(data29 && typeof data29 == "object" && !Array.isArray(data29)){for(const key7 in data29){if(!(((((key7 === "allow_squash_merge") || (key7 === "allow_rebase_merge")) || (key7 === "allow_merge_commit")) || (key7 === "allow_auto_merge")) || (key7 === "delete_branch_on_merge"))){const err82 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key7},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err82];}else {vErrors.push(err82);}errors++;}}if(data29.allow_squash_merge !== undefined){if(typeof data29.allow_squash_merge !== "boolean"){const err83 = {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 = [err83];}else {vErrors.push(err83);}errors++;}}if(data29.allow_rebase_merge !== undefined){if(typeof data29.allow_rebase_merge !== "boolean"){const err84 = {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 = [err84];}else {vErrors.push(err84);}errors++;}}if(data29.allow_merge_commit !== undefined){if(typeof data29.allow_merge_commit !== "boolean"){const err85 = {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 = [err85];}else {vErrors.push(err85);}errors++;}}if(data29.allow_auto_merge !== undefined){if(typeof data29.allow_auto_merge !== "boolean"){const err86 = {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 = [err86];}else {vErrors.push(err86);}errors++;}}if(data29.delete_branch_on_merge !== undefined){if(typeof data29.delete_branch_on_merge !== "boolean"){const err87 = {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 = [err87];}else {vErrors.push(err87);}errors++;}}}else {const err88 = {instancePath:instancePath+"/github/mergeMethods",schemaPath:"#/properties/github/properties/mergeMethods/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err88];}else {vErrors.push(err88);}errors++;}}if(data15.notifications !== undefined){let data35 = data15.notifications;if(data35 && typeof data35 == "object" && !Array.isArray(data35)){for(const key8 in data35){if(!(((key8 === "mentionOperator") || (key8 === "commentEvents")) || (key8 === "webhookEvents"))){const err89 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key8},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err89];}else {vErrors.push(err89);}errors++;}}if(data35.mentionOperator !== undefined){if(typeof data35.mentionOperator !== "boolean"){const err90 = {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 = [err90];}else {vErrors.push(err90);}errors++;}}if(data35.commentEvents !== undefined){let data37 = data35.commentEvents;if(Array.isArray(data37)){const len3 = data37.length;for(let i3=0; i3<len3; i3++){let data38 = data37[i3];if(typeof data38 !== "string"){const err91 = {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 = [err91];}else {vErrors.push(err91);}errors++;}if(!((((data38 === "state-transition") || (data38 === "story-merged")) || (data38 === "story-closing")) || (data38 === "operator-message"))){const err92 = {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 = [err92];}else {vErrors.push(err92);}errors++;}}let i4 = data37.length;let j0;if(i4 > 1){const indices0 = {};for(;i4--;){let item0 = data37[i4];if(typeof item0 !== "string"){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];const err93 = {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 = [err93];}else {vErrors.push(err93);}errors++;break;}indices0[item0] = i4;}}}else {const err94 = {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 = [err94];}else {vErrors.push(err94);}errors++;}}if(data35.webhookEvents !== undefined){let data39 = data35.webhookEvents;if(Array.isArray(data39)){const len4 = data39.length;for(let i5=0; i5<len4; i5++){let data40 = data39[i5];if(typeof data40 !== "string"){const err95 = {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 = [err95];}else {vErrors.push(err95);}errors++;}if(!((((((data40 === "state-transition") || (data40 === "story-merged")) || (data40 === "story-closing")) || (data40 === "operator-message")) || (data40 === "merge.unlanded")) || (data40 === "merge.flip-failed"))){const err96 = {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 = [err96];}else {vErrors.push(err96);}errors++;}}let i6 = data39.length;let j1;if(i6 > 1){const indices1 = {};for(;i6--;){let item1 = data39[i6];if(typeof item1 !== "string"){continue;}if(typeof indices1[item1] == "number"){j1 = indices1[item1];const err97 = {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 = [err97];}else {vErrors.push(err97);}errors++;break;}indices1[item1] = i6;}}}else {const err98 = {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 = [err98];}else {vErrors.push(err98);}errors++;}}}else {const err99 = {instancePath:instancePath+"/github/notifications",schemaPath:"#/properties/github/properties/notifications/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err99];}else {vErrors.push(err99);}errors++;}}}else {const err100 = {instancePath:instancePath+"/github",schemaPath:"#/properties/github/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err100];}else {vErrors.push(err100);}errors++;}}if(data.planning !== undefined){let data41 = data.planning;if(data41 && typeof data41 == "object" && !Array.isArray(data41)){for(const key9 in data41){if(!(func10.call(schema11.properties.planning.properties, key9))){const err101 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key9},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err101];}else {vErrors.push(err101);}errors++;}}if(data41.riskHeuristics !== undefined){let data42 = data41.riskHeuristics;const _errs116 = errors;let valid31 = false;let passing0 = null;const _errs117 = errors;if(Array.isArray(data42)){const len5 = data42.length;for(let i7=0; i7<len5; i7++){if(typeof data42[i7] !== "string"){const err102 = {instancePath:instancePath+"/planning/riskHeuristics/" + i7,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err102];}else {vErrors.push(err102);}errors++;}}}else {const err103 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err103];}else {vErrors.push(err103);}errors++;}var _valid0 = _errs117 === errors;if(_valid0){valid31 = true;passing0 = 0;}const _errs121 = errors;if(data42 && typeof data42 == "object" && !Array.isArray(data42)){for(const key10 in data42){if(!((key10 === "append") || (key10 === "prepend"))){const err104 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key10},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err104];}else {vErrors.push(err104);}errors++;}}if(data42.append !== undefined){let data44 = data42.append;if(Array.isArray(data44)){const len6 = data44.length;for(let i8=0; i8<len6; i8++){if(typeof data44[i8] !== "string"){const err105 = {instancePath:instancePath+"/planning/riskHeuristics/append/" + i8,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err105];}else {vErrors.push(err105);}errors++;}}}else {const err106 = {instancePath:instancePath+"/planning/riskHeuristics/append",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err106];}else {vErrors.push(err106);}errors++;}}if(data42.prepend !== undefined){let data46 = data42.prepend;if(Array.isArray(data46)){const len7 = data46.length;for(let i9=0; i9<len7; i9++){if(typeof data46[i9] !== "string"){const err107 = {instancePath:instancePath+"/planning/riskHeuristics/prepend/" + i9,schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err107];}else {vErrors.push(err107);}errors++;}}}else {const err108 = {instancePath:instancePath+"/planning/riskHeuristics/prepend",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err108];}else {vErrors.push(err108);}errors++;}}}else {const err109 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err109];}else {vErrors.push(err109);}errors++;}var _valid0 = _errs121 === errors;if(_valid0 && valid31){valid31 = false;passing0 = [passing0, 1];}else {if(_valid0){valid31 = true;passing0 = 1;}}if(!valid31){const err110 = {instancePath:instancePath+"/planning/riskHeuristics",schemaPath:"#/properties/planning/properties/riskHeuristics/oneOf",keyword:"oneOf",params:{passingSchemas: passing0},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err110];}else {vErrors.push(err110);}errors++;}else {errors = _errs116;if(vErrors !== null){if(_errs116){vErrors.length = _errs116;}else {vErrors = null;}}}}if(data41.complexityGate !== undefined){let data48 = data41.complexityGate;if(data48 && typeof data48 == "object" && !Array.isArray(data48)){for(const key11 in data48){if(!((key11 === "enabled") || (key11 === "maxArtifacts"))){const err111 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key11},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err111];}else {vErrors.push(err111);}errors++;}}if(data48.enabled !== undefined){if(typeof data48.enabled !== "boolean"){const err112 = {instancePath:instancePath+"/planning/complexityGate/enabled",schemaPath:"#/properties/planning/properties/complexityGate/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err112];}else {vErrors.push(err112);}errors++;}}if(data48.maxArtifacts !== undefined){let data50 = data48.maxArtifacts;if(!(((typeof data50 == "number") && (!(data50 % 1) && !isNaN(data50))) && (isFinite(data50)))){const err113 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err113];}else {vErrors.push(err113);}errors++;}if((typeof data50 == "number") && (isFinite(data50))){if(data50 < 0 || isNaN(data50)){const err114 = {instancePath:instancePath+"/planning/complexityGate/maxArtifacts",schemaPath:"#/properties/planning/properties/complexityGate/properties/maxArtifacts/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err114];}else {vErrors.push(err114);}errors++;}}}}else {const err115 = {instancePath:instancePath+"/planning/complexityGate",schemaPath:"#/properties/planning/properties/complexityGate/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err115];}else {vErrors.push(err115);}errors++;}}if(data41.memoryPool !== undefined){let data51 = data41.memoryPool;if(data51 && typeof data51 == "object" && !Array.isArray(data51)){for(const key12 in data51){if(!(((key12 === "staleAfterDays") || (key12 === "growthDelta")) || (key12 === "indexByteCeiling"))){const err116 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key12},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err116];}else {vErrors.push(err116);}errors++;}}if(data51.staleAfterDays !== undefined){let data52 = data51.staleAfterDays;if(!(((typeof data52 == "number") && (!(data52 % 1) && !isNaN(data52))) && (isFinite(data52)))){const err117 = {instancePath:instancePath+"/planning/memoryPool/staleAfterDays",schemaPath:"#/properties/planning/properties/memoryPool/properties/staleAfterDays/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err117];}else {vErrors.push(err117);}errors++;}if((typeof data52 == "number") && (isFinite(data52))){if(data52 < 1 || isNaN(data52)){const err118 = {instancePath:instancePath+"/planning/memoryPool/staleAfterDays",schemaPath:"#/properties/planning/properties/memoryPool/properties/staleAfterDays/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err118];}else {vErrors.push(err118);}errors++;}}}if(data51.growthDelta !== undefined){let data53 = data51.growthDelta;if(!(((typeof data53 == "number") && (!(data53 % 1) && !isNaN(data53))) && (isFinite(data53)))){const err119 = {instancePath:instancePath+"/planning/memoryPool/growthDelta",schemaPath:"#/properties/planning/properties/memoryPool/properties/growthDelta/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err119];}else {vErrors.push(err119);}errors++;}if((typeof data53 == "number") && (isFinite(data53))){if(data53 < 1 || isNaN(data53)){const err120 = {instancePath:instancePath+"/planning/memoryPool/growthDelta",schemaPath:"#/properties/planning/properties/memoryPool/properties/growthDelta/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err120];}else {vErrors.push(err120);}errors++;}}}if(data51.indexByteCeiling !== undefined){let data54 = data51.indexByteCeiling;if(!(((typeof data54 == "number") && (!(data54 % 1) && !isNaN(data54))) && (isFinite(data54)))){const err121 = {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 = [err121];}else {vErrors.push(err121);}errors++;}if((typeof data54 == "number") && (isFinite(data54))){if(data54 < 1 || isNaN(data54)){const err122 = {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 = [err122];}else {vErrors.push(err122);}errors++;}}}}else {const err123 = {instancePath:instancePath+"/planning/memoryPool",schemaPath:"#/properties/planning/properties/memoryPool/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err123];}else {vErrors.push(err123);}errors++;}}if(data41.failOnSharedEditors !== undefined){if(typeof data41.failOnSharedEditors !== "boolean"){const err124 = {instancePath:instancePath+"/planning/failOnSharedEditors",schemaPath:"#/properties/planning/properties/failOnSharedEditors/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err124];}else {vErrors.push(err124);}errors++;}}if(data41.requireExplicitCrossStoryDeps !== undefined){if(typeof data41.requireExplicitCrossStoryDeps !== "boolean"){const err125 = {instancePath:instancePath+"/planning/requireExplicitCrossStoryDeps",schemaPath:"#/properties/planning/properties/requireExplicitCrossStoryDeps/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err125];}else {vErrors.push(err125);}errors++;}}if(data41.crossCuttingRegistries !== undefined){let data57 = data41.crossCuttingRegistries;const _errs153 = errors;let valid41 = false;let passing1 = null;const _errs154 = errors;if(Array.isArray(data57)){const len8 = data57.length;for(let i10=0; i10<len8; i10++){if(typeof data57[i10] !== "string"){const err126 = {instancePath:instancePath+"/planning/crossCuttingRegistries/" + i10,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err126];}else {vErrors.push(err126);}errors++;}}}else {const err127 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/0/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err127];}else {vErrors.push(err127);}errors++;}var _valid1 = _errs154 === errors;if(_valid1){valid41 = true;passing1 = 0;}const _errs158 = errors;if(data57 && typeof data57 == "object" && !Array.isArray(data57)){for(const key13 in data57){if(!((key13 === "append") || (key13 === "prepend"))){const err128 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key13},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err128];}else {vErrors.push(err128);}errors++;}}if(data57.append !== undefined){let data59 = data57.append;if(Array.isArray(data59)){const len9 = data59.length;for(let i11=0; i11<len9; i11++){if(typeof data59[i11] !== "string"){const err129 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append/" + i11,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err129];}else {vErrors.push(err129);}errors++;}}}else {const err130 = {instancePath:instancePath+"/planning/crossCuttingRegistries/append",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/append/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err130];}else {vErrors.push(err130);}errors++;}}if(data57.prepend !== undefined){let data61 = data57.prepend;if(Array.isArray(data61)){const len10 = data61.length;for(let i12=0; i12<len10; i12++){if(typeof data61[i12] !== "string"){const err131 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend/" + i12,schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err131];}else {vErrors.push(err131);}errors++;}}}else {const err132 = {instancePath:instancePath+"/planning/crossCuttingRegistries/prepend",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/properties/prepend/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err132];}else {vErrors.push(err132);}errors++;}}}else {const err133 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf/1/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err133];}else {vErrors.push(err133);}errors++;}var _valid1 = _errs158 === errors;if(_valid1 && valid41){valid41 = false;passing1 = [passing1, 1];}else {if(_valid1){valid41 = true;passing1 = 1;}}if(!valid41){const err134 = {instancePath:instancePath+"/planning/crossCuttingRegistries",schemaPath:"#/properties/planning/properties/crossCuttingRegistries/oneOf",keyword:"oneOf",params:{passingSchemas: passing1},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err134];}else {vErrors.push(err134);}errors++;}else {errors = _errs153;if(vErrors !== null){if(_errs153){vErrors.length = _errs153;}else {vErrors = null;}}}}if(data41.failOnRegistryConflicts !== undefined){if(typeof data41.failOnRegistryConflicts !== "boolean"){const err135 = {instancePath:instancePath+"/planning/failOnRegistryConflicts",schemaPath:"#/properties/planning/properties/failOnRegistryConflicts/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err135];}else {vErrors.push(err135);}errors++;}}if(data41.failOnLargeFanOut !== undefined){if(typeof data41.failOnLargeFanOut !== "boolean"){const err136 = {instancePath:instancePath+"/planning/failOnLargeFanOut",schemaPath:"#/properties/planning/properties/failOnLargeFanOut/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err136];}else {vErrors.push(err136);}errors++;}}if(data41.largeFanOutThreshold !== undefined){let data65 = data41.largeFanOutThreshold;if(!(((typeof data65 == "number") && (!(data65 % 1) && !isNaN(data65))) && (isFinite(data65)))){const err137 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err137];}else {vErrors.push(err137);}errors++;}if((typeof data65 == "number") && (isFinite(data65))){if(data65 < 0 || isNaN(data65)){const err138 = {instancePath:instancePath+"/planning/largeFanOutThreshold",schemaPath:"#/properties/planning/properties/largeFanOutThreshold/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err138];}else {vErrors.push(err138);}errors++;}}}if(data41.navigation !== undefined){let data66 = data41.navigation;if(data66 && typeof data66 == "object" && !Array.isArray(data66)){for(const key14 in data66){if(!((key14 === "routeGlobs") || (key14 === "navRegistry"))){const err139 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key14},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err139];}else {vErrors.push(err139);}errors++;}}if(data66.routeGlobs !== undefined){let data67 = data66.routeGlobs;if(Array.isArray(data67)){const len11 = data67.length;for(let i13=0; i13<len11; i13++){if(typeof data67[i13] !== "string"){const err140 = {instancePath:instancePath+"/planning/navigation/routeGlobs/" + i13,schemaPath:"#/properties/planning/properties/navigation/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err140];}else {vErrors.push(err140);}errors++;}}}else {const err141 = {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 = [err141];}else {vErrors.push(err141);}errors++;}}if(data66.navRegistry !== undefined){let data69 = data66.navRegistry;if(Array.isArray(data69)){const len12 = data69.length;for(let i14=0; i14<len12; i14++){if(typeof data69[i14] !== "string"){const err142 = {instancePath:instancePath+"/planning/navigation/navRegistry/" + i14,schemaPath:"#/properties/planning/properties/navigation/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err142];}else {vErrors.push(err142);}errors++;}}}else {const err143 = {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 = [err143];}else {vErrors.push(err143);}errors++;}}}else {const err144 = {instancePath:instancePath+"/planning/navigation",schemaPath:"#/properties/planning/properties/navigation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err144];}else {vErrors.push(err144);}errors++;}}}else {const err145 = {instancePath:instancePath+"/planning",schemaPath:"#/properties/planning/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err145];}else {vErrors.push(err145);}errors++;}}if(data.delivery !== undefined){let data71 = data.delivery;if(data71 && typeof data71 == "object" && !Array.isArray(data71)){for(const key15 in data71){if(!(func10.call(schema11.properties.delivery.properties, key15))){const err146 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key15},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err146];}else {vErrors.push(err146);}errors++;}}if(data71.execution !== undefined){let data72 = data71.execution;if(data72 && typeof data72 == "object" && !Array.isArray(data72)){for(const key16 in data72){if(!(((key16 === "timeoutMs") || (key16 === "fullSuiteLock")) || (key16 === "requireCreditedCapture"))){const err147 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key16},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err147];}else {vErrors.push(err147);}errors++;}}if(data72.timeoutMs !== undefined){let data73 = data72.timeoutMs;if(!(((typeof data73 == "number") && (!(data73 % 1) && !isNaN(data73))) && (isFinite(data73)))){const err148 = {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 = [err148];}else {vErrors.push(err148);}errors++;}if((typeof data73 == "number") && (isFinite(data73))){if(data73 < 1 || isNaN(data73)){const err149 = {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 = [err149];}else {vErrors.push(err149);}errors++;}}}if(data72.fullSuiteLock !== undefined){if(typeof data72.fullSuiteLock !== "boolean"){const err150 = {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 = [err150];}else {vErrors.push(err150);}errors++;}}if(data72.requireCreditedCapture !== undefined){if(typeof data72.requireCreditedCapture !== "boolean"){const err151 = {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 = [err151];}else {vErrors.push(err151);}errors++;}}}else {const err152 = {instancePath:instancePath+"/delivery/execution",schemaPath:"#/properties/delivery/properties/execution/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err152];}else {vErrors.push(err152);}errors++;}}if(data71.docsFreshness !== undefined){let data76 = data71.docsFreshness;if(data76 && typeof data76 == "object" && !Array.isArray(data76)){for(const key17 in data76){if(!(key17 === "paths")){const err153 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key17},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err153];}else {vErrors.push(err153);}errors++;}}if(data76.paths !== undefined){let data77 = data76.paths;if(Array.isArray(data77)){const len13 = data77.length;for(let i15=0; i15<len13; i15++){let data78 = data77[i15];const _errs205 = errors;const _errs206 = errors;if(typeof data78 === "string"){if(!pattern0.test(data78)){const err154 = {};if(vErrors === null){vErrors = [err154];}else {vErrors.push(err154);}errors++;}}var valid59 = _errs206 === errors;if(valid59){const err155 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err155];}else {vErrors.push(err155);}errors++;}else {errors = _errs205;if(vErrors !== null){if(_errs205){vErrors.length = _errs205;}else {vErrors = null;}}}if(typeof data78 === "string"){if(func2(data78) < 1){const err156 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err156];}else {vErrors.push(err156);}errors++;}}else {const err157 = {instancePath:instancePath+"/delivery/docsFreshness/paths/" + i15,schemaPath:"#/properties/delivery/properties/docsFreshness/properties/paths/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err157];}else {vErrors.push(err157);}errors++;}}}else {const err158 = {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 = [err158];}else {vErrors.push(err158);}errors++;}}}else {const err159 = {instancePath:instancePath+"/delivery/docsFreshness",schemaPath:"#/properties/delivery/properties/docsFreshness/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err159];}else {vErrors.push(err159);}errors++;}}if(data71.tempRetention !== undefined){let data79 = data71.tempRetention;if(data79 && typeof data79 == "object" && !Array.isArray(data79)){for(const key18 in data79){if(!(((key18 === "enabled") || (key18 === "staleDays")) || (key18 === "classes"))){const err160 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key18},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err160];}else {vErrors.push(err160);}errors++;}}if(data79.enabled !== undefined){if(typeof data79.enabled !== "boolean"){const err161 = {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 = [err161];}else {vErrors.push(err161);}errors++;}}if(data79.staleDays !== undefined){let data81 = data79.staleDays;if(!(((typeof data81 == "number") && (!(data81 % 1) && !isNaN(data81))) && (isFinite(data81)))){const err162 = {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 = [err162];}else {vErrors.push(err162);}errors++;}if((typeof data81 == "number") && (isFinite(data81))){if(data81 < 1 || isNaN(data81)){const err163 = {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 = [err163];}else {vErrors.push(err163);}errors++;}}}if(data79.classes !== undefined){let data82 = data79.classes;if(data82 && typeof data82 == "object" && !Array.isArray(data82)){for(const key19 in data82){if(!((((key19 === "orchestrationLogs") || (key19 === "validationEvidence")) || (key19 === "auditResults")) || (key19 === "planDirs"))){const err164 = {instancePath:instancePath+"/delivery/tempRetention/classes",schemaPath:"#/properties/delivery/properties/tempRetention/properties/classes/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key19},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err164];}else {vErrors.push(err164);}errors++;}}if(data82.orchestrationLogs !== undefined){if(typeof data82.orchestrationLogs !== "boolean"){const err165 = {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 = [err165];}else {vErrors.push(err165);}errors++;}}if(data82.validationEvidence !== undefined){if(typeof data82.validationEvidence !== "boolean"){const err166 = {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 = [err166];}else {vErrors.push(err166);}errors++;}}if(data82.auditResults !== undefined){if(typeof data82.auditResults !== "boolean"){const err167 = {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 = [err167];}else {vErrors.push(err167);}errors++;}}if(data82.planDirs !== undefined){if(typeof data82.planDirs !== "boolean"){const err168 = {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 = [err168];}else {vErrors.push(err168);}errors++;}}}else {const err169 = {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 = [err169];}else {vErrors.push(err169);}errors++;}}}else {const err170 = {instancePath:instancePath+"/delivery/tempRetention",schemaPath:"#/properties/delivery/properties/tempRetention/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err170];}else {vErrors.push(err170);}errors++;}}if(data71.deliverRunner !== undefined){let data87 = data71.deliverRunner;if(data87 && typeof data87 == "object" && !Array.isArray(data87)){for(const key20 in data87){if(!((key20 === "concurrencyCap") || (key20 === "footprintGuard"))){const err171 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key20},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err171];}else {vErrors.push(err171);}errors++;}}if(data87.concurrencyCap !== undefined){let data88 = data87.concurrencyCap;if(!(((typeof data88 == "number") && (!(data88 % 1) && !isNaN(data88))) && (isFinite(data88)))){const err172 = {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 = [err172];}else {vErrors.push(err172);}errors++;}if((typeof data88 == "number") && (isFinite(data88))){if(data88 < 1 || isNaN(data88)){const err173 = {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 = [err173];}else {vErrors.push(err173);}errors++;}}}if(data87.footprintGuard !== undefined){let data89 = data87.footprintGuard;if(typeof data89 !== "string"){const err174 = {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 = [err174];}else {vErrors.push(err174);}errors++;}if(!((data89 === "enforce") || (data89 === "advisory"))){const err175 = {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 = [err175];}else {vErrors.push(err175);}errors++;}}}else {const err176 = {instancePath:instancePath+"/delivery/deliverRunner",schemaPath:"#/properties/delivery/properties/deliverRunner/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err176];}else {vErrors.push(err176);}errors++;}}if(data71.worktreeIsolation !== undefined){let data90 = data71.worktreeIsolation;const _errs235 = errors;let valid64 = true;const _errs236 = errors;if(data90 && typeof data90 == "object" && !Array.isArray(data90)){let missing0;if((data90.enabled === undefined) && (missing0 = "enabled")){const err177 = {};if(vErrors === null){vErrors = [err177];}else {vErrors.push(err177);}errors++;}else {if(data90.enabled !== undefined){if(true !== data90.enabled){const err178 = {};if(vErrors === null){vErrors = [err178];}else {vErrors.push(err178);}errors++;}}}}var _valid2 = _errs236 === errors;errors = _errs235;if(vErrors !== null){if(_errs235){vErrors.length = _errs235;}else {vErrors = null;}}if(_valid2){const _errs238 = errors;if(data90 && typeof data90 == "object" && !Array.isArray(data90)){if(data90.root === undefined){const err179 = {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 = [err179];}else {vErrors.push(err179);}errors++;}}var _valid2 = _errs238 === errors;valid64 = _valid2;}if(!valid64){const err180 = {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 = [err180];}else {vErrors.push(err180);}errors++;}if(data90 && typeof data90 == "object" && !Array.isArray(data90)){for(const key21 in data90){if(!(((((((key21 === "enabled") || (key21 === "root")) || (key21 === "nodeModulesStrategy")) || (key21 === "primeFromPath")) || (key21 === "allowSymlinkOnWindows")) || (key21 === "reapOnSuccess")) || (key21 === "bootstrapFiles"))){const err181 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key21},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err181];}else {vErrors.push(err181);}errors++;}}if(data90.enabled !== undefined){if(typeof data90.enabled !== "boolean"){const err182 = {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 = [err182];}else {vErrors.push(err182);}errors++;}}if(data90.root !== undefined){let data93 = data90.root;if(typeof data93 === "string"){if(func2(data93) < 1){const err183 = {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 = [err183];}else {vErrors.push(err183);}errors++;}}else {const err184 = {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 = [err184];}else {vErrors.push(err184);}errors++;}}if(data90.nodeModulesStrategy !== undefined){let data94 = data90.nodeModulesStrategy;if(typeof data94 !== "string"){const err185 = {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 = [err185];}else {vErrors.push(err185);}errors++;}if(!((((data94 === "per-worktree") || (data94 === "clone")) || (data94 === "symlink")) || (data94 === "pnpm-store"))){const err186 = {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 = [err186];}else {vErrors.push(err186);}errors++;}}if(data90.primeFromPath !== undefined){let data95 = data90.primeFromPath;if((typeof data95 !== "string") && (data95 !== null)){const err187 = {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 = [err187];}else {vErrors.push(err187);}errors++;}if(typeof data95 === "string"){if(func2(data95) < 1){const err188 = {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 = [err188];}else {vErrors.push(err188);}errors++;}}}if(data90.allowSymlinkOnWindows !== undefined){if(typeof data90.allowSymlinkOnWindows !== "boolean"){const err189 = {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 = [err189];}else {vErrors.push(err189);}errors++;}}if(data90.reapOnSuccess !== undefined){if(typeof data90.reapOnSuccess !== "boolean"){const err190 = {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 = [err190];}else {vErrors.push(err190);}errors++;}}if(data90.bootstrapFiles !== undefined){let data98 = data90.bootstrapFiles;if(Array.isArray(data98)){const len14 = data98.length;for(let i16=0; i16<len14; i16++){let data99 = data98[i16];if(typeof data99 === "string"){if(func2(data99) < 1){const err191 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err191];}else {vErrors.push(err191);}errors++;}}else {const err192 = {instancePath:instancePath+"/delivery/worktreeIsolation/bootstrapFiles/" + i16,schemaPath:"#/properties/delivery/properties/worktreeIsolation/properties/bootstrapFiles/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err192];}else {vErrors.push(err192);}errors++;}}}else {const err193 = {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 = [err193];}else {vErrors.push(err193);}errors++;}}}else {const err194 = {instancePath:instancePath+"/delivery/worktreeIsolation",schemaPath:"#/properties/delivery/properties/worktreeIsolation/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err194];}else {vErrors.push(err194);}errors++;}}if(data71.signals !== undefined){let data100 = data71.signals;if(data100 && typeof data100 == "object" && !Array.isArray(data100)){for(const key22 in data100){if(!((key22 === "rework") || (key22 === "retry"))){const err195 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key22},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err195];}else {vErrors.push(err195);}errors++;}}if(data100.rework !== undefined){let data101 = data100.rework;if(data101 && typeof data101 == "object" && !Array.isArray(data101)){for(const key23 in data101){if(!(key23 === "editsPerFile")){const err196 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key23},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err196];}else {vErrors.push(err196);}errors++;}}if(data101.editsPerFile !== undefined){let data102 = data101.editsPerFile;if(!(((typeof data102 == "number") && (!(data102 % 1) && !isNaN(data102))) && (isFinite(data102)))){const err197 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err197];}else {vErrors.push(err197);}errors++;}if((typeof data102 == "number") && (isFinite(data102))){if(data102 < 1 || isNaN(data102)){const err198 = {instancePath:instancePath+"/delivery/signals/rework/editsPerFile",schemaPath:"#/properties/delivery/properties/signals/properties/rework/properties/editsPerFile/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err198];}else {vErrors.push(err198);}errors++;}}}}else {const err199 = {instancePath:instancePath+"/delivery/signals/rework",schemaPath:"#/properties/delivery/properties/signals/properties/rework/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err199];}else {vErrors.push(err199);}errors++;}}if(data100.retry !== undefined){let data103 = data100.retry;if(data103 && typeof data103 == "object" && !Array.isArray(data103)){for(const key24 in data103){if(!(key24 === "repeatCount")){const err200 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key24},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err200];}else {vErrors.push(err200);}errors++;}}if(data103.repeatCount !== undefined){let data104 = data103.repeatCount;if(!(((typeof data104 == "number") && (!(data104 % 1) && !isNaN(data104))) && (isFinite(data104)))){const err201 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err201];}else {vErrors.push(err201);}errors++;}if((typeof data104 == "number") && (isFinite(data104))){if(data104 < 1 || isNaN(data104)){const err202 = {instancePath:instancePath+"/delivery/signals/retry/repeatCount",schemaPath:"#/properties/delivery/properties/signals/properties/retry/properties/repeatCount/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err202];}else {vErrors.push(err202);}errors++;}}}}else {const err203 = {instancePath:instancePath+"/delivery/signals/retry",schemaPath:"#/properties/delivery/properties/signals/properties/retry/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err203];}else {vErrors.push(err203);}errors++;}}}else {const err204 = {instancePath:instancePath+"/delivery/signals",schemaPath:"#/properties/delivery/properties/signals/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err204];}else {vErrors.push(err204);}errors++;}}if(data71.quality !== undefined){let data105 = data71.quality;if(data105 && typeof data105 == "object" && !Array.isArray(data105)){for(const key25 in data105){if(!((((((((key25 === "gateScoping") || (key25 === "gates")) || (key25 === "formatAutofix")) || (key25 === "codingGuardrails")) || (key25 === "autoRefresh")) || (key25 === "baselineEpsilon")) || (key25 === "requireBaselines")) || (key25 === "navigability"))){const err205 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key25},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err205];}else {vErrors.push(err205);}errors++;}}if(data105.gateScoping !== undefined){let data106 = data105.gateScoping;if(data106 && typeof data106 == "object" && !Array.isArray(data106)){for(const key26 in data106){if(!((key26 === "scope") || (key26 === "diffRef"))){const err206 = {instancePath:instancePath+"/delivery/quality/gateScoping",schemaPath:"#/properties/delivery/properties/quality/properties/gateScoping/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key26},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err206];}else {vErrors.push(err206);}errors++;}}if(data106.scope !== undefined){let data107 = data106.scope;if(typeof data107 !== "string"){const err207 = {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 = [err207];}else {vErrors.push(err207);}errors++;}if(!((data107 === "diff") || (data107 === "full"))){const err208 = {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 = [err208];}else {vErrors.push(err208);}errors++;}}if(data106.diffRef !== undefined){let data108 = data106.diffRef;if(typeof data108 === "string"){if(func2(data108) < 1){const err209 = {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 = [err209];}else {vErrors.push(err209);}errors++;}}else {const err210 = {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 = [err210];}else {vErrors.push(err210);}errors++;}}}else {const err211 = {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 = [err211];}else {vErrors.push(err211);}errors++;}}if(data105.gates !== undefined){let data109 = data105.gates;if(data109 && typeof data109 == "object" && !Array.isArray(data109)){for(const key27 in data109){if(!((((((((key27 === "lint") || (key27 === "coverage")) || (key27 === "crap")) || (key27 === "maintainability")) || (key27 === "mutation")) || (key27 === "lighthouse")) || (key27 === "bundle-size")) || (key27 === "duplication"))){const err212 = {instancePath:instancePath+"/delivery/quality/gates",schemaPath:"#/properties/delivery/properties/quality/properties/gates/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key27},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err212];}else {vErrors.push(err212);}errors++;}}if(data109.lint !== undefined){let data110 = data109.lint;if(data110 && typeof data110 == "object" && !Array.isArray(data110)){for(const key28 in data110){if(!(((((key28 === "enabled") || (key28 === "baselinePath")) || (key28 === "tolerance")) || (key28 === "floors")) || (key28 === "components"))){const err213 = {instancePath:instancePath+"/delivery/quality/gates/lint",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key28},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err213];}else {vErrors.push(err213);}errors++;}}if(data110.enabled !== undefined){if(typeof data110.enabled !== "boolean"){const err214 = {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 = [err214];}else {vErrors.push(err214);}errors++;}}if(data110.baselinePath !== undefined){let data112 = data110.baselinePath;const _errs289 = errors;const _errs290 = errors;if(typeof data112 === "string"){if(!pattern0.test(data112)){const err215 = {};if(vErrors === null){vErrors = [err215];}else {vErrors.push(err215);}errors++;}}var valid76 = _errs290 === errors;if(valid76){const err216 = {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 = [err216];}else {vErrors.push(err216);}errors++;}else {errors = _errs289;if(vErrors !== null){if(_errs289){vErrors.length = _errs289;}else {vErrors = null;}}}if(typeof data112 === "string"){if(func2(data112) < 1){const err217 = {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 = [err217];}else {vErrors.push(err217);}errors++;}}else {const err218 = {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 = [err218];}else {vErrors.push(err218);}errors++;}}if(data110.tolerance !== undefined){let data113 = data110.tolerance;if(data113 && typeof data113 == "object" && !Array.isArray(data113)){if(data113.kind === undefined){const err219 = {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 = [err219];}else {vErrors.push(err219);}errors++;}if(data113.value === undefined){const err220 = {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 = [err220];}else {vErrors.push(err220);}errors++;}for(const key29 in data113){if(!((key29 === "kind") || (key29 === "value"))){const err221 = {instancePath:instancePath+"/delivery/quality/gates/lint/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key29},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err221];}else {vErrors.push(err221);}errors++;}}if(data113.kind !== undefined){let data114 = data113.kind;if(typeof data114 !== "string"){const err222 = {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 = [err222];}else {vErrors.push(err222);}errors++;}if(!((data114 === "absolute") || (data114 === "percent"))){const err223 = {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 = [err223];}else {vErrors.push(err223);}errors++;}}if(data113.value !== undefined){let data115 = data113.value;if((typeof data115 == "number") && (isFinite(data115))){if(data115 < 0 || isNaN(data115)){const err224 = {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 = [err224];}else {vErrors.push(err224);}errors++;}}else {const err225 = {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 = [err225];}else {vErrors.push(err225);}errors++;}}}else {const err226 = {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 = [err226];}else {vErrors.push(err226);}errors++;}}if(data110.floors !== undefined){let data116 = data110.floors;if(data116 && typeof data116 == "object" && !Array.isArray(data116)){for(const key30 in data116){let data117 = data116[key30];if(data117 && typeof data117 == "object" && !Array.isArray(data117)){for(const key31 in data117){let data118 = data117[key31];if(!((typeof data118 == "number") && (isFinite(data118)))){const err227 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key30.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key31.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 = [err227];}else {vErrors.push(err227);}errors++;}}}else {const err228 = {instancePath:instancePath+"/delivery/quality/gates/lint/floors/" + key30.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 = [err228];}else {vErrors.push(err228);}errors++;}}}else {const err229 = {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 = [err229];}else {vErrors.push(err229);}errors++;}}if(data110.components !== undefined){let data119 = data110.components;if(data119 && typeof data119 == "object" && !Array.isArray(data119)){for(const key32 in data119){let data120 = data119[key32];if(Array.isArray(data120)){const len15 = data120.length;for(let i17=0; i17<len15; i17++){let data121 = data120[i17];if(typeof data121 === "string"){if(func2(data121) < 1){const err230 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err230];}else {vErrors.push(err230);}errors++;}}else {const err231 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key32.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i17,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lint/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err231];}else {vErrors.push(err231);}errors++;}}}else {const err232 = {instancePath:instancePath+"/delivery/quality/gates/lint/components/" + key32.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 = [err232];}else {vErrors.push(err232);}errors++;}}}else {const err233 = {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 = [err233];}else {vErrors.push(err233);}errors++;}}}else {const err234 = {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 = [err234];}else {vErrors.push(err234);}errors++;}}if(data109.coverage !== undefined){let data122 = data109.coverage;if(data122 && typeof data122 == "object" && !Array.isArray(data122)){for(const key33 in data122){if(!(((((((key33 === "enabled") || (key33 === "baselinePath")) || (key33 === "tolerance")) || (key33 === "floors")) || (key33 === "components")) || (key33 === "coveragePath")) || (key33 === "timeoutMs"))){const err235 = {instancePath:instancePath+"/delivery/quality/gates/coverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key33},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err235];}else {vErrors.push(err235);}errors++;}}if(data122.enabled !== undefined){if(typeof data122.enabled !== "boolean"){const err236 = {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 = [err236];}else {vErrors.push(err236);}errors++;}}if(data122.baselinePath !== undefined){let data124 = data122.baselinePath;const _errs320 = errors;const _errs321 = errors;if(typeof data124 === "string"){if(!pattern0.test(data124)){const err237 = {};if(vErrors === null){vErrors = [err237];}else {vErrors.push(err237);}errors++;}}var valid84 = _errs321 === errors;if(valid84){const err238 = {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 = [err238];}else {vErrors.push(err238);}errors++;}else {errors = _errs320;if(vErrors !== null){if(_errs320){vErrors.length = _errs320;}else {vErrors = null;}}}if(typeof data124 === "string"){if(func2(data124) < 1){const err239 = {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 = [err239];}else {vErrors.push(err239);}errors++;}}else {const err240 = {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 = [err240];}else {vErrors.push(err240);}errors++;}}if(data122.tolerance !== undefined){let data125 = data122.tolerance;if(data125 && typeof data125 == "object" && !Array.isArray(data125)){if(data125.kind === undefined){const err241 = {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 = [err241];}else {vErrors.push(err241);}errors++;}if(data125.value === undefined){const err242 = {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 = [err242];}else {vErrors.push(err242);}errors++;}for(const key34 in data125){if(!((key34 === "kind") || (key34 === "value"))){const err243 = {instancePath:instancePath+"/delivery/quality/gates/coverage/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key34},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err243];}else {vErrors.push(err243);}errors++;}}if(data125.kind !== undefined){let data126 = data125.kind;if(typeof data126 !== "string"){const err244 = {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 = [err244];}else {vErrors.push(err244);}errors++;}if(!((data126 === "absolute") || (data126 === "percent"))){const err245 = {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 = [err245];}else {vErrors.push(err245);}errors++;}}if(data125.value !== undefined){let data127 = data125.value;if((typeof data127 == "number") && (isFinite(data127))){if(data127 < 0 || isNaN(data127)){const err246 = {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 = [err246];}else {vErrors.push(err246);}errors++;}}else {const err247 = {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 = [err247];}else {vErrors.push(err247);}errors++;}}}else {const err248 = {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 = [err248];}else {vErrors.push(err248);}errors++;}}if(data122.floors !== undefined){let data128 = data122.floors;if(data128 && typeof data128 == "object" && !Array.isArray(data128)){for(const key35 in data128){let data129 = data128[key35];if(data129 && typeof data129 == "object" && !Array.isArray(data129)){for(const key36 in data129){let data130 = data129[key36];if(!((typeof data130 == "number") && (isFinite(data130)))){const err249 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key35.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key36.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 = [err249];}else {vErrors.push(err249);}errors++;}}}else {const err250 = {instancePath:instancePath+"/delivery/quality/gates/coverage/floors/" + key35.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 = [err250];}else {vErrors.push(err250);}errors++;}}}else {const err251 = {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 = [err251];}else {vErrors.push(err251);}errors++;}}if(data122.components !== undefined){let data131 = data122.components;if(data131 && typeof data131 == "object" && !Array.isArray(data131)){for(const key37 in data131){let data132 = data131[key37];if(Array.isArray(data132)){const len16 = data132.length;for(let i18=0; i18<len16; i18++){let data133 = data132[i18];if(typeof data133 === "string"){if(func2(data133) < 1){const err252 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err252];}else {vErrors.push(err252);}errors++;}}else {const err253 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key37.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i18,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/coverage/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err253];}else {vErrors.push(err253);}errors++;}}}else {const err254 = {instancePath:instancePath+"/delivery/quality/gates/coverage/components/" + key37.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 = [err254];}else {vErrors.push(err254);}errors++;}}}else {const err255 = {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 = [err255];}else {vErrors.push(err255);}errors++;}}if(data122.coveragePath !== undefined){let data134 = data122.coveragePath;const _errs346 = errors;const _errs347 = errors;if(typeof data134 === "string"){if(!pattern0.test(data134)){const err256 = {};if(vErrors === null){vErrors = [err256];}else {vErrors.push(err256);}errors++;}}var valid91 = _errs347 === errors;if(valid91){const err257 = {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 = [err257];}else {vErrors.push(err257);}errors++;}else {errors = _errs346;if(vErrors !== null){if(_errs346){vErrors.length = _errs346;}else {vErrors = null;}}}if(typeof data134 === "string"){if(func2(data134) < 1){const err258 = {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 = [err258];}else {vErrors.push(err258);}errors++;}}else {const err259 = {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 = [err259];}else {vErrors.push(err259);}errors++;}}if(data122.timeoutMs !== undefined){let data135 = data122.timeoutMs;if(!(((typeof data135 == "number") && (!(data135 % 1) && !isNaN(data135))) && (isFinite(data135)))){const err260 = {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 = [err260];}else {vErrors.push(err260);}errors++;}if((typeof data135 == "number") && (isFinite(data135))){if(data135 < 1 || isNaN(data135)){const err261 = {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 = [err261];}else {vErrors.push(err261);}errors++;}}}}else {const err262 = {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 = [err262];}else {vErrors.push(err262);}errors++;}}if(data109.crap !== undefined){let data136 = data109.crap;if(data136 && typeof data136 == "object" && !Array.isArray(data136)){for(const key38 in data136){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.crap.properties, key38))){const err263 = {instancePath:instancePath+"/delivery/quality/gates/crap",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key38},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err263];}else {vErrors.push(err263);}errors++;}}if(data136.enabled !== undefined){if(typeof data136.enabled !== "boolean"){const err264 = {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 = [err264];}else {vErrors.push(err264);}errors++;}}if(data136.baselinePath !== undefined){let data138 = data136.baselinePath;const _errs357 = errors;const _errs358 = errors;if(typeof data138 === "string"){if(!pattern0.test(data138)){const err265 = {};if(vErrors === null){vErrors = [err265];}else {vErrors.push(err265);}errors++;}}var valid93 = _errs358 === errors;if(valid93){const err266 = {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 = [err266];}else {vErrors.push(err266);}errors++;}else {errors = _errs357;if(vErrors !== null){if(_errs357){vErrors.length = _errs357;}else {vErrors = null;}}}if(typeof data138 === "string"){if(func2(data138) < 1){const err267 = {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 = [err267];}else {vErrors.push(err267);}errors++;}}else {const err268 = {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 = [err268];}else {vErrors.push(err268);}errors++;}}if(data136.tolerance !== undefined){let data139 = data136.tolerance;if(data139 && typeof data139 == "object" && !Array.isArray(data139)){if(data139.kind === undefined){const err269 = {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 = [err269];}else {vErrors.push(err269);}errors++;}if(data139.value === undefined){const err270 = {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 = [err270];}else {vErrors.push(err270);}errors++;}for(const key39 in data139){if(!((key39 === "kind") || (key39 === "value"))){const err271 = {instancePath:instancePath+"/delivery/quality/gates/crap/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key39},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err271];}else {vErrors.push(err271);}errors++;}}if(data139.kind !== undefined){let data140 = data139.kind;if(typeof data140 !== "string"){const err272 = {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 = [err272];}else {vErrors.push(err272);}errors++;}if(!((data140 === "absolute") || (data140 === "percent"))){const err273 = {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 = [err273];}else {vErrors.push(err273);}errors++;}}if(data139.value !== undefined){let data141 = data139.value;if((typeof data141 == "number") && (isFinite(data141))){if(data141 < 0 || isNaN(data141)){const err274 = {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 = [err274];}else {vErrors.push(err274);}errors++;}}else {const err275 = {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 = [err275];}else {vErrors.push(err275);}errors++;}}}else {const err276 = {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 = [err276];}else {vErrors.push(err276);}errors++;}}if(data136.floors !== undefined){let data142 = data136.floors;if(data142 && typeof data142 == "object" && !Array.isArray(data142)){for(const key40 in data142){let data143 = data142[key40];if(data143 && typeof data143 == "object" && !Array.isArray(data143)){for(const key41 in data143){let data144 = data143[key41];if(!((typeof data144 == "number") && (isFinite(data144)))){const err277 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key40.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key41.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 = [err277];}else {vErrors.push(err277);}errors++;}}}else {const err278 = {instancePath:instancePath+"/delivery/quality/gates/crap/floors/" + key40.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 = [err278];}else {vErrors.push(err278);}errors++;}}}else {const err279 = {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 = [err279];}else {vErrors.push(err279);}errors++;}}if(data136.components !== undefined){let data145 = data136.components;if(data145 && typeof data145 == "object" && !Array.isArray(data145)){for(const key42 in data145){let data146 = data145[key42];if(Array.isArray(data146)){const len17 = data146.length;for(let i19=0; i19<len17; i19++){let data147 = data146[i19];if(typeof data147 === "string"){if(func2(data147) < 1){const err280 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key42.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err280];}else {vErrors.push(err280);}errors++;}}else {const err281 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key42.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i19,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err281];}else {vErrors.push(err281);}errors++;}}}else {const err282 = {instancePath:instancePath+"/delivery/quality/gates/crap/components/" + key42.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 = [err282];}else {vErrors.push(err282);}errors++;}}}else {const err283 = {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 = [err283];}else {vErrors.push(err283);}errors++;}}if(data136.targetDirs !== undefined){let data148 = data136.targetDirs;const _errs382 = errors;let valid100 = false;let passing2 = null;const _errs383 = errors;if(Array.isArray(data148)){const len18 = data148.length;for(let i20=0; i20<len18; i20++){if(typeof data148[i20] !== "string"){const err284 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/" + i20,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err284];}else {vErrors.push(err284);}errors++;}}}else {const err285 = {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 = [err285];}else {vErrors.push(err285);}errors++;}var _valid3 = _errs383 === errors;if(_valid3){valid100 = true;passing2 = 0;}const _errs387 = errors;if(data148 && typeof data148 == "object" && !Array.isArray(data148)){for(const key43 in data148){if(!((key43 === "append") || (key43 === "prepend"))){const err286 = {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: key43},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err286];}else {vErrors.push(err286);}errors++;}}if(data148.append !== undefined){let data150 = data148.append;if(Array.isArray(data150)){const len19 = data150.length;for(let i21=0; i21<len19; i21++){if(typeof data150[i21] !== "string"){const err287 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/append/" + i21,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err287];}else {vErrors.push(err287);}errors++;}}}else {const err288 = {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 = [err288];}else {vErrors.push(err288);}errors++;}}if(data148.prepend !== undefined){let data152 = data148.prepend;if(Array.isArray(data152)){const len20 = data152.length;for(let i22=0; i22<len20; i22++){if(typeof data152[i22] !== "string"){const err289 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs/prepend/" + i22,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err289];}else {vErrors.push(err289);}errors++;}}}else {const err290 = {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 = [err290];}else {vErrors.push(err290);}errors++;}}}else {const err291 = {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 = [err291];}else {vErrors.push(err291);}errors++;}var _valid3 = _errs387 === errors;if(_valid3 && valid100){valid100 = false;passing2 = [passing2, 1];}else {if(_valid3){valid100 = true;passing2 = 1;}}if(!valid100){const err292 = {instancePath:instancePath+"/delivery/quality/gates/crap/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing2},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err292];}else {vErrors.push(err292);}errors++;}else {errors = _errs382;if(vErrors !== null){if(_errs382){vErrors.length = _errs382;}else {vErrors = null;}}}}if(data136.newMethodCeiling !== undefined){let data154 = data136.newMethodCeiling;if(!(((typeof data154 == "number") && (!(data154 % 1) && !isNaN(data154))) && (isFinite(data154)))){const err293 = {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 = [err293];}else {vErrors.push(err293);}errors++;}if((typeof data154 == "number") && (isFinite(data154))){if(data154 < 1 || isNaN(data154)){const err294 = {instancePath:instancePath+"/delivery/quality/gates/crap/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 = [err294];}else {vErrors.push(err294);}errors++;}}}if(data136.requireCoverage !== undefined){if(typeof data136.requireCoverage !== "boolean"){const err295 = {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 = [err295];}else {vErrors.push(err295);}errors++;}}if(data136.minMethodResolutionRate !== undefined){let data156 = data136.minMethodResolutionRate;if((typeof data156 == "number") && (isFinite(data156))){if(data156 > 1 || isNaN(data156)){const err296 = {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 = [err296];}else {vErrors.push(err296);}errors++;}if(data156 < 0 || isNaN(data156)){const err297 = {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 = [err297];}else {vErrors.push(err297);}errors++;}}else {const err298 = {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 = [err298];}else {vErrors.push(err298);}errors++;}}if(data136.friction !== undefined){let data157 = data136.friction;if(data157 && typeof data157 == "object" && !Array.isArray(data157)){for(const key44 in data157){if(!(key44 === "markerKey")){const err299 = {instancePath:instancePath+"/delivery/quality/gates/crap/friction",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/friction/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key44},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err299];}else {vErrors.push(err299);}errors++;}}if(data157.markerKey !== undefined){let data158 = data157.markerKey;if(typeof data158 === "string"){if(func2(data158) < 1){const err300 = {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 = [err300];}else {vErrors.push(err300);}errors++;}}else {const err301 = {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 = [err301];}else {vErrors.push(err301);}errors++;}}}else {const err302 = {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 = [err302];}else {vErrors.push(err302);}errors++;}}if(data136.refreshTag !== undefined){let data159 = data136.refreshTag;const _errs411 = errors;const _errs412 = errors;if(typeof data159 === "string"){if(!pattern0.test(data159)){const err303 = {};if(vErrors === null){vErrors = [err303];}else {vErrors.push(err303);}errors++;}}var valid109 = _errs412 === errors;if(valid109){const err304 = {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 = [err304];}else {vErrors.push(err304);}errors++;}else {errors = _errs411;if(vErrors !== null){if(_errs411){vErrors.length = _errs411;}else {vErrors = null;}}}if(typeof data159 === "string"){if(func2(data159) < 1){const err305 = {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 = [err305];}else {vErrors.push(err305);}errors++;}}else {const err306 = {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 = [err306];}else {vErrors.push(err306);}errors++;}}if(data136.refreshTimeoutMs !== undefined){let data160 = data136.refreshTimeoutMs;if(!(((typeof data160 == "number") && (!(data160 % 1) && !isNaN(data160))) && (isFinite(data160)))){const err307 = {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 = [err307];}else {vErrors.push(err307);}errors++;}if((typeof data160 == "number") && (isFinite(data160))){if(data160 < 1 || isNaN(data160)){const err308 = {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 = [err308];}else {vErrors.push(err308);}errors++;}}}if(data136.ignoreGlobs !== undefined){let data161 = data136.ignoreGlobs;if(Array.isArray(data161)){const len21 = data161.length;for(let i23=0; i23<len21; i23++){let data162 = data161[i23];if(typeof data162 === "string"){if(func2(data162) < 1){const err309 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err309];}else {vErrors.push(err309);}errors++;}}else {const err310 = {instancePath:instancePath+"/delivery/quality/gates/crap/ignoreGlobs/" + i23,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err310];}else {vErrors.push(err310);}errors++;}}}else {const err311 = {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 = [err311];}else {vErrors.push(err311);}errors++;}}if(data136.incrementalCoverage !== undefined){let data163 = data136.incrementalCoverage;if(data163 && typeof data163 == "object" && !Array.isArray(data163)){for(const key45 in data163){if(!((((key45 === "skipWhenUnchanged") || (key45 === "baselineJoin")) || (key45 === "enabled")) || (key45 === "baseRef"))){const err312 = {instancePath:instancePath+"/delivery/quality/gates/crap/incrementalCoverage",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/crap/properties/incrementalCoverage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key45},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err312];}else {vErrors.push(err312);}errors++;}}if(data163.skipWhenUnchanged !== undefined){if(typeof data163.skipWhenUnchanged !== "boolean"){const err313 = {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 = [err313];}else {vErrors.push(err313);}errors++;}}if(data163.baselineJoin !== undefined){if(typeof data163.baselineJoin !== "boolean"){const err314 = {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 = [err314];}else {vErrors.push(err314);}errors++;}}if(data163.enabled !== undefined){if(typeof data163.enabled !== "boolean"){const err315 = {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 = [err315];}else {vErrors.push(err315);}errors++;}}if(data163.baseRef !== undefined){let data167 = data163.baseRef;if(typeof data167 === "string"){if(func2(data167) < 1){const err316 = {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 = [err316];}else {vErrors.push(err316);}errors++;}}else {const err317 = {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 = [err317];}else {vErrors.push(err317);}errors++;}}}else {const err318 = {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 = [err318];}else {vErrors.push(err318);}errors++;}}}else {const err319 = {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 = [err319];}else {vErrors.push(err319);}errors++;}}if(data109.maintainability !== undefined){let data168 = data109.maintainability;if(data168 && typeof data168 == "object" && !Array.isArray(data168)){for(const key46 in data168){if(!(func10.call(schema11.properties.delivery.properties.quality.properties.gates.properties.maintainability.properties, key46))){const err320 = {instancePath:instancePath+"/delivery/quality/gates/maintainability",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key46},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err320];}else {vErrors.push(err320);}errors++;}}if(data168.enabled !== undefined){if(typeof data168.enabled !== "boolean"){const err321 = {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 = [err321];}else {vErrors.push(err321);}errors++;}}if(data168.baselinePath !== undefined){let data170 = data168.baselinePath;const _errs437 = errors;const _errs438 = errors;if(typeof data170 === "string"){if(!pattern0.test(data170)){const err322 = {};if(vErrors === null){vErrors = [err322];}else {vErrors.push(err322);}errors++;}}var valid114 = _errs438 === errors;if(valid114){const err323 = {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 = [err323];}else {vErrors.push(err323);}errors++;}else {errors = _errs437;if(vErrors !== null){if(_errs437){vErrors.length = _errs437;}else {vErrors = null;}}}if(typeof data170 === "string"){if(func2(data170) < 1){const err324 = {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 = [err324];}else {vErrors.push(err324);}errors++;}}else {const err325 = {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 = [err325];}else {vErrors.push(err325);}errors++;}}if(data168.tolerance !== undefined){let data171 = data168.tolerance;if(data171 && typeof data171 == "object" && !Array.isArray(data171)){if(data171.kind === undefined){const err326 = {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 = [err326];}else {vErrors.push(err326);}errors++;}if(data171.value === undefined){const err327 = {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 = [err327];}else {vErrors.push(err327);}errors++;}for(const key47 in data171){if(!((key47 === "kind") || (key47 === "value"))){const err328 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key47},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err328];}else {vErrors.push(err328);}errors++;}}if(data171.kind !== undefined){let data172 = data171.kind;if(typeof data172 !== "string"){const err329 = {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 = [err329];}else {vErrors.push(err329);}errors++;}if(!((data172 === "absolute") || (data172 === "percent"))){const err330 = {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 = [err330];}else {vErrors.push(err330);}errors++;}}if(data171.value !== undefined){let data173 = data171.value;if((typeof data173 == "number") && (isFinite(data173))){if(data173 < 0 || isNaN(data173)){const err331 = {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 = [err331];}else {vErrors.push(err331);}errors++;}}else {const err332 = {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 = [err332];}else {vErrors.push(err332);}errors++;}}}else {const err333 = {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 = [err333];}else {vErrors.push(err333);}errors++;}}if(data168.floors !== undefined){let data174 = data168.floors;if(data174 && typeof data174 == "object" && !Array.isArray(data174)){for(const key48 in data174){let data175 = data174[key48];if(data175 && typeof data175 == "object" && !Array.isArray(data175)){for(const key49 in data175){let data176 = data175[key49];if(!((typeof data176 == "number") && (isFinite(data176)))){const err334 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key48.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key49.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 = [err334];}else {vErrors.push(err334);}errors++;}}}else {const err335 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/floors/" + key48.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 = [err335];}else {vErrors.push(err335);}errors++;}}}else {const err336 = {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 = [err336];}else {vErrors.push(err336);}errors++;}}if(data168.components !== undefined){let data177 = data168.components;if(data177 && typeof data177 == "object" && !Array.isArray(data177)){for(const key50 in data177){let data178 = data177[key50];if(Array.isArray(data178)){const len22 = data178.length;for(let i24=0; i24<len22; i24++){let data179 = data178[i24];if(typeof data179 === "string"){if(func2(data179) < 1){const err337 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key50.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err337];}else {vErrors.push(err337);}errors++;}}else {const err338 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key50.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i24,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err338];}else {vErrors.push(err338);}errors++;}}}else {const err339 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/components/" + key50.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 = [err339];}else {vErrors.push(err339);}errors++;}}}else {const err340 = {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 = [err340];}else {vErrors.push(err340);}errors++;}}if(data168.targetDirs !== undefined){let data180 = data168.targetDirs;const _errs462 = errors;let valid121 = false;let passing3 = null;const _errs463 = errors;if(Array.isArray(data180)){const len23 = data180.length;for(let i25=0; i25<len23; i25++){if(typeof data180[i25] !== "string"){const err341 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/" + i25,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err341];}else {vErrors.push(err341);}errors++;}}}else {const err342 = {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 = [err342];}else {vErrors.push(err342);}errors++;}var _valid4 = _errs463 === errors;if(_valid4){valid121 = true;passing3 = 0;}const _errs467 = errors;if(data180 && typeof data180 == "object" && !Array.isArray(data180)){for(const key51 in data180){if(!((key51 === "append") || (key51 === "prepend"))){const err343 = {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: key51},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err343];}else {vErrors.push(err343);}errors++;}}if(data180.append !== undefined){let data182 = data180.append;if(Array.isArray(data182)){const len24 = data182.length;for(let i26=0; i26<len24; i26++){if(typeof data182[i26] !== "string"){const err344 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/append/" + i26,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err344];}else {vErrors.push(err344);}errors++;}}}else {const err345 = {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 = [err345];}else {vErrors.push(err345);}errors++;}}if(data180.prepend !== undefined){let data184 = data180.prepend;if(Array.isArray(data184)){const len25 = data184.length;for(let i27=0; i27<len25; i27++){if(typeof data184[i27] !== "string"){const err346 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs/prepend/" + i27,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err346];}else {vErrors.push(err346);}errors++;}}}else {const err347 = {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 = [err347];}else {vErrors.push(err347);}errors++;}}}else {const err348 = {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 = [err348];}else {vErrors.push(err348);}errors++;}var _valid4 = _errs467 === errors;if(_valid4 && valid121){valid121 = false;passing3 = [passing3, 1];}else {if(_valid4){valid121 = true;passing3 = 1;}}if(!valid121){const err349 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing3},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err349];}else {vErrors.push(err349);}errors++;}else {errors = _errs462;if(vErrors !== null){if(_errs462){vErrors.length = _errs462;}else {vErrors = null;}}}}if(data168.refreshTag !== undefined){let data186 = data168.refreshTag;const _errs480 = errors;const _errs481 = errors;if(typeof data186 === "string"){if(!pattern0.test(data186)){const err350 = {};if(vErrors === null){vErrors = [err350];}else {vErrors.push(err350);}errors++;}}var valid129 = _errs481 === errors;if(valid129){const err351 = {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 = [err351];}else {vErrors.push(err351);}errors++;}else {errors = _errs480;if(vErrors !== null){if(_errs480){vErrors.length = _errs480;}else {vErrors = null;}}}if(typeof data186 === "string"){if(func2(data186) < 1){const err352 = {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 = [err352];}else {vErrors.push(err352);}errors++;}}else {const err353 = {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 = [err353];}else {vErrors.push(err353);}errors++;}}if(data168.refreshTimeoutMs !== undefined){let data187 = data168.refreshTimeoutMs;if(!(((typeof data187 == "number") && (!(data187 % 1) && !isNaN(data187))) && (isFinite(data187)))){const err354 = {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 = [err354];}else {vErrors.push(err354);}errors++;}if((typeof data187 == "number") && (isFinite(data187))){if(data187 < 1 || isNaN(data187)){const err355 = {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 = [err355];}else {vErrors.push(err355);}errors++;}}}if(data168.ignoreGlobs !== undefined){let data188 = data168.ignoreGlobs;if(Array.isArray(data188)){const len26 = data188.length;for(let i28=0; i28<len26; i28++){let data189 = data188[i28];if(typeof data189 === "string"){if(func2(data189) < 1){const err356 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err356];}else {vErrors.push(err356);}errors++;}}else {const err357 = {instancePath:instancePath+"/delivery/quality/gates/maintainability/ignoreGlobs/" + i28,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/maintainability/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err357];}else {vErrors.push(err357);}errors++;}}}else {const err358 = {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 = [err358];}else {vErrors.push(err358);}errors++;}}}else {const err359 = {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 = [err359];}else {vErrors.push(err359);}errors++;}}if(data109.mutation !== undefined){let data190 = data109.mutation;if(data190 && typeof data190 == "object" && !Array.isArray(data190)){for(const key52 in data190){if(!((((((key52 === "enabled") || (key52 === "baselinePath")) || (key52 === "tolerance")) || (key52 === "floors")) || (key52 === "components")) || (key52 === "strykerConfigPath"))){const err360 = {instancePath:instancePath+"/delivery/quality/gates/mutation",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key52},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err360];}else {vErrors.push(err360);}errors++;}}if(data190.enabled !== undefined){if(typeof data190.enabled !== "boolean"){const err361 = {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 = [err361];}else {vErrors.push(err361);}errors++;}}if(data190.baselinePath !== undefined){let data192 = data190.baselinePath;const _errs495 = errors;const _errs496 = errors;if(typeof data192 === "string"){if(!pattern0.test(data192)){const err362 = {};if(vErrors === null){vErrors = [err362];}else {vErrors.push(err362);}errors++;}}var valid133 = _errs496 === errors;if(valid133){const err363 = {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 = [err363];}else {vErrors.push(err363);}errors++;}else {errors = _errs495;if(vErrors !== null){if(_errs495){vErrors.length = _errs495;}else {vErrors = null;}}}if(typeof data192 === "string"){if(func2(data192) < 1){const err364 = {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 = [err364];}else {vErrors.push(err364);}errors++;}}else {const err365 = {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 = [err365];}else {vErrors.push(err365);}errors++;}}if(data190.tolerance !== undefined){let data193 = data190.tolerance;if(data193 && typeof data193 == "object" && !Array.isArray(data193)){if(data193.kind === undefined){const err366 = {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 = [err366];}else {vErrors.push(err366);}errors++;}if(data193.value === undefined){const err367 = {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 = [err367];}else {vErrors.push(err367);}errors++;}for(const key53 in data193){if(!((key53 === "kind") || (key53 === "value"))){const err368 = {instancePath:instancePath+"/delivery/quality/gates/mutation/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key53},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err368];}else {vErrors.push(err368);}errors++;}}if(data193.kind !== undefined){let data194 = data193.kind;if(typeof data194 !== "string"){const err369 = {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 = [err369];}else {vErrors.push(err369);}errors++;}if(!((data194 === "absolute") || (data194 === "percent"))){const err370 = {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 = [err370];}else {vErrors.push(err370);}errors++;}}if(data193.value !== undefined){let data195 = data193.value;if((typeof data195 == "number") && (isFinite(data195))){if(data195 < 0 || isNaN(data195)){const err371 = {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 = [err371];}else {vErrors.push(err371);}errors++;}}else {const err372 = {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 = [err372];}else {vErrors.push(err372);}errors++;}}}else {const err373 = {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 = [err373];}else {vErrors.push(err373);}errors++;}}if(data190.floors !== undefined){let data196 = data190.floors;if(data196 && typeof data196 == "object" && !Array.isArray(data196)){for(const key54 in data196){let data197 = data196[key54];if(data197 && typeof data197 == "object" && !Array.isArray(data197)){for(const key55 in data197){let data198 = data197[key55];if(!((typeof data198 == "number") && (isFinite(data198)))){const err374 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key54.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key55.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 = [err374];}else {vErrors.push(err374);}errors++;}}}else {const err375 = {instancePath:instancePath+"/delivery/quality/gates/mutation/floors/" + key54.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 = [err375];}else {vErrors.push(err375);}errors++;}}}else {const err376 = {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 = [err376];}else {vErrors.push(err376);}errors++;}}if(data190.components !== undefined){let data199 = data190.components;if(data199 && typeof data199 == "object" && !Array.isArray(data199)){for(const key56 in data199){let data200 = data199[key56];if(Array.isArray(data200)){const len27 = data200.length;for(let i29=0; i29<len27; i29++){let data201 = data200[i29];if(typeof data201 === "string"){if(func2(data201) < 1){const err377 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err377];}else {vErrors.push(err377);}errors++;}}else {const err378 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key56.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i29,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/mutation/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err378];}else {vErrors.push(err378);}errors++;}}}else {const err379 = {instancePath:instancePath+"/delivery/quality/gates/mutation/components/" + key56.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 = [err379];}else {vErrors.push(err379);}errors++;}}}else {const err380 = {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 = [err380];}else {vErrors.push(err380);}errors++;}}if(data190.strykerConfigPath !== undefined){let data202 = data190.strykerConfigPath;if((typeof data202 !== "string") && (data202 !== null)){const err381 = {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 = [err381];}else {vErrors.push(err381);}errors++;}const _errs521 = errors;const _errs522 = errors;if(errors === _errs522){if(typeof data202 === "string"){if(!pattern0.test(data202)){const err382 = {};if(vErrors === null){vErrors = [err382];}else {vErrors.push(err382);}errors++;}}else {const err383 = {};if(vErrors === null){vErrors = [err383];}else {vErrors.push(err383);}errors++;}}var valid140 = _errs522 === errors;if(valid140){const err384 = {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 = [err384];}else {vErrors.push(err384);}errors++;}else {errors = _errs521;if(vErrors !== null){if(_errs521){vErrors.length = _errs521;}else {vErrors = null;}}}if(typeof data202 === "string"){if(func2(data202) < 1){const err385 = {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 = [err385];}else {vErrors.push(err385);}errors++;}}}}else {const err386 = {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 = [err386];}else {vErrors.push(err386);}errors++;}}if(data109.lighthouse !== undefined){let data203 = data109.lighthouse;if(data203 && typeof data203 == "object" && !Array.isArray(data203)){for(const key57 in data203){if(!(((((((key57 === "enabled") || (key57 === "baselinePath")) || (key57 === "tolerance")) || (key57 === "floors")) || (key57 === "components")) || (key57 === "baseUrl")) || (key57 === "routes"))){const err387 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key57},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err387];}else {vErrors.push(err387);}errors++;}}if(data203.enabled !== undefined){if(typeof data203.enabled !== "boolean"){const err388 = {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 = [err388];}else {vErrors.push(err388);}errors++;}}if(data203.baselinePath !== undefined){let data205 = data203.baselinePath;const _errs531 = errors;const _errs532 = errors;if(typeof data205 === "string"){if(!pattern0.test(data205)){const err389 = {};if(vErrors === null){vErrors = [err389];}else {vErrors.push(err389);}errors++;}}var valid142 = _errs532 === errors;if(valid142){const err390 = {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 = [err390];}else {vErrors.push(err390);}errors++;}else {errors = _errs531;if(vErrors !== null){if(_errs531){vErrors.length = _errs531;}else {vErrors = null;}}}if(typeof data205 === "string"){if(func2(data205) < 1){const err391 = {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 = [err391];}else {vErrors.push(err391);}errors++;}}else {const err392 = {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 = [err392];}else {vErrors.push(err392);}errors++;}}if(data203.tolerance !== undefined){let data206 = data203.tolerance;if(data206 && typeof data206 == "object" && !Array.isArray(data206)){if(data206.kind === undefined){const err393 = {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 = [err393];}else {vErrors.push(err393);}errors++;}if(data206.value === undefined){const err394 = {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 = [err394];}else {vErrors.push(err394);}errors++;}for(const key58 in data206){if(!((key58 === "kind") || (key58 === "value"))){const err395 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key58},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err395];}else {vErrors.push(err395);}errors++;}}if(data206.kind !== undefined){let data207 = data206.kind;if(typeof data207 !== "string"){const err396 = {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 = [err396];}else {vErrors.push(err396);}errors++;}if(!((data207 === "absolute") || (data207 === "percent"))){const err397 = {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 = [err397];}else {vErrors.push(err397);}errors++;}}if(data206.value !== undefined){let data208 = data206.value;if((typeof data208 == "number") && (isFinite(data208))){if(data208 < 0 || isNaN(data208)){const err398 = {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 = [err398];}else {vErrors.push(err398);}errors++;}}else {const err399 = {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 = [err399];}else {vErrors.push(err399);}errors++;}}}else {const err400 = {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 = [err400];}else {vErrors.push(err400);}errors++;}}if(data203.floors !== undefined){let data209 = data203.floors;if(data209 && typeof data209 == "object" && !Array.isArray(data209)){for(const key59 in data209){let data210 = data209[key59];if(data210 && typeof data210 == "object" && !Array.isArray(data210)){for(const key60 in data210){let data211 = data210[key60];if(!((typeof data211 == "number") && (isFinite(data211)))){const err401 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key59.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key60.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 = [err401];}else {vErrors.push(err401);}errors++;}}}else {const err402 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/floors/" + key59.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 = [err402];}else {vErrors.push(err402);}errors++;}}}else {const err403 = {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 = [err403];}else {vErrors.push(err403);}errors++;}}if(data203.components !== undefined){let data212 = data203.components;if(data212 && typeof data212 == "object" && !Array.isArray(data212)){for(const key61 in data212){let data213 = data212[key61];if(Array.isArray(data213)){const len28 = data213.length;for(let i30=0; i30<len28; i30++){let data214 = data213[i30];if(typeof data214 === "string"){if(func2(data214) < 1){const err404 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key61.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err404];}else {vErrors.push(err404);}errors++;}}else {const err405 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key61.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i30,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err405];}else {vErrors.push(err405);}errors++;}}}else {const err406 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/components/" + key61.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 = [err406];}else {vErrors.push(err406);}errors++;}}}else {const err407 = {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 = [err407];}else {vErrors.push(err407);}errors++;}}if(data203.baseUrl !== undefined){let data215 = data203.baseUrl;if((typeof data215 !== "string") && (data215 !== null)){const err408 = {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 = [err408];}else {vErrors.push(err408);}errors++;}const _errs557 = errors;const _errs558 = errors;if(errors === _errs558){if(typeof data215 === "string"){if(!pattern0.test(data215)){const err409 = {};if(vErrors === null){vErrors = [err409];}else {vErrors.push(err409);}errors++;}}else {const err410 = {};if(vErrors === null){vErrors = [err410];}else {vErrors.push(err410);}errors++;}}var valid149 = _errs558 === errors;if(valid149){const err411 = {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 = [err411];}else {vErrors.push(err411);}errors++;}else {errors = _errs557;if(vErrors !== null){if(_errs557){vErrors.length = _errs557;}else {vErrors = null;}}}if(typeof data215 === "string"){if(func2(data215) < 1){const err412 = {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 = [err412];}else {vErrors.push(err412);}errors++;}}}if(data203.routes !== undefined){let data216 = data203.routes;if(Array.isArray(data216)){const len29 = data216.length;for(let i31=0; i31<len29; i31++){let data217 = data216[i31];if(data217 && typeof data217 == "object" && !Array.isArray(data217)){if(data217.path === undefined){const err413 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err413];}else {vErrors.push(err413);}errors++;}for(const key62 in data217){if(!((key62 === "path") || (key62 === "formFactor"))){const err414 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key62},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err414];}else {vErrors.push(err414);}errors++;}}if(data217.path !== undefined){let data218 = data217.path;if(typeof data218 === "string"){if(func2(data218) < 1){const err415 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err415];}else {vErrors.push(err415);}errors++;}}else {const err416 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err416];}else {vErrors.push(err416);}errors++;}}if(data217.formFactor !== undefined){let data219 = data217.formFactor;if(typeof data219 !== "string"){const err417 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err417];}else {vErrors.push(err417);}errors++;}if(!((data219 === "mobile") || (data219 === "desktop"))){const err418 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31+"/formFactor",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/properties/formFactor/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.quality.properties.gates.properties.lighthouse.properties.routes.items.properties.formFactor.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err418];}else {vErrors.push(err418);}errors++;}}}else {const err419 = {instancePath:instancePath+"/delivery/quality/gates/lighthouse/routes/" + i31,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/lighthouse/properties/routes/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err419];}else {vErrors.push(err419);}errors++;}}}else {const err420 = {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 = [err420];}else {vErrors.push(err420);}errors++;}}}else {const err421 = {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 = [err421];}else {vErrors.push(err421);}errors++;}}if(data109["bundle-size"] !== undefined){let data220 = data109["bundle-size"];if(data220 && typeof data220 == "object" && !Array.isArray(data220)){for(const key63 in data220){if(!((((((key63 === "enabled") || (key63 === "baselinePath")) || (key63 === "tolerance")) || (key63 === "floors")) || (key63 === "components")) || (key63 === "bundles"))){const err422 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key63},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err422];}else {vErrors.push(err422);}errors++;}}if(data220.enabled !== undefined){if(typeof data220.enabled !== "boolean"){const err423 = {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 = [err423];}else {vErrors.push(err423);}errors++;}}if(data220.baselinePath !== undefined){let data222 = data220.baselinePath;const _errs576 = errors;const _errs577 = errors;if(typeof data222 === "string"){if(!pattern0.test(data222)){const err424 = {};if(vErrors === null){vErrors = [err424];}else {vErrors.push(err424);}errors++;}}var valid154 = _errs577 === errors;if(valid154){const err425 = {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 = [err425];}else {vErrors.push(err425);}errors++;}else {errors = _errs576;if(vErrors !== null){if(_errs576){vErrors.length = _errs576;}else {vErrors = null;}}}if(typeof data222 === "string"){if(func2(data222) < 1){const err426 = {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 = [err426];}else {vErrors.push(err426);}errors++;}}else {const err427 = {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 = [err427];}else {vErrors.push(err427);}errors++;}}if(data220.tolerance !== undefined){let data223 = data220.tolerance;if(data223 && typeof data223 == "object" && !Array.isArray(data223)){if(data223.kind === undefined){const err428 = {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 = [err428];}else {vErrors.push(err428);}errors++;}if(data223.value === undefined){const err429 = {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 = [err429];}else {vErrors.push(err429);}errors++;}for(const key64 in data223){if(!((key64 === "kind") || (key64 === "value"))){const err430 = {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: key64},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err430];}else {vErrors.push(err430);}errors++;}}if(data223.kind !== undefined){let data224 = data223.kind;if(typeof data224 !== "string"){const err431 = {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 = [err431];}else {vErrors.push(err431);}errors++;}if(!((data224 === "absolute") || (data224 === "percent"))){const err432 = {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 = [err432];}else {vErrors.push(err432);}errors++;}}if(data223.value !== undefined){let data225 = data223.value;if((typeof data225 == "number") && (isFinite(data225))){if(data225 < 0 || isNaN(data225)){const err433 = {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 = [err433];}else {vErrors.push(err433);}errors++;}}else {const err434 = {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 = [err434];}else {vErrors.push(err434);}errors++;}}}else {const err435 = {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 = [err435];}else {vErrors.push(err435);}errors++;}}if(data220.floors !== undefined){let data226 = data220.floors;if(data226 && typeof data226 == "object" && !Array.isArray(data226)){for(const key65 in data226){let data227 = data226[key65];if(data227 && typeof data227 == "object" && !Array.isArray(data227)){for(const key66 in data227){let data228 = data227[key66];if(!((typeof data228 == "number") && (isFinite(data228)))){const err436 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key65.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key66.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 = [err436];}else {vErrors.push(err436);}errors++;}}}else {const err437 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/floors/" + key65.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 = [err437];}else {vErrors.push(err437);}errors++;}}}else {const err438 = {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 = [err438];}else {vErrors.push(err438);}errors++;}}if(data220.components !== undefined){let data229 = data220.components;if(data229 && typeof data229 == "object" && !Array.isArray(data229)){for(const key67 in data229){let data230 = data229[key67];if(Array.isArray(data230)){const len30 = data230.length;for(let i32=0; i32<len30; i32++){let data231 = data230[i32];if(typeof data231 === "string"){if(func2(data231) < 1){const err439 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key67.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err439];}else {vErrors.push(err439);}errors++;}}else {const err440 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key67.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i32,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err440];}else {vErrors.push(err440);}errors++;}}}else {const err441 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/components/" + key67.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 = [err441];}else {vErrors.push(err441);}errors++;}}}else {const err442 = {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 = [err442];}else {vErrors.push(err442);}errors++;}}if(data220.bundles !== undefined){let data232 = data220.bundles;if(Array.isArray(data232)){const len31 = data232.length;for(let i33=0; i33<len31; i33++){let data233 = data232[i33];if(data233 && typeof data233 == "object" && !Array.isArray(data233)){if(data233.name === undefined){const err443 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err443];}else {vErrors.push(err443);}errors++;}if(data233.path === undefined){const err444 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "path"},message:"must have required property '"+"path"+"'"};if(vErrors === null){vErrors = [err444];}else {vErrors.push(err444);}errors++;}if(data233.limit === undefined){const err445 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/required",keyword:"required",params:{missingProperty: "limit"},message:"must have required property '"+"limit"+"'"};if(vErrors === null){vErrors = [err445];}else {vErrors.push(err445);}errors++;}for(const key68 in data233){if(!(((key68 === "name") || (key68 === "path")) || (key68 === "limit"))){const err446 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key68},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err446];}else {vErrors.push(err446);}errors++;}}if(data233.name !== undefined){let data234 = data233.name;if(typeof data234 === "string"){if(func2(data234) < 1){const err447 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err447];}else {vErrors.push(err447);}errors++;}}else {const err448 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/name",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err448];}else {vErrors.push(err448);}errors++;}}if(data233.path !== undefined){let data235 = data233.path;if(typeof data235 === "string"){if(func2(data235) < 1){const err449 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err449];}else {vErrors.push(err449);}errors++;}}else {const err450 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/path",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/path/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err450];}else {vErrors.push(err450);}errors++;}}if(data233.limit !== undefined){let data236 = data233.limit;if(typeof data236 === "string"){if(func2(data236) < 1){const err451 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err451];}else {vErrors.push(err451);}errors++;}}else {const err452 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33+"/limit",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/properties/limit/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err452];}else {vErrors.push(err452);}errors++;}}}else {const err453 = {instancePath:instancePath+"/delivery/quality/gates/bundle-size/bundles/" + i33,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/bundle-size/properties/bundles/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err453];}else {vErrors.push(err453);}errors++;}}}else {const err454 = {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 = [err454];}else {vErrors.push(err454);}errors++;}}}else {const err455 = {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 = [err455];}else {vErrors.push(err455);}errors++;}}if(data109.duplication !== undefined){let data237 = data109.duplication;if(data237 && typeof data237 == "object" && !Array.isArray(data237)){for(const key69 in data237){if(!((((((((key69 === "enabled") || (key69 === "baselinePath")) || (key69 === "tolerance")) || (key69 === "floors")) || (key69 === "components")) || (key69 === "targetDirs")) || (key69 === "refreshTimeoutMs")) || (key69 === "ignoreGlobs"))){const err456 = {instancePath:instancePath+"/delivery/quality/gates/duplication",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key69},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err456];}else {vErrors.push(err456);}errors++;}}if(data237.enabled !== undefined){if(typeof data237.enabled !== "boolean"){const err457 = {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 = [err457];}else {vErrors.push(err457);}errors++;}}if(data237.baselinePath !== undefined){let data239 = data237.baselinePath;const _errs618 = errors;const _errs619 = errors;if(typeof data239 === "string"){if(!pattern0.test(data239)){const err458 = {};if(vErrors === null){vErrors = [err458];}else {vErrors.push(err458);}errors++;}}var valid165 = _errs619 === errors;if(valid165){const err459 = {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 = [err459];}else {vErrors.push(err459);}errors++;}else {errors = _errs618;if(vErrors !== null){if(_errs618){vErrors.length = _errs618;}else {vErrors = null;}}}if(typeof data239 === "string"){if(func2(data239) < 1){const err460 = {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 = [err460];}else {vErrors.push(err460);}errors++;}}else {const err461 = {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 = [err461];}else {vErrors.push(err461);}errors++;}}if(data237.tolerance !== undefined){let data240 = data237.tolerance;if(data240 && typeof data240 == "object" && !Array.isArray(data240)){if(data240.kind === undefined){const err462 = {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 = [err462];}else {vErrors.push(err462);}errors++;}if(data240.value === undefined){const err463 = {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 = [err463];}else {vErrors.push(err463);}errors++;}for(const key70 in data240){if(!((key70 === "kind") || (key70 === "value"))){const err464 = {instancePath:instancePath+"/delivery/quality/gates/duplication/tolerance",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/tolerance/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key70},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err464];}else {vErrors.push(err464);}errors++;}}if(data240.kind !== undefined){let data241 = data240.kind;if(typeof data241 !== "string"){const err465 = {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 = [err465];}else {vErrors.push(err465);}errors++;}if(!((data241 === "absolute") || (data241 === "percent"))){const err466 = {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 = [err466];}else {vErrors.push(err466);}errors++;}}if(data240.value !== undefined){let data242 = data240.value;if((typeof data242 == "number") && (isFinite(data242))){if(data242 < 0 || isNaN(data242)){const err467 = {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 = [err467];}else {vErrors.push(err467);}errors++;}}else {const err468 = {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 = [err468];}else {vErrors.push(err468);}errors++;}}}else {const err469 = {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 = [err469];}else {vErrors.push(err469);}errors++;}}if(data237.floors !== undefined){let data243 = data237.floors;if(data243 && typeof data243 == "object" && !Array.isArray(data243)){for(const key71 in data243){let data244 = data243[key71];if(data244 && typeof data244 == "object" && !Array.isArray(data244)){for(const key72 in data244){let data245 = data244[key72];if(!((typeof data245 == "number") && (isFinite(data245)))){const err470 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key71.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + key72.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 = [err470];}else {vErrors.push(err470);}errors++;}}}else {const err471 = {instancePath:instancePath+"/delivery/quality/gates/duplication/floors/" + key71.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 = [err471];}else {vErrors.push(err471);}errors++;}}}else {const err472 = {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 = [err472];}else {vErrors.push(err472);}errors++;}}if(data237.components !== undefined){let data246 = data237.components;if(data246 && typeof data246 == "object" && !Array.isArray(data246)){for(const key73 in data246){let data247 = data246[key73];if(Array.isArray(data247)){const len32 = data247.length;for(let i34=0; i34<len32; i34++){let data248 = data247[i34];if(typeof data248 === "string"){if(func2(data248) < 1){const err473 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key73.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err473];}else {vErrors.push(err473);}errors++;}}else {const err474 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key73.replace(/~/g, "~0").replace(/\//g, "~1")+"/" + i34,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/components/additionalProperties/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err474];}else {vErrors.push(err474);}errors++;}}}else {const err475 = {instancePath:instancePath+"/delivery/quality/gates/duplication/components/" + key73.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 = [err475];}else {vErrors.push(err475);}errors++;}}}else {const err476 = {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 = [err476];}else {vErrors.push(err476);}errors++;}}if(data237.targetDirs !== undefined){let data249 = data237.targetDirs;const _errs643 = errors;let valid172 = false;let passing4 = null;const _errs644 = errors;if(Array.isArray(data249)){const len33 = data249.length;for(let i35=0; i35<len33; i35++){if(typeof data249[i35] !== "string"){const err477 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/" + i35,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err477];}else {vErrors.push(err477);}errors++;}}}else {const err478 = {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 = [err478];}else {vErrors.push(err478);}errors++;}var _valid5 = _errs644 === errors;if(_valid5){valid172 = true;passing4 = 0;}const _errs648 = errors;if(data249 && typeof data249 == "object" && !Array.isArray(data249)){for(const key74 in data249){if(!((key74 === "append") || (key74 === "prepend"))){const err479 = {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: key74},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err479];}else {vErrors.push(err479);}errors++;}}if(data249.append !== undefined){let data251 = data249.append;if(Array.isArray(data251)){const len34 = data251.length;for(let i36=0; i36<len34; i36++){if(typeof data251[i36] !== "string"){const err480 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/append/" + i36,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/append/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err480];}else {vErrors.push(err480);}errors++;}}}else {const err481 = {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 = [err481];}else {vErrors.push(err481);}errors++;}}if(data249.prepend !== undefined){let data253 = data249.prepend;if(Array.isArray(data253)){const len35 = data253.length;for(let i37=0; i37<len35; i37++){if(typeof data253[i37] !== "string"){const err482 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs/prepend/" + i37,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf/1/properties/prepend/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err482];}else {vErrors.push(err482);}errors++;}}}else {const err483 = {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 = [err483];}else {vErrors.push(err483);}errors++;}}}else {const err484 = {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 = [err484];}else {vErrors.push(err484);}errors++;}var _valid5 = _errs648 === errors;if(_valid5 && valid172){valid172 = false;passing4 = [passing4, 1];}else {if(_valid5){valid172 = true;passing4 = 1;}}if(!valid172){const err485 = {instancePath:instancePath+"/delivery/quality/gates/duplication/targetDirs",schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/targetDirs/oneOf",keyword:"oneOf",params:{passingSchemas: passing4},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err485];}else {vErrors.push(err485);}errors++;}else {errors = _errs643;if(vErrors !== null){if(_errs643){vErrors.length = _errs643;}else {vErrors = null;}}}}if(data237.refreshTimeoutMs !== undefined){let data255 = data237.refreshTimeoutMs;if(!(((typeof data255 == "number") && (!(data255 % 1) && !isNaN(data255))) && (isFinite(data255)))){const err486 = {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 = [err486];}else {vErrors.push(err486);}errors++;}if((typeof data255 == "number") && (isFinite(data255))){if(data255 < 1 || isNaN(data255)){const err487 = {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 = [err487];}else {vErrors.push(err487);}errors++;}}}if(data237.ignoreGlobs !== undefined){let data256 = data237.ignoreGlobs;if(Array.isArray(data256)){const len36 = data256.length;for(let i38=0; i38<len36; i38++){let data257 = data256[i38];if(typeof data257 === "string"){if(func2(data257) < 1){const err488 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err488];}else {vErrors.push(err488);}errors++;}}else {const err489 = {instancePath:instancePath+"/delivery/quality/gates/duplication/ignoreGlobs/" + i38,schemaPath:"#/properties/delivery/properties/quality/properties/gates/properties/duplication/properties/ignoreGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err489];}else {vErrors.push(err489);}errors++;}}}else {const err490 = {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 = [err490];}else {vErrors.push(err490);}errors++;}}}else {const err491 = {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 = [err491];}else {vErrors.push(err491);}errors++;}}}else {const err492 = {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 = [err492];}else {vErrors.push(err492);}errors++;}}if(data105.formatAutofix !== undefined){let data258 = data105.formatAutofix;if(data258 && typeof data258 == "object" && !Array.isArray(data258)){for(const key75 in data258){if(!(key75 === "timeoutMs")){const err493 = {instancePath:instancePath+"/delivery/quality/formatAutofix",schemaPath:"#/properties/delivery/properties/quality/properties/formatAutofix/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key75},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err493];}else {vErrors.push(err493);}errors++;}}if(data258.timeoutMs !== undefined){let data259 = data258.timeoutMs;if(!(((typeof data259 == "number") && (!(data259 % 1) && !isNaN(data259))) && (isFinite(data259)))){const err494 = {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 = [err494];}else {vErrors.push(err494);}errors++;}if((typeof data259 == "number") && (isFinite(data259))){if(data259 < 1 || isNaN(data259)){const err495 = {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 = [err495];}else {vErrors.push(err495);}errors++;}}}}else {const err496 = {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 = [err496];}else {vErrors.push(err496);}errors++;}}if(data105.codingGuardrails !== undefined){let data260 = data105.codingGuardrails;if(data260 && typeof data260 == "object" && !Array.isArray(data260)){for(const key76 in data260){if(!(((key76 === "cyclomaticFlag") || (key76 === "cyclomaticMustFix")) || (key76 === "requireSiblingTest"))){const err497 = {instancePath:instancePath+"/delivery/quality/codingGuardrails",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key76},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err497];}else {vErrors.push(err497);}errors++;}}if(data260.cyclomaticFlag !== undefined){let data261 = data260.cyclomaticFlag;if(!(((typeof data261 == "number") && (!(data261 % 1) && !isNaN(data261))) && (isFinite(data261)))){const err498 = {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 = [err498];}else {vErrors.push(err498);}errors++;}if((typeof data261 == "number") && (isFinite(data261))){if(data261 < 1 || isNaN(data261)){const err499 = {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 = [err499];}else {vErrors.push(err499);}errors++;}}}if(data260.cyclomaticMustFix !== undefined){let data262 = data260.cyclomaticMustFix;if(!(((typeof data262 == "number") && (!(data262 % 1) && !isNaN(data262))) && (isFinite(data262)))){const err500 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err500];}else {vErrors.push(err500);}errors++;}if((typeof data262 == "number") && (isFinite(data262))){if(data262 < 1 || isNaN(data262)){const err501 = {instancePath:instancePath+"/delivery/quality/codingGuardrails/cyclomaticMustFix",schemaPath:"#/properties/delivery/properties/quality/properties/codingGuardrails/properties/cyclomaticMustFix/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err501];}else {vErrors.push(err501);}errors++;}}}if(data260.requireSiblingTest !== undefined){if(typeof data260.requireSiblingTest !== "boolean"){const err502 = {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 = [err502];}else {vErrors.push(err502);}errors++;}}}else {const err503 = {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 = [err503];}else {vErrors.push(err503);}errors++;}}if(data105.autoRefresh !== undefined){let data264 = data105.autoRefresh;if(data264 && typeof data264 == "object" && !Array.isArray(data264)){for(const key77 in data264){if(!(((key77 === "enabled") || (key77 === "crapJumpCap")) || (key77 === "scope"))){const err504 = {instancePath:instancePath+"/delivery/quality/autoRefresh",schemaPath:"#/properties/delivery/properties/quality/properties/autoRefresh/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key77},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err504];}else {vErrors.push(err504);}errors++;}}if(data264.enabled !== undefined){if(typeof data264.enabled !== "boolean"){const err505 = {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 = [err505];}else {vErrors.push(err505);}errors++;}}if(data264.crapJumpCap !== undefined){let data266 = data264.crapJumpCap;if((typeof data266 == "number") && (isFinite(data266))){if(data266 < 0 || isNaN(data266)){const err506 = {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 = [err506];}else {vErrors.push(err506);}errors++;}}else {const err507 = {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 = [err507];}else {vErrors.push(err507);}errors++;}}if(data264.scope !== undefined){let data267 = data264.scope;if(typeof data267 !== "string"){const err508 = {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 = [err508];}else {vErrors.push(err508);}errors++;}if(!((data267 === "diff") || (data267 === "full"))){const err509 = {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 = [err509];}else {vErrors.push(err509);}errors++;}}}else {const err510 = {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 = [err510];}else {vErrors.push(err510);}errors++;}}if(data105.baselineEpsilon !== undefined){let data268 = data105.baselineEpsilon;if(data268 && typeof data268 == "object" && !Array.isArray(data268)){for(const key78 in data268){if(!((((((((key78 === "maintainability") || (key78 === "crap")) || (key78 === "coverage")) || (key78 === "mutation")) || (key78 === "lint")) || (key78 === "lighthouse")) || (key78 === "bundle-size")) || (key78 === "duplication"))){const err511 = {instancePath:instancePath+"/delivery/quality/baselineEpsilon",schemaPath:"#/properties/delivery/properties/quality/properties/baselineEpsilon/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key78},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err511];}else {vErrors.push(err511);}errors++;}}if(data268.maintainability !== undefined){let data269 = data268.maintainability;if((typeof data269 == "number") && (isFinite(data269))){if(data269 < 0 || isNaN(data269)){const err512 = {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 = [err512];}else {vErrors.push(err512);}errors++;}}else {const err513 = {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 = [err513];}else {vErrors.push(err513);}errors++;}}if(data268.crap !== undefined){let data270 = data268.crap;if((typeof data270 == "number") && (isFinite(data270))){if(data270 < 0 || isNaN(data270)){const err514 = {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 = [err514];}else {vErrors.push(err514);}errors++;}}else {const err515 = {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 = [err515];}else {vErrors.push(err515);}errors++;}}if(data268.coverage !== undefined){let data271 = data268.coverage;if((typeof data271 == "number") && (isFinite(data271))){if(data271 < 0 || isNaN(data271)){const err516 = {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 = [err516];}else {vErrors.push(err516);}errors++;}}else {const err517 = {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 = [err517];}else {vErrors.push(err517);}errors++;}}if(data268.mutation !== undefined){let data272 = data268.mutation;if((typeof data272 == "number") && (isFinite(data272))){if(data272 < 0 || isNaN(data272)){const err518 = {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 = [err518];}else {vErrors.push(err518);}errors++;}}else {const err519 = {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 = [err519];}else {vErrors.push(err519);}errors++;}}if(data268.lint !== undefined){let data273 = data268.lint;if((typeof data273 == "number") && (isFinite(data273))){if(data273 < 0 || isNaN(data273)){const err520 = {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 = [err520];}else {vErrors.push(err520);}errors++;}}else {const err521 = {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 = [err521];}else {vErrors.push(err521);}errors++;}}if(data268.lighthouse !== undefined){let data274 = data268.lighthouse;if((typeof data274 == "number") && (isFinite(data274))){if(data274 < 0 || isNaN(data274)){const err522 = {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 = [err522];}else {vErrors.push(err522);}errors++;}}else {const err523 = {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 = [err523];}else {vErrors.push(err523);}errors++;}}if(data268["bundle-size"] !== undefined){let data275 = data268["bundle-size"];if((typeof data275 == "number") && (isFinite(data275))){if(data275 < 0 || isNaN(data275)){const err524 = {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 = [err524];}else {vErrors.push(err524);}errors++;}}else {const err525 = {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 = [err525];}else {vErrors.push(err525);}errors++;}}if(data268.duplication !== undefined){let data276 = data268.duplication;if((typeof data276 == "number") && (isFinite(data276))){if(data276 < 0 || isNaN(data276)){const err526 = {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 = [err526];}else {vErrors.push(err526);}errors++;}}else {const err527 = {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 = [err527];}else {vErrors.push(err527);}errors++;}}}else {const err528 = {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 = [err528];}else {vErrors.push(err528);}errors++;}}if(data105.requireBaselines !== undefined){if(typeof data105.requireBaselines !== "boolean"){const err529 = {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 = [err529];}else {vErrors.push(err529);}errors++;}}if(data105.navigability !== undefined){let data278 = data105.navigability;if(data278 && typeof data278 == "object" && !Array.isArray(data278)){for(const key79 in data278){if(!(((key79 === "routeGlobs") || (key79 === "navRegistry")) || (key79 === "journeySuite"))){const err530 = {instancePath:instancePath+"/delivery/quality/navigability",schemaPath:"#/properties/delivery/properties/quality/properties/navigability/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key79},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err530];}else {vErrors.push(err530);}errors++;}}if(data278.routeGlobs !== undefined){let data279 = data278.routeGlobs;if(Array.isArray(data279)){const len37 = data279.length;for(let i39=0; i39<len37; i39++){if(typeof data279[i39] !== "string"){const err531 = {instancePath:instancePath+"/delivery/quality/navigability/routeGlobs/" + i39,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/routeGlobs/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err531];}else {vErrors.push(err531);}errors++;}}}else {const err532 = {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 = [err532];}else {vErrors.push(err532);}errors++;}}if(data278.navRegistry !== undefined){let data281 = data278.navRegistry;if(Array.isArray(data281)){const len38 = data281.length;for(let i40=0; i40<len38; i40++){if(typeof data281[i40] !== "string"){const err533 = {instancePath:instancePath+"/delivery/quality/navigability/navRegistry/" + i40,schemaPath:"#/properties/delivery/properties/quality/properties/navigability/properties/navRegistry/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err533];}else {vErrors.push(err533);}errors++;}}}else {const err534 = {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 = [err534];}else {vErrors.push(err534);}errors++;}}if(data278.journeySuite !== undefined){if(typeof data278.journeySuite !== "string"){const err535 = {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 = [err535];}else {vErrors.push(err535);}errors++;}}}else {const err536 = {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 = [err536];}else {vErrors.push(err536);}errors++;}}}else {const err537 = {instancePath:instancePath+"/delivery/quality",schemaPath:"#/properties/delivery/properties/quality/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err537];}else {vErrors.push(err537);}errors++;}}if(data71.mergeWatch !== undefined){let data284 = data71.mergeWatch;if(data284 && typeof data284 == "object" && !Array.isArray(data284)){for(const key80 in data284){if(!(((((key80 === "mode") || (key80 === "intervalSeconds")) || (key80 === "maxWaitSeconds")) || (key80 === "maxBudgetSeconds")) || (key80 === "updateAttempts"))){const err538 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key80},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err538];}else {vErrors.push(err538);}errors++;}}if(data284.mode !== undefined){let data285 = data284.mode;if(typeof data285 !== "string"){const err539 = {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 = [err539];}else {vErrors.push(err539);}errors++;}if(!((data285 === "sync") || (data285 === "async"))){const err540 = {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 = [err540];}else {vErrors.push(err540);}errors++;}}if(data284.intervalSeconds !== undefined){let data286 = data284.intervalSeconds;if(!(((typeof data286 == "number") && (!(data286 % 1) && !isNaN(data286))) && (isFinite(data286)))){const err541 = {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 = [err541];}else {vErrors.push(err541);}errors++;}if((typeof data286 == "number") && (isFinite(data286))){if(data286 < 1 || isNaN(data286)){const err542 = {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 = [err542];}else {vErrors.push(err542);}errors++;}}}if(data284.maxWaitSeconds !== undefined){let data287 = data284.maxWaitSeconds;if(!(((typeof data287 == "number") && (!(data287 % 1) && !isNaN(data287))) && (isFinite(data287)))){const err543 = {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 = [err543];}else {vErrors.push(err543);}errors++;}if((typeof data287 == "number") && (isFinite(data287))){if(data287 < 1 || isNaN(data287)){const err544 = {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 = [err544];}else {vErrors.push(err544);}errors++;}}}if(data284.maxBudgetSeconds !== undefined){let data288 = data284.maxBudgetSeconds;if(!(((typeof data288 == "number") && (!(data288 % 1) && !isNaN(data288))) && (isFinite(data288)))){const err545 = {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 = [err545];}else {vErrors.push(err545);}errors++;}if((typeof data288 == "number") && (isFinite(data288))){if(data288 < 1 || isNaN(data288)){const err546 = {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 = [err546];}else {vErrors.push(err546);}errors++;}}}if(data284.updateAttempts !== undefined){let data289 = data284.updateAttempts;if(!(((typeof data289 == "number") && (!(data289 % 1) && !isNaN(data289))) && (isFinite(data289)))){const err547 = {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 = [err547];}else {vErrors.push(err547);}errors++;}if((typeof data289 == "number") && (isFinite(data289))){if(data289 < 0 || isNaN(data289)){const err548 = {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 = [err548];}else {vErrors.push(err548);}errors++;}}}}else {const err549 = {instancePath:instancePath+"/delivery/mergeWatch",schemaPath:"#/properties/delivery/properties/mergeWatch/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err549];}else {vErrors.push(err549);}errors++;}}if(data71.codeReview !== undefined){let data290 = data71.codeReview;if(data290 && typeof data290 == "object" && !Array.isArray(data290)){for(const key81 in data290){if(!(((((key81 === "providers") || (key81 === "providerConfig")) || (key81 === "maxFixAttempts")) || (key81 === "maxFixScopeFiles")) || (key81 === "autoFixSeverity"))){const err550 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key81},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err550];}else {vErrors.push(err550);}errors++;}}if(data290.providers !== undefined){let data291 = data290.providers;if(Array.isArray(data291)){const len39 = data291.length;for(let i41=0; i41<len39; i41++){let data292 = data291[i41];if(data292 && typeof data292 == "object" && !Array.isArray(data292)){if(data292.name === undefined){const err551 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/required",keyword:"required",params:{missingProperty: "name"},message:"must have required property '"+"name"+"'"};if(vErrors === null){vErrors = [err551];}else {vErrors.push(err551);}errors++;}for(const key82 in data292){if(!(((((key82 === "name") || (key82 === "scopes")) || (key82 === "optional")) || (key82 === "manualPrompt")) || (key82 === "when"))){const err552 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key82},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err552];}else {vErrors.push(err552);}errors++;}}if(data292.name !== undefined){let data293 = data292.name;if(typeof data293 !== "string"){const err553 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err553];}else {vErrors.push(err553);}errors++;}if(!((((data293 === "native") || (data293 === "codex")) || (data293 === "security-review")) || (data293 === "ultrareview"))){const err554 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/name",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/name/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.name.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err554];}else {vErrors.push(err554);}errors++;}}if(data292.scopes !== undefined){let data294 = data292.scopes;if(Array.isArray(data294)){const len40 = data294.length;for(let i42=0; i42<len40; i42++){let data295 = data294[i42];if(typeof data295 !== "string"){const err555 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err555];}else {vErrors.push(err555);}errors++;}if(!((data295 === "story") || (data295 === "epic"))){const err556 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes/" + i42,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/items/enum",keyword:"enum",params:{allowedValues: schema11.properties.delivery.properties.codeReview.properties.providers.items.properties.scopes.items.enum},message:"must be equal to one of the allowed values"};if(vErrors === null){vErrors = [err556];}else {vErrors.push(err556);}errors++;}}}else {const err557 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/scopes",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/scopes/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err557];}else {vErrors.push(err557);}errors++;}}if(data292.optional !== undefined){if(typeof data292.optional !== "boolean"){const err558 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/optional",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/optional/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err558];}else {vErrors.push(err558);}errors++;}}if(data292.manualPrompt !== undefined){if(typeof data292.manualPrompt !== "boolean"){const err559 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/manualPrompt",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/manualPrompt/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"};if(vErrors === null){vErrors = [err559];}else {vErrors.push(err559);}errors++;}}if(data292.when !== undefined){let data298 = data292.when;if(data298 && typeof data298 == "object" && !Array.isArray(data298)){for(const key83 in data298){if(!((key83 === "label") || (key83 === "labelAny"))){const err560 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key83},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err560];}else {vErrors.push(err560);}errors++;}}if(data298.label !== undefined){let data299 = data298.label;if(typeof data299 === "string"){if(func2(data299) < 1){const err561 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err561];}else {vErrors.push(err561);}errors++;}}else {const err562 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/label",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err562];}else {vErrors.push(err562);}errors++;}}if(data298.labelAny !== undefined){let data300 = data298.labelAny;if(Array.isArray(data300)){if(data300.length < 1){const err563 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items"};if(vErrors === null){vErrors = [err563];}else {vErrors.push(err563);}errors++;}const len41 = data300.length;for(let i43=0; i43<len41; i43++){let data301 = data300[i43];if(typeof data301 === "string"){if(func2(data301) < 1){const err564 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err564];}else {vErrors.push(err564);}errors++;}}else {const err565 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny/" + i43,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err565];}else {vErrors.push(err565);}errors++;}}}else {const err566 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when/labelAny",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/properties/labelAny/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err566];}else {vErrors.push(err566);}errors++;}}}else {const err567 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41+"/when",schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/properties/when/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err567];}else {vErrors.push(err567);}errors++;}}}else {const err568 = {instancePath:instancePath+"/delivery/codeReview/providers/" + i41,schemaPath:"#/properties/delivery/properties/codeReview/properties/providers/items/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err568];}else {vErrors.push(err568);}errors++;}}}else {const err569 = {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 = [err569];}else {vErrors.push(err569);}errors++;}}if(data290.providerConfig !== undefined){let data302 = data290.providerConfig;if(data302 && typeof data302 == "object" && !Array.isArray(data302)){}else {const err570 = {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 = [err570];}else {vErrors.push(err570);}errors++;}}if(data290.maxFixAttempts !== undefined){let data303 = data290.maxFixAttempts;if(!(((typeof data303 == "number") && (!(data303 % 1) && !isNaN(data303))) && (isFinite(data303)))){const err571 = {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 = [err571];}else {vErrors.push(err571);}errors++;}if((typeof data303 == "number") && (isFinite(data303))){if(data303 < 0 || isNaN(data303)){const err572 = {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 = [err572];}else {vErrors.push(err572);}errors++;}}}if(data290.maxFixScopeFiles !== undefined){let data304 = data290.maxFixScopeFiles;if(!(((typeof data304 == "number") && (!(data304 % 1) && !isNaN(data304))) && (isFinite(data304)))){const err573 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/type",keyword:"type",params:{type: "integer"},message:"must be integer"};if(vErrors === null){vErrors = [err573];}else {vErrors.push(err573);}errors++;}if((typeof data304 == "number") && (isFinite(data304))){if(data304 < 1 || isNaN(data304)){const err574 = {instancePath:instancePath+"/delivery/codeReview/maxFixScopeFiles",schemaPath:"#/properties/delivery/properties/codeReview/properties/maxFixScopeFiles/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err574];}else {vErrors.push(err574);}errors++;}}}if(data290.autoFixSeverity !== undefined){let data305 = data290.autoFixSeverity;if(typeof data305 !== "string"){const err575 = {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 = [err575];}else {vErrors.push(err575);}errors++;}if(!((data305 === "high") || (data305 === "medium"))){const err576 = {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 = [err576];}else {vErrors.push(err576);}errors++;}}}else {const err577 = {instancePath:instancePath+"/delivery/codeReview",schemaPath:"#/properties/delivery/properties/codeReview/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err577];}else {vErrors.push(err577);}errors++;}}if(data71.review !== undefined){let data306 = data71.review;if(data306 && typeof data306 == "object" && !Array.isArray(data306)){for(const key84 in data306){if(!(key84 === "lensDiffFloor")){const err578 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key84},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err578];}else {vErrors.push(err578);}errors++;}}if(data306.lensDiffFloor !== undefined){let data307 = data306.lensDiffFloor;if(!(((typeof data307 == "number") && (!(data307 % 1) && !isNaN(data307))) && (isFinite(data307)))){const err579 = {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 = [err579];}else {vErrors.push(err579);}errors++;}if((typeof data307 == "number") && (isFinite(data307))){if(data307 < 0 || isNaN(data307)){const err580 = {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 = [err580];}else {vErrors.push(err580);}errors++;}}}}else {const err581 = {instancePath:instancePath+"/delivery/review",schemaPath:"#/properties/delivery/properties/review/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err581];}else {vErrors.push(err581);}errors++;}}if(data71.refactorStage !== undefined){let data308 = data71.refactorStage;if(data308 && typeof data308 == "object" && !Array.isArray(data308)){for(const key85 in data308){if(!(key85 === "enabled")){const err582 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key85},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err582];}else {vErrors.push(err582);}errors++;}}if(data308.enabled !== undefined){if(typeof data308.enabled !== "boolean"){const err583 = {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 = [err583];}else {vErrors.push(err583);}errors++;}}}else {const err584 = {instancePath:instancePath+"/delivery/refactorStage",schemaPath:"#/properties/delivery/properties/refactorStage/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err584];}else {vErrors.push(err584);}errors++;}}if(data71.acceptanceEval !== undefined){let data310 = data71.acceptanceEval;if(data310 && typeof data310 == "object" && !Array.isArray(data310)){for(const key86 in data310){if(!(key86 === "maxRounds")){const err585 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key86},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err585];}else {vErrors.push(err585);}errors++;}}if(data310.maxRounds !== undefined){let data311 = data310.maxRounds;if(!(((typeof data311 == "number") && (!(data311 % 1) && !isNaN(data311))) && (isFinite(data311)))){const err586 = {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 = [err586];}else {vErrors.push(err586);}errors++;}if((typeof data311 == "number") && (isFinite(data311))){if(data311 < 1 || isNaN(data311)){const err587 = {instancePath:instancePath+"/delivery/acceptanceEval/maxRounds",schemaPath:"#/properties/delivery/properties/acceptanceEval/properties/maxRounds/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1"};if(vErrors === null){vErrors = [err587];}else {vErrors.push(err587);}errors++;}}}}else {const err588 = {instancePath:instancePath+"/delivery/acceptanceEval",schemaPath:"#/properties/delivery/properties/acceptanceEval/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err588];}else {vErrors.push(err588);}errors++;}}if(data71.feedbackLoop !== undefined){let data312 = data71.feedbackLoop;if(data312 && typeof data312 == "object" && !Array.isArray(data312)){for(const key87 in data312){if(!(((key87 === "auditResultsAutoFile") || (key87 === "retroProposals")) || (key87 === "frictionWindowDays"))){const err589 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key87},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err589];}else {vErrors.push(err589);}errors++;}}if(data312.auditResultsAutoFile !== undefined){if(typeof data312.auditResultsAutoFile !== "boolean"){const err590 = {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 = [err590];}else {vErrors.push(err590);}errors++;}}if(data312.retroProposals !== undefined){if(typeof data312.retroProposals !== "boolean"){const err591 = {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 = [err591];}else {vErrors.push(err591);}errors++;}}if(data312.frictionWindowDays !== undefined){let data315 = data312.frictionWindowDays;if(!(((typeof data315 == "number") && (!(data315 % 1) && !isNaN(data315))) && (isFinite(data315)))){const err592 = {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 = [err592];}else {vErrors.push(err592);}errors++;}if((typeof data315 == "number") && (isFinite(data315))){if(data315 < 1 || isNaN(data315)){const err593 = {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 = [err593];}else {vErrors.push(err593);}errors++;}}}}else {const err594 = {instancePath:instancePath+"/delivery/feedbackLoop",schemaPath:"#/properties/delivery/properties/feedbackLoop/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err594];}else {vErrors.push(err594);}errors++;}}if(data71.auditToStories !== undefined){let data316 = data71.auditToStories;if(data316 && typeof data316 == "object" && !Array.isArray(data316)){for(const key88 in data316){if(!((key88 === "severityFloor") || (key88 === "autoComment"))){const err595 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key88},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err595];}else {vErrors.push(err595);}errors++;}}if(data316.severityFloor !== undefined){let data317 = data316.severityFloor;if(typeof data317 !== "string"){const err596 = {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 = [err596];}else {vErrors.push(err596);}errors++;}if(!(((((data317 === "critical") || (data317 === "high")) || (data317 === "medium")) || (data317 === "low")) || (data317 === "all"))){const err597 = {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 = [err597];}else {vErrors.push(err597);}errors++;}}if(data316.autoComment !== undefined){if(typeof data316.autoComment !== "boolean"){const err598 = {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 = [err598];}else {vErrors.push(err598);}errors++;}}}else {const err599 = {instancePath:instancePath+"/delivery/auditToStories",schemaPath:"#/properties/delivery/properties/auditToStories/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err599];}else {vErrors.push(err599);}errors++;}}if(data71.ci !== undefined){let data319 = data71.ci;if(data319 && typeof data319 == "object" && !Array.isArray(data319)){for(const key89 in data319){if(!(((((key89 === "watch") || (key89 === "autoMerge")) || (key89 === "blockOnAdvisoryFailure")) || (key89 === "advisoryAllowlist")) || (key89 === "rerunAdvisory"))){const err600 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key89},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err600];}else {vErrors.push(err600);}errors++;}}if(data319.watch !== undefined){let data320 = data319.watch;if(data320 && typeof data320 == "object" && !Array.isArray(data320)){for(const key90 in data320){if(!((((key90 === "pollIntervalMs") || (key90 === "maxPolls")) || (key90 === "maxResumes")) || (key90 === "attachWindowMs"))){const err601 = {instancePath:instancePath+"/delivery/ci/watch",schemaPath:"#/properties/delivery/properties/ci/properties/watch/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key90},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err601];}else {vErrors.push(err601);}errors++;}}if(data320.pollIntervalMs !== undefined){let data321 = data320.pollIntervalMs;if(!(((typeof data321 == "number") && (!(data321 % 1) && !isNaN(data321))) && (isFinite(data321)))){const err602 = {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 = [err602];}else {vErrors.push(err602);}errors++;}if((typeof data321 == "number") && (isFinite(data321))){if(data321 < 1 || isNaN(data321)){const err603 = {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 = [err603];}else {vErrors.push(err603);}errors++;}}}if(data320.maxPolls !== undefined){let data322 = data320.maxPolls;if(!(((typeof data322 == "number") && (!(data322 % 1) && !isNaN(data322))) && (isFinite(data322)))){const err604 = {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 = [err604];}else {vErrors.push(err604);}errors++;}if((typeof data322 == "number") && (isFinite(data322))){if(data322 < 1 || isNaN(data322)){const err605 = {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 = [err605];}else {vErrors.push(err605);}errors++;}}}if(data320.maxResumes !== undefined){let data323 = data320.maxResumes;if(!(((typeof data323 == "number") && (!(data323 % 1) && !isNaN(data323))) && (isFinite(data323)))){const err606 = {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 = [err606];}else {vErrors.push(err606);}errors++;}if((typeof data323 == "number") && (isFinite(data323))){if(data323 < 0 || isNaN(data323)){const err607 = {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 = [err607];}else {vErrors.push(err607);}errors++;}}}if(data320.attachWindowMs !== undefined){let data324 = data320.attachWindowMs;if(!(((typeof data324 == "number") && (!(data324 % 1) && !isNaN(data324))) && (isFinite(data324)))){const err608 = {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 = [err608];}else {vErrors.push(err608);}errors++;}if((typeof data324 == "number") && (isFinite(data324))){if(data324 < 1 || isNaN(data324)){const err609 = {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 = [err609];}else {vErrors.push(err609);}errors++;}}}}else {const err610 = {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 = [err610];}else {vErrors.push(err610);}errors++;}}if(data319.autoMerge !== undefined){let data325 = data319.autoMerge;if(typeof data325 !== "string"){const err611 = {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 = [err611];}else {vErrors.push(err611);}errors++;}if(!((data325 === "trust-ci") || (data325 === "strict"))){const err612 = {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 = [err612];}else {vErrors.push(err612);}errors++;}}if(data319.blockOnAdvisoryFailure !== undefined){if(typeof data319.blockOnAdvisoryFailure !== "boolean"){const err613 = {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 = [err613];}else {vErrors.push(err613);}errors++;}}if(data319.advisoryAllowlist !== undefined){let data327 = data319.advisoryAllowlist;if(Array.isArray(data327)){const len42 = data327.length;for(let i44=0; i44<len42; i44++){if(typeof data327[i44] !== "string"){const err614 = {instancePath:instancePath+"/delivery/ci/advisoryAllowlist/" + i44,schemaPath:"#/properties/delivery/properties/ci/properties/advisoryAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err614];}else {vErrors.push(err614);}errors++;}}}else {const err615 = {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 = [err615];}else {vErrors.push(err615);}errors++;}}if(data319.rerunAdvisory !== undefined){let data329 = data319.rerunAdvisory;if(!(((typeof data329 == "number") && (!(data329 % 1) && !isNaN(data329))) && (isFinite(data329)))){const err616 = {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 = [err616];}else {vErrors.push(err616);}errors++;}if((typeof data329 == "number") && (isFinite(data329))){if(data329 < 0 || isNaN(data329)){const err617 = {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 = [err617];}else {vErrors.push(err617);}errors++;}}}}else {const err618 = {instancePath:instancePath+"/delivery/ci",schemaPath:"#/properties/delivery/properties/ci/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err618];}else {vErrors.push(err618);}errors++;}}if(data71.routing !== undefined){let data330 = data71.routing;if(data330 && typeof data330 == "object" && !Array.isArray(data330)){for(const key91 in data330){if(!((((key91 === "roleScopedAgents") || (key91 === "freshCriticSampleRate")) || (key91 === "ceremonyProfile")) || (key91 === "closeAndLand"))){const err619 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key91},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err619];}else {vErrors.push(err619);}errors++;}}if(data330.roleScopedAgents !== undefined){if(typeof data330.roleScopedAgents !== "boolean"){const err620 = {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 = [err620];}else {vErrors.push(err620);}errors++;}}if(data330.freshCriticSampleRate !== undefined){let data332 = data330.freshCriticSampleRate;if((typeof data332 == "number") && (isFinite(data332))){if(data332 > 1 || isNaN(data332)){const err621 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1"};if(vErrors === null){vErrors = [err621];}else {vErrors.push(err621);}errors++;}if(data332 < 0 || isNaN(data332)){const err622 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0"};if(vErrors === null){vErrors = [err622];}else {vErrors.push(err622);}errors++;}}else {const err623 = {instancePath:instancePath+"/delivery/routing/freshCriticSampleRate",schemaPath:"#/properties/delivery/properties/routing/properties/freshCriticSampleRate/type",keyword:"type",params:{type: "number"},message:"must be number"};if(vErrors === null){vErrors = [err623];}else {vErrors.push(err623);}errors++;}}if(data330.ceremonyProfile !== undefined){let data333 = data330.ceremonyProfile;if(typeof data333 !== "string"){const err624 = {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 = [err624];}else {vErrors.push(err624);}errors++;}if(!(((data333 === "minimal") || (data333 === "standard")) || (data333 === "strict"))){const err625 = {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 = [err625];}else {vErrors.push(err625);}errors++;}}if(data330.closeAndLand !== undefined){if(typeof data330.closeAndLand !== "boolean"){const err626 = {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 = [err626];}else {vErrors.push(err626);}errors++;}}}else {const err627 = {instancePath:instancePath+"/delivery/routing",schemaPath:"#/properties/delivery/properties/routing/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err627];}else {vErrors.push(err627);}errors++;}}}else {const err628 = {instancePath:instancePath+"/delivery",schemaPath:"#/properties/delivery/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err628];}else {vErrors.push(err628);}errors++;}}if(data.qa !== undefined){let data335 = data.qa;if(data335 && typeof data335 == "object" && !Array.isArray(data335)){for(const key92 in data335){if(!(((((((key92 === "featureRoot") || (key92 === "fixturesManifest")) || (key92 === "environments")) || (key92 === "personas")) || (key92 === "gherkinLint")) || (key92 === "consoleAllowlist")) || (key92 === "designTokens"))){const err629 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key92},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err629];}else {vErrors.push(err629);}errors++;}}if(data335.featureRoot !== undefined){let data336 = data335.featureRoot;const _errs842 = errors;const _errs843 = errors;if(typeof data336 === "string"){if(!pattern0.test(data336)){const err630 = {};if(vErrors === null){vErrors = [err630];}else {vErrors.push(err630);}errors++;}}var valid212 = _errs843 === errors;if(valid212){const err631 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err631];}else {vErrors.push(err631);}errors++;}else {errors = _errs842;if(vErrors !== null){if(_errs842){vErrors.length = _errs842;}else {vErrors = null;}}}if(typeof data336 === "string"){if(func2(data336) < 1){const err632 = {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 = [err632];}else {vErrors.push(err632);}errors++;}}else {const err633 = {instancePath:instancePath+"/qa/featureRoot",schemaPath:"#/properties/qa/properties/featureRoot/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err633];}else {vErrors.push(err633);}errors++;}}if(data335.fixturesManifest !== undefined){let data337 = data335.fixturesManifest;const _errs846 = errors;const _errs847 = errors;if(typeof data337 === "string"){if(!pattern0.test(data337)){const err634 = {};if(vErrors === null){vErrors = [err634];}else {vErrors.push(err634);}errors++;}}var valid213 = _errs847 === errors;if(valid213){const err635 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err635];}else {vErrors.push(err635);}errors++;}else {errors = _errs846;if(vErrors !== null){if(_errs846){vErrors.length = _errs846;}else {vErrors = null;}}}if(typeof data337 === "string"){if(func2(data337) < 1){const err636 = {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 = [err636];}else {vErrors.push(err636);}errors++;}}else {const err637 = {instancePath:instancePath+"/qa/fixturesManifest",schemaPath:"#/properties/qa/properties/fixturesManifest/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err637];}else {vErrors.push(err637);}errors++;}}if(data335.environments !== undefined){let data338 = data335.environments;if(data338 && typeof data338 == "object" && !Array.isArray(data338)){if(Object.keys(data338).length < 1){const err638 = {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 = [err638];}else {vErrors.push(err638);}errors++;}for(const key93 in data338){let data339 = data338[key93];if(data339 && typeof data339 == "object" && !Array.isArray(data339)){if(data339.baseUrl === undefined){const err639 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err639];}else {vErrors.push(err639);}errors++;}for(const key94 in data339){if(!(((key94 === "baseUrl") || (key94 === "signInSeam")) || (key94 === "allowWrites"))){const err640 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/environments/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key94},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err640];}else {vErrors.push(err640);}errors++;}}if(data339.baseUrl !== undefined){let data340 = data339.baseUrl;const _errs856 = errors;const _errs857 = errors;if(typeof data340 === "string"){if(!pattern0.test(data340)){const err641 = {};if(vErrors === null){vErrors = [err641];}else {vErrors.push(err641);}errors++;}}var valid216 = _errs857 === errors;if(valid216){const err642 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err642];}else {vErrors.push(err642);}errors++;}else {errors = _errs856;if(vErrors !== null){if(_errs856){vErrors.length = _errs856;}else {vErrors = null;}}}if(typeof data340 === "string"){if(func2(data340) < 1){const err643 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err643];}else {vErrors.push(err643);}errors++;}}else {const err644 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err644];}else {vErrors.push(err644);}errors++;}}if(data339.signInSeam !== undefined){let data341 = data339.signInSeam;const _errs859 = errors;let valid217 = false;let passing5 = null;const _errs860 = errors;if(data341 && typeof data341 == "object" && !Array.isArray(data341)){if(data341.urlTemplate === undefined){const err645 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err645];}else {vErrors.push(err645);}errors++;}for(const key95 in data341){if(!(key95 === "urlTemplate")){const err646 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key95},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err646];}else {vErrors.push(err646);}errors++;}}if(data341.urlTemplate !== undefined){let data342 = data341.urlTemplate;const _errs865 = errors;const _errs866 = errors;if(typeof data342 === "string"){if(!pattern0.test(data342)){const err647 = {};if(vErrors === null){vErrors = [err647];}else {vErrors.push(err647);}errors++;}}var valid219 = _errs866 === errors;if(valid219){const err648 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err648];}else {vErrors.push(err648);}errors++;}else {errors = _errs865;if(vErrors !== null){if(_errs865){vErrors.length = _errs865;}else {vErrors = null;}}}if(typeof data342 === "string"){if(func2(data342) < 1){const err649 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err649];}else {vErrors.push(err649);}errors++;}}else {const err650 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err650];}else {vErrors.push(err650);}errors++;}}}else {const err651 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err651];}else {vErrors.push(err651);}errors++;}var _valid6 = _errs860 === errors;if(_valid6){valid217 = true;passing5 = 0;}const _errs867 = errors;if(data341 && typeof data341 == "object" && !Array.isArray(data341)){if(data341.skill === undefined){const err652 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err652];}else {vErrors.push(err652);}errors++;}for(const key96 in data341){if(!(key96 === "skill")){const err653 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key96},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err653];}else {vErrors.push(err653);}errors++;}}if(data341.skill !== undefined){let data343 = data341.skill;const _errs872 = errors;const _errs873 = errors;if(typeof data343 === "string"){if(!pattern0.test(data343)){const err654 = {};if(vErrors === null){vErrors = [err654];}else {vErrors.push(err654);}errors++;}}var valid221 = _errs873 === errors;if(valid221){const err655 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err655];}else {vErrors.push(err655);}errors++;}else {errors = _errs872;if(vErrors !== null){if(_errs872){vErrors.length = _errs872;}else {vErrors = null;}}}if(typeof data343 === "string"){if(func2(data343) < 1){const err656 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err656];}else {vErrors.push(err656);}errors++;}if(!pattern29.test(data343)){const err657 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err657];}else {vErrors.push(err657);}errors++;}}else {const err658 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err658];}else {vErrors.push(err658);}errors++;}}}else {const err659 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err659];}else {vErrors.push(err659);}errors++;}var _valid6 = _errs867 === errors;if(_valid6 && valid217){valid217 = false;passing5 = [passing5, 1];}else {if(_valid6){valid217 = true;passing5 = 1;}}if(!valid217){const err660 = {instancePath:instancePath+"/qa/environments/" + key93.replace(/~/g, "~0").replace(/\//g, "~1")+"/signInSeam",schemaPath:"#/properties/qa/properties/environments/additionalProperties/properties/signInSeam/oneOf",keyword:"oneOf",params:{passingSchemas: passing5},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err660];}else {vErrors.push(err660);}errors++;}else {errors = _errs859;if(vErrors !== null){if(_errs859){vErrors.length = _errs859;}else {vErrors = null;}}}}if(data339.allowWrites !== undefined){if(typeof data339.allowWrites !== "boolean"){const err661 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err661];}else {vErrors.push(err661);}errors++;}}}else {const err662 = {instancePath:instancePath+"/qa/environments/" + key93.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 = [err662];}else {vErrors.push(err662);}errors++;}}}else {const err663 = {instancePath:instancePath+"/qa/environments",schemaPath:"#/properties/qa/properties/environments/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err663];}else {vErrors.push(err663);}errors++;}}if(data335.personas !== undefined){let data345 = data335.personas;const _errs877 = errors;let valid222 = false;let passing6 = null;const _errs878 = errors;if(Array.isArray(data345)){if(data345.length < 1){const err664 = {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 = [err664];}else {vErrors.push(err664);}errors++;}const len43 = data345.length;for(let i45=0; i45<len43; i45++){let data346 = data345[i45];const _errs882 = errors;const _errs883 = errors;if(typeof data346 === "string"){if(!pattern0.test(data346)){const err665 = {};if(vErrors === null){vErrors = [err665];}else {vErrors.push(err665);}errors++;}}var valid225 = _errs883 === errors;if(valid225){const err666 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err666];}else {vErrors.push(err666);}errors++;}else {errors = _errs882;if(vErrors !== null){if(_errs882){vErrors.length = _errs882;}else {vErrors = null;}}}if(typeof data346 === "string"){if(func2(data346) < 1){const err667 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err667];}else {vErrors.push(err667);}errors++;}}else {const err668 = {instancePath:instancePath+"/qa/personas/" + i45,schemaPath:"#/properties/qa/properties/personas/oneOf/0/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err668];}else {vErrors.push(err668);}errors++;}}}else {const err669 = {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 = [err669];}else {vErrors.push(err669);}errors++;}var _valid7 = _errs878 === errors;if(_valid7){valid222 = true;passing6 = 0;}const _errs884 = errors;if(data345 && typeof data345 == "object" && !Array.isArray(data345)){if(Object.keys(data345).length < 1){const err670 = {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 = [err670];}else {vErrors.push(err670);}errors++;}for(const key97 in data345){let data347 = data345[key97];const _errs888 = errors;let valid227 = false;let passing7 = null;const _errs889 = errors;if(data347 && typeof data347 == "object" && !Array.isArray(data347)){if(data347.credentialRef === undefined){const err671 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err671];}else {vErrors.push(err671);}errors++;}for(const key98 in data347){if(!(key98 === "credentialRef")){const err672 = {instancePath:instancePath+"/qa/personas/" + key97.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/0/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key98},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err672];}else {vErrors.push(err672);}errors++;}}if(data347.credentialRef !== undefined){let data348 = data347.credentialRef;const _errs894 = errors;const _errs895 = errors;if(typeof data348 === "string"){if(!pattern0.test(data348)){const err673 = {};if(vErrors === null){vErrors = [err673];}else {vErrors.push(err673);}errors++;}}var valid229 = _errs895 === errors;if(valid229){const err674 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err674];}else {vErrors.push(err674);}errors++;}else {errors = _errs894;if(vErrors !== null){if(_errs894){vErrors.length = _errs894;}else {vErrors = null;}}}if(typeof data348 === "string"){if(func2(data348) < 1){const err675 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err675];}else {vErrors.push(err675);}errors++;}}else {const err676 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err676];}else {vErrors.push(err676);}errors++;}}}else {const err677 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err677];}else {vErrors.push(err677);}errors++;}var _valid8 = _errs889 === errors;if(_valid8){valid227 = true;passing7 = 0;}const _errs896 = errors;if(data347 && typeof data347 == "object" && !Array.isArray(data347)){if(data347.signInSkill === undefined){const err678 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err678];}else {vErrors.push(err678);}errors++;}for(const key99 in data347){if(!(key99 === "signInSkill")){const err679 = {instancePath:instancePath+"/qa/personas/" + key97.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf/1/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key99},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err679];}else {vErrors.push(err679);}errors++;}}if(data347.signInSkill !== undefined){let data349 = data347.signInSkill;const _errs901 = errors;const _errs902 = errors;if(typeof data349 === "string"){if(!pattern0.test(data349)){const err680 = {};if(vErrors === null){vErrors = [err680];}else {vErrors.push(err680);}errors++;}}var valid231 = _errs902 === errors;if(valid231){const err681 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err681];}else {vErrors.push(err681);}errors++;}else {errors = _errs901;if(vErrors !== null){if(_errs901){vErrors.length = _errs901;}else {vErrors = null;}}}if(typeof data349 === "string"){if(func2(data349) < 1){const err682 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err682];}else {vErrors.push(err682);}errors++;}}else {const err683 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err683];}else {vErrors.push(err683);}errors++;}}}else {const err684 = {instancePath:instancePath+"/qa/personas/" + key97.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 = [err684];}else {vErrors.push(err684);}errors++;}var _valid8 = _errs896 === errors;if(_valid8 && valid227){valid227 = false;passing7 = [passing7, 1];}else {if(_valid8){valid227 = true;passing7 = 1;}}if(!valid227){const err685 = {instancePath:instancePath+"/qa/personas/" + key97.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/personas/oneOf/1/additionalProperties/oneOf",keyword:"oneOf",params:{passingSchemas: passing7},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err685];}else {vErrors.push(err685);}errors++;}else {errors = _errs888;if(vErrors !== null){if(_errs888){vErrors.length = _errs888;}else {vErrors = null;}}}}}else {const err686 = {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 = [err686];}else {vErrors.push(err686);}errors++;}var _valid7 = _errs884 === errors;if(_valid7 && valid222){valid222 = false;passing6 = [passing6, 1];}else {if(_valid7){valid222 = true;passing6 = 1;}}if(!valid222){const err687 = {instancePath:instancePath+"/qa/personas",schemaPath:"#/properties/qa/properties/personas/oneOf",keyword:"oneOf",params:{passingSchemas: passing6},message:"must match exactly one schema in oneOf"};if(vErrors === null){vErrors = [err687];}else {vErrors.push(err687);}errors++;}else {errors = _errs877;if(vErrors !== null){if(_errs877){vErrors.length = _errs877;}else {vErrors = null;}}}}if(data335.gherkinLint !== undefined){let data350 = data335.gherkinLint;if(data350 && typeof data350 == "object" && !Array.isArray(data350)){if(data350.scopes === undefined){const err688 = {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 = [err688];}else {vErrors.push(err688);}errors++;}for(const key100 in data350){if(!(((key100 === "scopes") || (key100 === "exemptionTags")) || (key100 === "stepWaivers"))){const err689 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key100},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err689];}else {vErrors.push(err689);}errors++;}}if(data350.scopes !== undefined){let data351 = data350.scopes;if(data351 && typeof data351 == "object" && !Array.isArray(data351)){if(Object.keys(data351).length < 1){const err690 = {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 = [err690];}else {vErrors.push(err690);}errors++;}for(const key101 in data351){let data352 = data351[key101];if(data352 && typeof data352 == "object" && !Array.isArray(data352)){if(data352.featureRoots === undefined){const err691 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err691];}else {vErrors.push(err691);}errors++;}if(data352.stepRoots === undefined){const err692 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err692];}else {vErrors.push(err692);}errors++;}for(const key102 in data352){if(!((key102 === "featureRoots") || (key102 === "stepRoots"))){const err693 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/additionalProperties",keyword:"additionalProperties",params:{additionalProperty: key102},message:"must NOT have additional properties"};if(vErrors === null){vErrors = [err693];}else {vErrors.push(err693);}errors++;}}if(data352.featureRoots !== undefined){let data353 = data352.featureRoots;if(Array.isArray(data353)){if(data353.length < 1){const err694 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err694];}else {vErrors.push(err694);}errors++;}const len44 = data353.length;for(let i46=0; i46<len44; i46++){let data354 = data353[i46];const _errs916 = errors;const _errs917 = errors;if(typeof data354 === "string"){if(!pattern0.test(data354)){const err695 = {};if(vErrors === null){vErrors = [err695];}else {vErrors.push(err695);}errors++;}}var valid237 = _errs917 === errors;if(valid237){const err696 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err696];}else {vErrors.push(err696);}errors++;}else {errors = _errs916;if(vErrors !== null){if(_errs916){vErrors.length = _errs916;}else {vErrors = null;}}}if(typeof data354 === "string"){if(func2(data354) < 1){const err697 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err697];}else {vErrors.push(err697);}errors++;}}else {const err698 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/featureRoots/" + i46,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/featureRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err698];}else {vErrors.push(err698);}errors++;}}}else {const err699 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err699];}else {vErrors.push(err699);}errors++;}}if(data352.stepRoots !== undefined){let data355 = data352.stepRoots;if(Array.isArray(data355)){if(data355.length < 1){const err700 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err700];}else {vErrors.push(err700);}errors++;}const len45 = data355.length;for(let i47=0; i47<len45; i47++){let data356 = data355[i47];const _errs922 = errors;const _errs923 = errors;if(typeof data356 === "string"){if(!pattern0.test(data356)){const err701 = {};if(vErrors === null){vErrors = [err701];}else {vErrors.push(err701);}errors++;}}var valid240 = _errs923 === errors;if(valid240){const err702 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err702];}else {vErrors.push(err702);}errors++;}else {errors = _errs922;if(vErrors !== null){if(_errs922){vErrors.length = _errs922;}else {vErrors = null;}}}if(typeof data356 === "string"){if(func2(data356) < 1){const err703 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err703];}else {vErrors.push(err703);}errors++;}}else {const err704 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.replace(/~/g, "~0").replace(/\//g, "~1")+"/stepRoots/" + i47,schemaPath:"#/properties/qa/properties/gherkinLint/properties/scopes/additionalProperties/properties/stepRoots/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err704];}else {vErrors.push(err704);}errors++;}}}else {const err705 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err705];}else {vErrors.push(err705);}errors++;}}}else {const err706 = {instancePath:instancePath+"/qa/gherkinLint/scopes/" + key101.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 = [err706];}else {vErrors.push(err706);}errors++;}}}else {const err707 = {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 = [err707];}else {vErrors.push(err707);}errors++;}}if(data350.exemptionTags !== undefined){let data357 = data350.exemptionTags;if(Array.isArray(data357)){const len46 = data357.length;for(let i48=0; i48<len46; i48++){let data358 = data357[i48];const _errs928 = errors;const _errs929 = errors;if(typeof data358 === "string"){if(!pattern0.test(data358)){const err708 = {};if(vErrors === null){vErrors = [err708];}else {vErrors.push(err708);}errors++;}}var valid243 = _errs929 === errors;if(valid243){const err709 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err709];}else {vErrors.push(err709);}errors++;}else {errors = _errs928;if(vErrors !== null){if(_errs928){vErrors.length = _errs928;}else {vErrors = null;}}}if(typeof data358 === "string"){if(func2(data358) < 1){const err710 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err710];}else {vErrors.push(err710);}errors++;}}else {const err711 = {instancePath:instancePath+"/qa/gherkinLint/exemptionTags/" + i48,schemaPath:"#/properties/qa/properties/gherkinLint/properties/exemptionTags/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err711];}else {vErrors.push(err711);}errors++;}}}else {const err712 = {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 = [err712];}else {vErrors.push(err712);}errors++;}}if(data350.stepWaivers !== undefined){let data359 = data350.stepWaivers;if(Array.isArray(data359)){const len47 = data359.length;for(let i49=0; i49<len47; i49++){let data360 = data359[i49];if(typeof data360 === "string"){if(func2(data360) < 1){const err713 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err713];}else {vErrors.push(err713);}errors++;}}else {const err714 = {instancePath:instancePath+"/qa/gherkinLint/stepWaivers/" + i49,schemaPath:"#/properties/qa/properties/gherkinLint/properties/stepWaivers/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err714];}else {vErrors.push(err714);}errors++;}}}else {const err715 = {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 = [err715];}else {vErrors.push(err715);}errors++;}}}else {const err716 = {instancePath:instancePath+"/qa/gherkinLint",schemaPath:"#/properties/qa/properties/gherkinLint/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err716];}else {vErrors.push(err716);}errors++;}}if(data335.consoleAllowlist !== undefined){let data361 = data335.consoleAllowlist;if(Array.isArray(data361)){const len48 = data361.length;for(let i50=0; i50<len48; i50++){let data362 = data361[i50];const _errs938 = errors;const _errs939 = errors;if(typeof data362 === "string"){if(!pattern0.test(data362)){const err717 = {};if(vErrors === null){vErrors = [err717];}else {vErrors.push(err717);}errors++;}}var valid248 = _errs939 === errors;if(valid248){const err718 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err718];}else {vErrors.push(err718);}errors++;}else {errors = _errs938;if(vErrors !== null){if(_errs938){vErrors.length = _errs938;}else {vErrors = null;}}}if(typeof data362 === "string"){if(func2(data362) < 1){const err719 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters"};if(vErrors === null){vErrors = [err719];}else {vErrors.push(err719);}errors++;}}else {const err720 = {instancePath:instancePath+"/qa/consoleAllowlist/" + i50,schemaPath:"#/properties/qa/properties/consoleAllowlist/items/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err720];}else {vErrors.push(err720);}errors++;}}}else {const err721 = {instancePath:instancePath+"/qa/consoleAllowlist",schemaPath:"#/properties/qa/properties/consoleAllowlist/type",keyword:"type",params:{type: "array"},message:"must be array"};if(vErrors === null){vErrors = [err721];}else {vErrors.push(err721);}errors++;}}if(data335.designTokens !== undefined){let data363 = data335.designTokens;const _errs942 = errors;const _errs943 = errors;if(typeof data363 === "string"){if(!pattern0.test(data363)){const err722 = {};if(vErrors === null){vErrors = [err722];}else {vErrors.push(err722);}errors++;}}var valid249 = _errs943 === errors;if(valid249){const err723 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/not",keyword:"not",params:{},message:"must NOT be valid"};if(vErrors === null){vErrors = [err723];}else {vErrors.push(err723);}errors++;}else {errors = _errs942;if(vErrors !== null){if(_errs942){vErrors.length = _errs942;}else {vErrors = null;}}}if(typeof data363 === "string"){if(func2(data363) < 1){const err724 = {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 = [err724];}else {vErrors.push(err724);}errors++;}}else {const err725 = {instancePath:instancePath+"/qa/designTokens",schemaPath:"#/properties/qa/properties/designTokens/type",keyword:"type",params:{type: "string"},message:"must be string"};if(vErrors === null){vErrors = [err725];}else {vErrors.push(err725);}errors++;}}}else {const err726 = {instancePath:instancePath+"/qa",schemaPath:"#/properties/qa/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err726];}else {vErrors.push(err726);}errors++;}}}else {const err727 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"};if(vErrors === null){vErrors = [err727];}else {vErrors.push(err727);}errors++;}validate10.errors = vErrors;return errors === 0;}
|