All contracts

Diagnostics and remediation / JSON Schema

Workspai Doctor Project Evidence

Defines the versioned doctor project evidence v1 boundary used by Workspai and its consumers.

Schema version
doctor-project-evidence-v1
Contract path
contracts/doctor-project-evidence.v1.json
Publication
json-schema
Defined fields
209
Artifact bindings
1

Why this contract exists

Architecture role

Carries structured evidence, findings, and verdicts across governance boundaries.

Consumption boundary

  • Workspai CLI
  • CI and release automation
  • Developers

Related commands

Commands are linked only when the runtime contract identifies a direct production relationship. Supporting contracts may be consumed without having a single producer command.

Produced artifacts

These durable files are emitted by registered commands and validated against this contract.

Artifact pathSchemaProducer
.workspai/reports/doctor-project-last-run.jsondoctor-project-evidence-v1
workspai doctor project

Field reference

Every declared schema property or published capability path is listed here. Required means the contract declares or publishes that field at the shown boundary.

Field pathTypeRequiredMeaningConstraints
$defs.commandInvocation.argsarrayYesDefines the args value at this contract boundary.
$defs.commandInvocation.cwdstringYesDefines the cwd value at this contract boundary.minLength: 1
$defs.commandInvocation.executablestringYesDefines the executable value at this contract boundary.minLength: 1
$defs.dependencyAudit.blockingFindingCountinteger | nullYesDefines the blockingfindingcount value at this contract boundary.minimum: 0
$defs.dependencyAudit.ecosystemstringYesDefines the ecosystem value at this contract boundary.minLength: 1
$defs.dependencyAudit.exitCodeintegerNoDefines the exitcode value at this contract boundary.
$defs.dependencyAudit.findingCountinteger | nullYesDefines the findingcount value at this contract boundary.minimum: 0
$defs.dependencyAudit.generatedAtstringYesDefines the generatedat value at this contract boundary.format: date-time
$defs.dependencyAudit.invocationreferenceNoDefines the invocation value at this contract boundary.ref: #/$defs/commandInvocation
$defs.dependencyAudit.limitationsarrayYesDefines the limitations value at this contract boundary.
$defs.dependencyAudit.reasonstringYesDefines the reason value at this contract boundary.minLength: 1
$defs.dependencyAudit.remediationreferenceNoDefines the remediation value at this contract boundary.ref: #/$defs/dependencyRemediation
$defs.dependencyAudit.runtimeenumYesDefines the runtime value at this contract boundary.enum: node, bun, deno, python, go, java, rust, elixir, clojure, php, ruby, dotnet, scala, kotlin, c, cpp, unknown
$defs.dependencyAudit.schemaVersionstringYesDefines the schemaversion value at this contract boundary.const: "doctor-dependency-audit-v1"
$defs.dependencyAudit.severityCountsobjectYesDefines the severitycounts value at this contract boundary.additionalProperties: false
$defs.dependencyAudit.severityCounts.criticalintegerYesDefines the critical value at this contract boundary.minimum: 0
$defs.dependencyAudit.severityCounts.highintegerYesDefines the high value at this contract boundary.minimum: 0
$defs.dependencyAudit.severityCounts.lowintegerYesDefines the low value at this contract boundary.minimum: 0
$defs.dependencyAudit.severityCounts.moderateintegerYesDefines the moderate value at this contract boundary.minimum: 0
$defs.dependencyAudit.severityCounts.unknownintegerYesDefines the unknown value at this contract boundary.minimum: 0
$defs.dependencyAudit.statusenumYesDefines the status value at this contract boundary.enum: clean, vulnerable, tool-unavailable, unsupported, failed
$defs.dependencyAudit.subjectsarrayNoDefines the subjects value at this contract boundary.
$defs.dependencyAudit.toolstringYesDefines the tool value at this contract boundary.minLength: 1
$defs.dependencyAuditSubject.advisoryIdsarrayYesDefines the advisoryids value at this contract boundary.
$defs.dependencyAuditSubject.directbooleanNoDefines the direct value at this contract boundary.
$defs.dependencyAuditSubject.namestringYesDefines the name value at this contract boundary.minLength: 1
$defs.dependencyAuditSubject.severitiesarrayYesDefines the severities value at this contract boundary.
$defs.dependencyAuditSubject.versionstringNoDefines the version value at this contract boundary.minLength: 1
$defs.dependencyRemediation.breakingFixAvailablebooleanYesDefines the breakingfixavailable value at this contract boundary.
$defs.dependencyRemediation.candidatesarrayYesDefines the candidates value at this contract boundary.
$defs.dependencyRemediation.candidates[].breakingbooleanYesDefines the breaking value at this contract boundary.
$defs.dependencyRemediation.candidates[].packageNamestringYesDefines the packagename value at this contract boundary.minLength: 1
$defs.dependencyRemediation.candidates[].versionstringNoDefines the version value at this contract boundary.minLength: 1
$defs.dependencyRemediation.compatibleFixAvailablebooleanYesDefines the compatiblefixavailable value at this contract boundary.
$defs.dependencyRemediation.dispositionenumYesDefines the disposition value at this contract boundary.enum: not-needed, compatible, breaking-only, mixed, none, unknown
$defs.dependencyRemediation.resolutionCandidatesarrayNoDefines the resolutioncandidates value at this contract boundary.
$defs.dependencyRepairTransaction.completionobjectYesDefines the completion value at this contract boundary.additionalProperties: false
$defs.dependencyRepairTransaction.completion.auditCleanbooleanNoDefines the auditclean value at this contract boundary.const: true
$defs.dependencyRepairTransaction.completion.canonicalVerificationRequiredbooleanYesDefines the canonicalverificationrequired value at this contract boundary.const: true
$defs.dependencyRepairTransaction.completion.declaredBuildPassbooleanYesDefines the declaredbuildpass value at this contract boundary.const: true
$defs.dependencyRepairTransaction.completion.declaredTestsPassbooleanYesDefines the declaredtestspass value at this contract boundary.const: true
$defs.dependencyRepairTransaction.completion.installedTreePresentbooleanNoDefines the installedtreepresent value at this contract boundary.const: true
$defs.dependencyRepairTransaction.completion.manifestLockConsistentbooleanYesDefines the manifestlockconsistent value at this contract boundary.const: true
$defs.dependencyRepairTransaction.ecosystemstringYesDefines the ecosystem value at this contract boundary.minLength: 1
$defs.dependencyRepairTransaction.kindenumYesDefines the kind value at this contract boundary.enum: dependency-security, dependency-materialization
$defs.dependencyRepairTransaction.observableStateenumNoDefines the observablestate value at this contract boundary.enum: runtime-dependency-tree
$defs.dependencyRepairTransaction.projectPathstringYesDefines the projectpath value at this contract boundary.minLength: 1
$defs.dependencyRepairTransaction.requiredStagesarrayYesDefines the requiredstages value at this contract boundary.
$defs.dependencyRepairTransaction.schemaVersionstringYesDefines the schemaversion value at this contract boundary.const: "workspai.doctor-dependency-repair-transaction.v1"
$defs.dependencyRepairTransaction.sourceMutationRequiredbooleanNoDefines the sourcemutationrequired value at this contract boundary.
$defs.dependencyRepairTransaction.statestringYesDefines the state value at this contract boundary.const: "planned"
$defs.dependencyResolutionCandidate.advisoryIdsarrayYesDefines the advisoryids value at this contract boundary.
$defs.dependencyResolutionCandidate.autoExecutablebooleanYesDefines the autoexecutable value at this contract boundary.
$defs.dependencyResolutionCandidate.currentRangestringNoDefines the currentrange value at this contract boundary.minLength: 1
$defs.dependencyResolutionCandidate.currentVersionstringNoDefines the currentversion value at this contract boundary.minLength: 1
$defs.dependencyResolutionCandidate.ownerPackagesarrayYesDefines the ownerpackages value at this contract boundary.
$defs.dependencyResolutionCandidate.packageNamestringYesDefines the packagename value at this contract boundary.minLength: 1
$defs.dependencyResolutionCandidate.reasonstringYesDefines the reason value at this contract boundary.minLength: 1
$defs.dependencyResolutionCandidate.relationshipenumYesDefines the relationship value at this contract boundary.enum: direct, transitive, unknown
$defs.dependencyResolutionCandidate.requiresCompatibilityVerificationbooleanYesDefines the requirescompatibilityverification value at this contract boundary.
$defs.dependencyResolutionCandidate.riskenumYesDefines the risk value at this contract boundary.enum: safe, guarded, breaking, unknown
$defs.dependencyResolutionCandidate.safeVersionConstraintstringNoDefines the safeversionconstraint value at this contract boundary.minLength: 1
$defs.dependencyResolutionCandidate.strategiesarrayYesDefines the strategies value at this contract boundary.minItems: 1
$defs.dependencyResolutionCandidate.vulnerableRangestringNoDefines the vulnerablerange value at this contract boundary.minLength: 1
$defs.evidenceFreshness.generatedAtstringYesDefines the generatedat value at this contract boundary.format: date-time
$defs.evidenceFreshness.liveStateProbeCountintegerYesDefines the livestateprobecount value at this contract boundary.minimum: 0
$defs.evidenceFreshness.oldestProbeGeneratedAtstringNoDefines the oldestprobegeneratedat value at this contract boundary.format: date-time
$defs.evidenceFreshness.staleProbeCountintegerYesDefines the staleprobecount value at this contract boundary.minimum: 0
$defs.evidenceFreshness.statusenumYesDefines the status value at this contract boundary.enum: fresh, stale, unknown
$defs.evidenceFreshness.unknownProbeCountintegerYesDefines the unknownprobecount value at this contract boundary.minimum: 0
$defs.evidenceFreshness.verifyBeforeUseProbeCountintegerYesDefines the verifybeforeuseprobecount value at this contract boundary.minimum: 0
$defs.freshness.categoryenumYesDefines the category value at this contract boundary.enum: structure, verification, state
$defs.freshness.expiresAtstringNoDefines the expiresat value at this contract boundary.format: date-time
$defs.freshness.generatedAtstringYesDefines the generatedat value at this contract boundary.format: date-time
$defs.freshness.reasonstringYesDefines the reason value at this contract boundary.
$defs.freshness.statusenumYesDefines the status value at this contract boundary.enum: fresh, stale, unknown
$defs.freshness.ttlSecondsinteger | nullYesDefines the ttlseconds value at this contract boundary.minimum: 0
$defs.freshness.verifyBeforeUsebooleanYesDefines the verifybeforeuse value at this contract boundary.
$defs.healthScore.componentsobjectNoDefines the components value at this contract boundary.additionalProperties: false
$defs.healthScore.components.hostreferenceYesDefines the host value at this contract boundary.ref: #/$defs/scoreComponent
$defs.healthScore.components.projectsreferenceYesDefines the projects value at this contract boundary.ref: #/$defs/scoreComponent
$defs.healthScore.errorsintegerYesDefines the errors value at this contract boundary.minimum: 0
$defs.healthScore.passedintegerNoDefines the passed value at this contract boundary.minimum: 0
$defs.healthScore.percentnumberNoDefines the percent value at this contract boundary.minimum: 0 · maximum: 100
$defs.healthScore.presentationreferenceNoDefines the presentation value at this contract boundary.ref: #/$defs/healthScorePresentation
$defs.healthScore.totalintegerNoDefines the total value at this contract boundary.minimum: 0
$defs.healthScore.verdictenumNoDefines the verdict value at this contract boundary.enum: passed, attention, blocked
$defs.healthScore.warningsintegerNoDefines the warnings value at this contract boundary.minimum: 0
$defs.healthScorePresentation.advisoryFindingsintegerYesDefines the advisoryfindings value at this contract boundary.minimum: 0
$defs.healthScorePresentation.blockingFindingsintegerYesDefines the blockingfindings value at this contract boundary.minimum: 0
$defs.healthScorePresentation.contradictionFindingsintegerYesDefines the contradictionfindings value at this contract boundary.minimum: 0
$defs.healthScorePresentation.diagnosticPassRatePercentnumber | nullYesDefines the diagnosticpassratepercent value at this contract boundary.minimum: 0 · maximum: 100
$defs.healthScorePresentation.labelstringYesDefines the label value at this contract boundary.const: "diagnostic-pass-rate"
$defs.healthScorePresentation.notApplicableChecksintegerYesDefines the notapplicablechecks value at this contract boundary.minimum: 0
$defs.healthScorePresentation.policystringYesDefines the policy value at this contract boundary.const: "doctor-multi-axis-v1"
$defs.healthScorePresentation.unknownFindingsintegerYesDefines the unknownfindings value at this contract boundary.minimum: 0
$defs.policyProfile.advisoryWarningsBlockReleasebooleanYesDefines the advisorywarningsblockrelease value at this contract boundary.
$defs.policyProfile.descriptionstringYesDefines the description value at this contract boundary.
$defs.policyProfile.exitOnErrorsbooleanYesDefines the exitonerrors value at this contract boundary.const: true
$defs.policyProfile.exitOnWarningsbooleanYesDefines the exitonwarnings value at this contract boundary.
$defs.policyProfile.nameenumYesDefines the name value at this contract boundary.enum: local, ci, release, enterprise-strict
$defs.policyProfile.warningExitCodeenumYesDefines the warningexitcode value at this contract boundary.enum: 0, 1, 2
$defs.probe.applicabilityenumNoDefines the applicability value at this contract boundary.enum: applicable, not-applicable, unknown
$defs.probe.freshnessreferenceNoDefines the freshness value at this contract boundary.ref: #/$defs/freshness
$defs.probe.idstringNoDefines the id value at this contract boundary.minLength: 1
$defs.probe.issueClassenumNoDefines the issueclass value at this contract boundary.enum: dependency, environment, security, test, quality, container, deployment, runtime, workspace-contract, source-tree, framework, configuration, custom, unknown
$defs.probe.labelstringNoDefines the label value at this contract boundary.minLength: 1
$defs.probe.operationalImpactenumNoDefines the operationalimpact value at this contract boundary.enum: none, developer-friction, ci-risk, release-risk, security-risk, runtime-risk, customer-risk
$defs.probe.reasonstringNoDefines the reason value at this contract boundary.
$defs.probe.recommendationstringNoDefines the recommendation value at this contract boundary.
$defs.probe.repairCapabilityreferenceNoDefines the repaircapability value at this contract boundary.ref: #/$defs/repairCapability
$defs.probe.repairIntentreferenceNoDefines the repairintent value at this contract boundary.ref: #/$defs/repairIntent
$defs.probe.scopestringNoDefines the scope value at this contract boundary.
$defs.probe.severityenumNoDefines the severity value at this contract boundary.enum: info, warn, error
$defs.probe.statusenumNoDefines the status value at this contract boundary.enum: pass, warn, fail
$defs.probeSummary.advisoryFindingsintegerYesDefines the advisoryfindings value at this contract boundary.minimum: 0
$defs.probeSummary.blockingFindingsintegerYesDefines the blockingfindings value at this contract boundary.minimum: 0
$defs.probeSummary.contradictionFindingsintegerNoDefines the contradictionfindings value at this contract boundary.minimum: 0
$defs.probeSummary.failedintegerYesDefines the failed value at this contract boundary.minimum: 0
$defs.probeSummary.passedintegerYesDefines the passed value at this contract boundary.minimum: 0
$defs.probeSummary.totalintegerYesDefines the total value at this contract boundary.minimum: 0
$defs.probeSummary.unknownFindingsintegerNoDefines the unknownfindings value at this contract boundary.minimum: 0
$defs.probeSummary.verdictenumYesDefines the verdict value at this contract boundary.enum: passed, attention, blocked
$defs.probeSummary.warningsintegerYesDefines the warnings value at this contract boundary.minimum: 0
$defs.repairCapability.canAutoFixbooleanYesDefines the canautofix value at this contract boundary.
$defs.repairCapability.canEditFilesbooleanYesDefines the caneditfiles value at this contract boundary.
$defs.repairCapability.commandstringNoDefines the command value at this contract boundary.
$defs.repairCapability.filesarrayYesDefines the files value at this contract boundary.
$defs.repairCapability.fixKindenumYesDefines the fixkind value at this contract boundary.enum: package-json-script, file-create, file-append, file-copy, dependency-sync, command, manual
$defs.repairCapability.idstringYesDefines the id value at this contract boundary.minLength: 1
$defs.repairCapability.invocationreferenceNoDefines the invocation value at this contract boundary.ref: #/$defs/commandInvocation
$defs.repairCapability.issueIdstringYesDefines the issueid value at this contract boundary.minLength: 1
$defs.repairCapability.limitationsarrayNoDefines the limitations value at this contract boundary.
$defs.repairCapability.operationreferenceNoDefines the operation value at this contract boundary.ref: #/$defs/repairOperation
$defs.repairCapability.reasonstringYesDefines the reason value at this contract boundary.
$defs.repairCapability.refreshCommandsarrayYesDefines the refreshcommands value at this contract boundary.
$defs.repairCapability.requiresApprovalbooleanYesDefines the requiresapproval value at this contract boundary.
$defs.repairCapability.requiresReviewbooleanYesDefines the requiresreview value at this contract boundary.
$defs.repairCapability.riskenumYesDefines the risk value at this contract boundary.enum: safe, guarded, invasive
$defs.repairCapability.statusenumYesDefines the status value at this contract boundary.enum: available, manual, blocked
$defs.repairCapability.strategyarrayNoDefines the strategy value at this contract boundary.
$defs.repairCapability.titlestringYesDefines the title value at this contract boundary.minLength: 1
$defs.repairCapability.transactionreferenceNoDefines the transaction value at this contract boundary.ref: #/$defs/dependencyRepairTransaction
$defs.repairCapability.verifyCommandstringNoDefines the verifycommand value at this contract boundary.
$defs.repairIntent.confidenceenumYesDefines the confidence value at this contract boundary.enum: high, medium, low
$defs.repairIntent.modeenumYesDefines the mode value at this contract boundary.enum: none, run-command, edit-file, review-required, verify-before-fix, refresh-evidence, manual-guidance
$defs.repairIntent.primaryActionLabelstringYesDefines the primaryactionlabel value at this contract boundary.
$defs.repairIntent.reasonstringYesDefines the reason value at this contract boundary.
$defs.repairIntent.relatedCommandsarrayYesDefines the relatedcommands value at this contract boundary.
$defs.repairIntent.requiresApprovalbooleanYesDefines the requiresapproval value at this contract boundary.
$defs.repairIntent.requiresFreshEvidencebooleanYesDefines the requiresfreshevidence value at this contract boundary.
$defs.repairOperation.commandstringNoDefines the command value at this contract boundary.
$defs.repairOperation.contentstringNoDefines the content value at this contract boundary.
$defs.repairOperation.editsarrayNoDefines the edits value at this contract boundary.
$defs.repairOperation.edits[].pointerstringYesDefines the pointer value at this contract boundary.
$defs.repairOperation.edits[].valuestring | number | boolean | nullYesDefines the value value at this contract boundary.
$defs.repairOperation.ensureNewlinebooleanNoDefines the ensurenewline value at this contract boundary.
$defs.repairOperation.keysarrayNoDefines the keys value at this contract boundary.
$defs.repairOperation.keys[].commentstringNoDefines the comment value at this contract boundary.
$defs.repairOperation.keys[].namestringYesDefines the name value at this contract boundary.
$defs.repairOperation.keys[].valuestringYesDefines the value value at this contract boundary.
$defs.repairOperation.linesarrayNoDefines the lines value at this contract boundary.
$defs.repairOperation.overwritebooleanNoDefines the overwrite value at this contract boundary.
$defs.repairOperation.pathstringYesDefines the path value at this contract boundary.minLength: 1
$defs.repairOperation.phonybooleanNoDefines the phony value at this contract boundary.
$defs.repairOperation.scriptNamestringNoDefines the scriptname value at this contract boundary.
$defs.repairOperation.scriptValuestringNoDefines the scriptvalue value at this contract boundary.
$defs.repairOperation.sourcePathstringNoDefines the sourcepath value at this contract boundary.minLength: 1
$defs.repairOperation.targetstringNoDefines the target value at this contract boundary.
$defs.repairOperation.typeenumYesDefines the type value at this contract boundary.enum: file-create, file-append, file-copy, package-json-script, json-edit, env-key-add, makefile-target
$defs.repairStrategyStage.continueWhenenumYesDefines the continuewhen value at this contract boundary.enum: always, previous-passed, blocker-remains, manual-decision
$defs.repairStrategyStage.descriptionstringYesDefines the description value at this contract boundary.minLength: 1
$defs.repairStrategyStage.idstringYesDefines the id value at this contract boundary.minLength: 1
$defs.repairStrategyStage.invocationreferenceNoDefines the invocation value at this contract boundary.ref: #/$defs/commandInvocation
$defs.repairStrategyStage.kindenumYesDefines the kind value at this contract boundary.enum: diagnose, safe-fix, targeted-upgrade, verify, exception-review
$defs.repairStrategyStage.riskenumYesDefines the risk value at this contract boundary.enum: safe, guarded, invasive
$defs.scoreComponent.errorsintegerYesDefines the errors value at this contract boundary.minimum: 0
$defs.scoreComponent.passedintegerNoDefines the passed value at this contract boundary.minimum: 0
$defs.scoreComponent.percentnumberNoDefines the percent value at this contract boundary.minimum: 0 · maximum: 100
$defs.scoreComponent.totalintegerNoDefines the total value at this contract boundary.minimum: 0
$defs.scoreComponent.warningsintegerNoDefines the warnings value at this contract boundary.minimum: 0
contractobjectNoDefines the contract value at this contract boundary.additionalProperties: true
driftDeltaobjectNoDefines the driftdelta value at this contract boundary.additionalProperties: true
evidenceFreshnessreferenceNoDefines the evidencefreshness value at this contract boundary.ref: #/$defs/evidenceFreshness
evidenceTypestringYesDefines the evidencetype value at this contract boundary.const: "project"
generatedAtstringYesDefines the generatedat value at this contract boundary.format: date-time
healthScorereferenceNoDefines the healthscore value at this contract boundary.ref: #/$defs/healthScore
policyProfilereferenceNoDefines the policyprofile value at this contract boundary.ref: #/$defs/policyProfile
projectobjectNoDefines the project value at this contract boundary.additionalProperties: true
project.dependencyAuditreferenceNoDefines the dependencyaudit value at this contract boundary.ref: #/$defs/dependencyAudit
project.diagnosisreferenceNoDefines the diagnosis value at this contract boundary.ref: https://workspai.dev/schemas/workspace-intelligence/doctor-diagnosis.v1.json
project.graphDiagnosisreferenceNoDefines the graphdiagnosis value at this contract boundary.ref: https://workspai.dev/schemas/workspace-intelligence/doctor-graph-diagnosis.v1.json
project.probesarrayNoDefines the probes value at this contract boundary.
project.probeSummaryreferenceNoDefines the probesummary value at this contract boundary.ref: #/$defs/probeSummary
project.repairCapabilitiesarrayNoDefines the repaircapabilities value at this contract boundary.
project.verdictenumNoDefines the verdict value at this contract boundary.enum: passed, attention, blocked
projectNamestringYesDefines the projectname value at this contract boundary.minLength: 1
projectPathstringYesDefines the projectpath value at this contract boundary.minLength: 1
schemaVersionstringYesDefines the schemaversion value at this contract boundary.const: "doctor-project-evidence-v1"
scoreBreakdownarrayNoDefines the scorebreakdown value at this contract boundary.
summaryobjectYesDefines the summary value at this contract boundary.additionalProperties: true
summary.advisoryFindingsintegerNoDefines the advisoryfindings value at this contract boundary.minimum: 0
summary.blockingFindingsintegerNoDefines the blockingfindings value at this contract boundary.minimum: 0
summary.countsreferenceNoDefines the counts value at this contract boundary.ref: #/$defs/counts
summary.probeSummaryreferenceNoDefines the probesummary value at this contract boundary.ref: #/$defs/probeSummary
summary.scopeProvenanceobjectNoDefines the scopeprovenance value at this contract boundary.additionalProperties: true
summary.verdictenumNoDefines the verdict value at this contract boundary.enum: passed, attention, blocked
systemobjectNoDefines the system value at this contract boundary.additionalProperties: true
workspacePathstring | nullNoDefines the workspacepath value at this contract boundary.

Canonical machine-readable definition

The raw synchronized contract remains authoritative. The educational sections above are projections of this definition.

Show raw JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://workspai.dev/schemas/doctor-project-evidence.v1.json",
  "title": "Workspai Doctor Project Evidence",
  "type": "object",
  "required": [
    "schemaVersion",
    "evidenceType",
    "generatedAt",
    "projectPath",
    "projectName",
    "summary"
  ],
  "properties": {
    "schemaVersion": {
      "const": "doctor-project-evidence-v1"
    },
    "evidenceType": {
      "const": "project"
    },
    "generatedAt": {
      "type": "string",
      "format": "date-time"
    },
    "workspacePath": {
      "type": [
        "string",
        "null"
      ]
    },
    "projectPath": {
      "type": "string",
      "minLength": 1
    },
    "projectName": {
      "type": "string",
      "minLength": 1
    },
    "healthScore": {
      "$ref": "#/$defs/healthScore"
    },
    "evidenceFreshness": {
      "$ref": "#/$defs/evidenceFreshness"
    },
    "system": {
      "type": "object",
      "additionalProperties": true
    },
    "project": {
      "type": "object",
      "properties": {
        "probes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/probe"
          }
        },
        "repairCapabilities": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/repairCapability"
          }
        },
        "dependencyAudit": {
          "$ref": "#/$defs/dependencyAudit"
        },
        "graphDiagnosis": {
          "$ref": "https://workspai.dev/schemas/workspace-intelligence/doctor-graph-diagnosis.v1.json"
        },
        "diagnosis": {
          "$ref": "https://workspai.dev/schemas/workspace-intelligence/doctor-diagnosis.v1.json"
        },
        "verdict": {
          "enum": [
            "passed",
            "attention",
            "blocked"
          ]
        },
        "probeSummary": {
          "$ref": "#/$defs/probeSummary"
        }
      },
      "additionalProperties": true
    },
    "summary": {
      "type": "object",
      "properties": {
        "counts": {
          "$ref": "#/$defs/counts"
        },
        "scopeProvenance": {
          "type": "object",
          "additionalProperties": true
        },
        "verdict": {
          "enum": [
            "passed",
            "attention",
            "blocked"
          ]
        },
        "probeSummary": {
          "$ref": "#/$defs/probeSummary"
        },
        "blockingFindings": {
          "type": "integer",
          "minimum": 0
        },
        "advisoryFindings": {
          "type": "integer",
          "minimum": 0
        }
      },
      "additionalProperties": true
    },
    "driftDelta": {
      "type": "object",
      "additionalProperties": true
    },
    "scoreBreakdown": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      }
    },
    "contract": {
      "type": "object",
      "additionalProperties": true
    },
    "policyProfile": {
      "$ref": "#/$defs/policyProfile"
    }
  },
  "$defs": {
    "counts": {
      "type": "object",
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "dependencyAudit": {
      "type": "object",
      "required": [
        "schemaVersion",
        "runtime",
        "ecosystem",
        "tool",
        "status",
        "generatedAt",
        "findingCount",
        "blockingFindingCount",
        "severityCounts",
        "reason",
        "limitations"
      ],
      "properties": {
        "schemaVersion": {
          "const": "doctor-dependency-audit-v1"
        },
        "runtime": {
          "enum": [
            "node",
            "bun",
            "deno",
            "python",
            "go",
            "java",
            "rust",
            "elixir",
            "clojure",
            "php",
            "ruby",
            "dotnet",
            "scala",
            "kotlin",
            "c",
            "cpp",
            "unknown"
          ]
        },
        "ecosystem": {
          "type": "string",
          "minLength": 1
        },
        "tool": {
          "type": "string",
          "minLength": 1
        },
        "status": {
          "enum": [
            "clean",
            "vulnerable",
            "tool-unavailable",
            "unsupported",
            "failed"
          ]
        },
        "generatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "invocation": {
          "$ref": "#/$defs/commandInvocation"
        },
        "exitCode": {
          "type": "integer"
        },
        "findingCount": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0
        },
        "blockingFindingCount": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0
        },
        "severityCounts": {
          "type": "object",
          "required": [
            "low",
            "moderate",
            "high",
            "critical",
            "unknown"
          ],
          "properties": {
            "low": {
              "type": "integer",
              "minimum": 0
            },
            "moderate": {
              "type": "integer",
              "minimum": 0
            },
            "high": {
              "type": "integer",
              "minimum": 0
            },
            "critical": {
              "type": "integer",
              "minimum": 0
            },
            "unknown": {
              "type": "integer",
              "minimum": 0
            }
          },
          "additionalProperties": false
        },
        "subjects": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/dependencyAuditSubject"
          }
        },
        "remediation": {
          "$ref": "#/$defs/dependencyRemediation"
        },
        "reason": {
          "type": "string",
          "minLength": 1
        },
        "limitations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "dependencyRemediation": {
      "type": "object",
      "required": [
        "disposition",
        "compatibleFixAvailable",
        "breakingFixAvailable",
        "candidates"
      ],
      "properties": {
        "disposition": {
          "enum": [
            "not-needed",
            "compatible",
            "breaking-only",
            "mixed",
            "none",
            "unknown"
          ]
        },
        "compatibleFixAvailable": {
          "type": "boolean"
        },
        "breakingFixAvailable": {
          "type": "boolean"
        },
        "candidates": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "packageName",
              "breaking"
            ],
            "properties": {
              "packageName": {
                "type": "string",
                "minLength": 1
              },
              "version": {
                "type": "string",
                "minLength": 1
              },
              "breaking": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          }
        },
        "resolutionCandidates": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/dependencyResolutionCandidate"
          }
        }
      },
      "additionalProperties": false
    },
    "dependencyResolutionCandidate": {
      "type": "object",
      "required": [
        "packageName",
        "relationship",
        "strategies",
        "risk",
        "autoExecutable",
        "requiresCompatibilityVerification",
        "ownerPackages",
        "advisoryIds",
        "reason"
      ],
      "properties": {
        "packageName": {
          "type": "string",
          "minLength": 1
        },
        "relationship": {
          "enum": [
            "direct",
            "transitive",
            "unknown"
          ]
        },
        "strategies": {
          "type": "array",
          "items": {
            "enum": [
              "direct-upgrade",
              "owner-upgrade",
              "constraint-update",
              "transitive-override",
              "replacement",
              "policy-exception",
              "upstream-wait"
            ]
          },
          "minItems": 1,
          "uniqueItems": true
        },
        "risk": {
          "enum": [
            "safe",
            "guarded",
            "breaking",
            "unknown"
          ]
        },
        "autoExecutable": {
          "type": "boolean"
        },
        "requiresCompatibilityVerification": {
          "type": "boolean"
        },
        "currentVersion": {
          "type": "string",
          "minLength": 1
        },
        "currentRange": {
          "type": "string",
          "minLength": 1
        },
        "vulnerableRange": {
          "type": "string",
          "minLength": 1
        },
        "safeVersionConstraint": {
          "type": "string",
          "minLength": 1
        },
        "ownerPackages": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true
        },
        "advisoryIds": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true
        },
        "reason": {
          "type": "string",
          "minLength": 1
        }
      },
      "additionalProperties": false
    },
    "dependencyAuditSubject": {
      "type": "object",
      "required": [
        "name",
        "advisoryIds",
        "severities"
      ],
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1
        },
        "version": {
          "type": "string",
          "minLength": 1
        },
        "direct": {
          "type": "boolean"
        },
        "advisoryIds": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true
        },
        "severities": {
          "type": "array",
          "items": {
            "enum": [
              "low",
              "moderate",
              "high",
              "critical",
              "unknown"
            ]
          },
          "uniqueItems": true
        }
      },
      "additionalProperties": false
    },
    "scoreComponent": {
      "type": "object",
      "required": [
        "errors"
      ],
      "properties": {
        "percent": {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "total": {
          "type": "integer",
          "minimum": 0
        },
        "passed": {
          "type": "integer",
          "minimum": 0
        },
        "warnings": {
          "type": "integer",
          "minimum": 0
        },
        "errors": {
          "type": "integer",
          "minimum": 0
        }
      },
      "additionalProperties": false
    },
    "healthScore": {
      "type": "object",
      "required": [
        "errors"
      ],
      "properties": {
        "percent": {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "total": {
          "type": "integer",
          "minimum": 0
        },
        "passed": {
          "type": "integer",
          "minimum": 0
        },
        "warnings": {
          "type": "integer",
          "minimum": 0
        },
        "errors": {
          "type": "integer",
          "minimum": 0
        },
        "verdict": {
          "enum": [
            "passed",
            "attention",
            "blocked"
          ]
        },
        "presentation": {
          "$ref": "#/$defs/healthScorePresentation"
        },
        "components": {
          "type": "object",
          "required": [
            "host",
            "projects"
          ],
          "properties": {
            "host": {
              "$ref": "#/$defs/scoreComponent"
            },
            "projects": {
              "$ref": "#/$defs/scoreComponent"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "healthScorePresentation": {
      "type": "object",
      "required": [
        "policy",
        "diagnosticPassRatePercent",
        "blockingFindings",
        "advisoryFindings",
        "unknownFindings",
        "contradictionFindings",
        "notApplicableChecks",
        "label"
      ],
      "properties": {
        "policy": {
          "const": "doctor-multi-axis-v1"
        },
        "diagnosticPassRatePercent": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0,
          "maximum": 100
        },
        "blockingFindings": {
          "type": "integer",
          "minimum": 0
        },
        "advisoryFindings": {
          "type": "integer",
          "minimum": 0
        },
        "unknownFindings": {
          "type": "integer",
          "minimum": 0
        },
        "contradictionFindings": {
          "type": "integer",
          "minimum": 0
        },
        "notApplicableChecks": {
          "type": "integer",
          "minimum": 0
        },
        "label": {
          "const": "diagnostic-pass-rate"
        }
      },
      "additionalProperties": false
    },
    "probeSummary": {
      "type": "object",
      "required": [
        "total",
        "passed",
        "warnings",
        "failed",
        "blockingFindings",
        "advisoryFindings",
        "verdict"
      ],
      "properties": {
        "total": {
          "type": "integer",
          "minimum": 0
        },
        "passed": {
          "type": "integer",
          "minimum": 0
        },
        "warnings": {
          "type": "integer",
          "minimum": 0
        },
        "failed": {
          "type": "integer",
          "minimum": 0
        },
        "blockingFindings": {
          "type": "integer",
          "minimum": 0
        },
        "advisoryFindings": {
          "type": "integer",
          "minimum": 0
        },
        "unknownFindings": {
          "type": "integer",
          "minimum": 0
        },
        "contradictionFindings": {
          "type": "integer",
          "minimum": 0
        },
        "verdict": {
          "enum": [
            "passed",
            "attention",
            "blocked"
          ]
        }
      },
      "additionalProperties": false
    },
    "freshness": {
      "type": "object",
      "required": [
        "category",
        "generatedAt",
        "ttlSeconds",
        "status",
        "verifyBeforeUse",
        "reason"
      ],
      "properties": {
        "category": {
          "enum": [
            "structure",
            "verification",
            "state"
          ]
        },
        "generatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "ttlSeconds": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time"
        },
        "status": {
          "enum": [
            "fresh",
            "stale",
            "unknown"
          ]
        },
        "verifyBeforeUse": {
          "type": "boolean"
        },
        "reason": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "evidenceFreshness": {
      "type": "object",
      "required": [
        "generatedAt",
        "status",
        "staleProbeCount",
        "unknownProbeCount",
        "liveStateProbeCount",
        "verifyBeforeUseProbeCount"
      ],
      "properties": {
        "generatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "status": {
          "enum": [
            "fresh",
            "stale",
            "unknown"
          ]
        },
        "staleProbeCount": {
          "type": "integer",
          "minimum": 0
        },
        "unknownProbeCount": {
          "type": "integer",
          "minimum": 0
        },
        "liveStateProbeCount": {
          "type": "integer",
          "minimum": 0
        },
        "verifyBeforeUseProbeCount": {
          "type": "integer",
          "minimum": 0
        },
        "oldestProbeGeneratedAt": {
          "type": "string",
          "format": "date-time"
        }
      },
      "additionalProperties": false
    },
    "repairIntent": {
      "type": "object",
      "required": [
        "mode",
        "confidence",
        "primaryActionLabel",
        "requiresApproval",
        "requiresFreshEvidence",
        "reason",
        "relatedCommands"
      ],
      "properties": {
        "mode": {
          "enum": [
            "none",
            "run-command",
            "edit-file",
            "review-required",
            "verify-before-fix",
            "refresh-evidence",
            "manual-guidance"
          ]
        },
        "confidence": {
          "enum": [
            "high",
            "medium",
            "low"
          ]
        },
        "primaryActionLabel": {
          "type": "string"
        },
        "requiresApproval": {
          "type": "boolean"
        },
        "requiresFreshEvidence": {
          "type": "boolean"
        },
        "reason": {
          "type": "string"
        },
        "relatedCommands": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "policyProfile": {
      "type": "object",
      "required": [
        "name",
        "exitOnErrors",
        "exitOnWarnings",
        "warningExitCode",
        "advisoryWarningsBlockRelease",
        "description"
      ],
      "properties": {
        "name": {
          "enum": [
            "local",
            "ci",
            "release",
            "enterprise-strict"
          ]
        },
        "exitOnErrors": {
          "const": true
        },
        "exitOnWarnings": {
          "type": "boolean"
        },
        "warningExitCode": {
          "enum": [
            0,
            1,
            2
          ]
        },
        "advisoryWarningsBlockRelease": {
          "type": "boolean"
        },
        "description": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "probe": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1
        },
        "label": {
          "type": "string",
          "minLength": 1
        },
        "status": {
          "enum": [
            "pass",
            "warn",
            "fail"
          ]
        },
        "severity": {
          "enum": [
            "info",
            "warn",
            "error"
          ]
        },
        "scope": {
          "type": "string"
        },
        "applicability": {
          "enum": [
            "applicable",
            "not-applicable",
            "unknown"
          ]
        },
        "reason": {
          "type": "string"
        },
        "recommendation": {
          "type": "string"
        },
        "freshness": {
          "$ref": "#/$defs/freshness"
        },
        "issueClass": {
          "enum": [
            "dependency",
            "environment",
            "security",
            "test",
            "quality",
            "container",
            "deployment",
            "runtime",
            "workspace-contract",
            "source-tree",
            "framework",
            "configuration",
            "custom",
            "unknown"
          ]
        },
        "operationalImpact": {
          "enum": [
            "none",
            "developer-friction",
            "ci-risk",
            "release-risk",
            "security-risk",
            "runtime-risk",
            "customer-risk"
          ]
        },
        "repairIntent": {
          "$ref": "#/$defs/repairIntent"
        },
        "repairCapability": {
          "$ref": "#/$defs/repairCapability"
        }
      },
      "additionalProperties": true
    },
    "repairCapability": {
      "type": "object",
      "required": [
        "id",
        "issueId",
        "title",
        "status",
        "fixKind",
        "risk",
        "canAutoFix",
        "canEditFiles",
        "requiresApproval",
        "requiresReview",
        "files",
        "refreshCommands",
        "reason"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1
        },
        "issueId": {
          "type": "string",
          "minLength": 1
        },
        "title": {
          "type": "string",
          "minLength": 1
        },
        "status": {
          "enum": [
            "available",
            "manual",
            "blocked"
          ]
        },
        "fixKind": {
          "enum": [
            "package-json-script",
            "file-create",
            "file-append",
            "file-copy",
            "dependency-sync",
            "command",
            "manual"
          ]
        },
        "risk": {
          "enum": [
            "safe",
            "guarded",
            "invasive"
          ]
        },
        "canAutoFix": {
          "type": "boolean"
        },
        "canEditFiles": {
          "type": "boolean"
        },
        "requiresApproval": {
          "type": "boolean"
        },
        "requiresReview": {
          "type": "boolean"
        },
        "files": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "command": {
          "type": "string"
        },
        "invocation": {
          "$ref": "#/$defs/commandInvocation"
        },
        "strategy": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/repairStrategyStage"
          }
        },
        "transaction": {
          "$ref": "#/$defs/dependencyRepairTransaction"
        },
        "operation": {
          "$ref": "#/$defs/repairOperation"
        },
        "verifyCommand": {
          "type": "string"
        },
        "refreshCommands": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "reason": {
          "type": "string"
        },
        "limitations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": true
    },
    "dependencyRepairTransaction": {
      "type": "object",
      "required": [
        "schemaVersion",
        "kind",
        "state",
        "projectPath",
        "ecosystem",
        "requiredStages",
        "completion"
      ],
      "properties": {
        "schemaVersion": {
          "const": "workspai.doctor-dependency-repair-transaction.v1"
        },
        "kind": {
          "enum": [
            "dependency-security",
            "dependency-materialization"
          ]
        },
        "state": {
          "const": "planned"
        },
        "projectPath": {
          "type": "string",
          "minLength": 1
        },
        "ecosystem": {
          "type": "string",
          "minLength": 1
        },
        "sourceMutationRequired": {
          "type": "boolean"
        },
        "observableState": {
          "enum": [
            "runtime-dependency-tree"
          ]
        },
        "requiredStages": {
          "type": "array",
          "items": {
            "enum": [
              "reconcile",
              "audit",
              "test",
              "build"
            ]
          },
          "uniqueItems": true
        },
        "completion": {
          "type": "object",
          "required": [
            "manifestLockConsistent",
            "declaredTestsPass",
            "declaredBuildPass",
            "canonicalVerificationRequired"
          ],
          "properties": {
            "manifestLockConsistent": {
              "const": true
            },
            "auditClean": {
              "const": true
            },
            "installedTreePresent": {
              "const": true
            },
            "declaredTestsPass": {
              "const": true
            },
            "declaredBuildPass": {
              "const": true
            },
            "canonicalVerificationRequired": {
              "const": true
            }
          },
          "additionalProperties": false
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "kind": {
                "const": "dependency-security"
              }
            }
          },
          "then": {
            "properties": {
              "completion": {
                "type": "object",
                "properties": {
                  "auditClean": {
                    "const": true
                  }
                },
                "required": [
                  "auditClean"
                ]
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "dependency-materialization"
              }
            }
          },
          "then": {
            "required": [
              "sourceMutationRequired",
              "observableState"
            ],
            "properties": {
              "sourceMutationRequired": {
                "const": false
              },
              "observableState": {
                "const": "runtime-dependency-tree"
              },
              "completion": {
                "type": "object",
                "properties": {
                  "installedTreePresent": {
                    "const": true
                  }
                },
                "required": [
                  "installedTreePresent"
                ]
              }
            }
          }
        }
      ],
      "additionalProperties": false
    },
    "commandInvocation": {
      "type": "object",
      "required": [
        "cwd",
        "executable",
        "args"
      ],
      "properties": {
        "cwd": {
          "type": "string",
          "minLength": 1
        },
        "executable": {
          "type": "string",
          "minLength": 1
        },
        "args": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "repairStrategyStage": {
      "type": "object",
      "required": [
        "id",
        "kind",
        "description",
        "risk",
        "continueWhen"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1
        },
        "kind": {
          "enum": [
            "diagnose",
            "safe-fix",
            "targeted-upgrade",
            "verify",
            "exception-review"
          ]
        },
        "description": {
          "type": "string",
          "minLength": 1
        },
        "risk": {
          "enum": [
            "safe",
            "guarded",
            "invasive"
          ]
        },
        "invocation": {
          "$ref": "#/$defs/commandInvocation"
        },
        "continueWhen": {
          "enum": [
            "always",
            "previous-passed",
            "blocker-remains",
            "manual-decision"
          ]
        }
      },
      "additionalProperties": false
    },
    "repairOperation": {
      "type": "object",
      "required": [
        "type",
        "path"
      ],
      "properties": {
        "type": {
          "enum": [
            "file-create",
            "file-append",
            "file-copy",
            "package-json-script",
            "json-edit",
            "env-key-add",
            "makefile-target"
          ]
        },
        "sourcePath": {
          "type": "string",
          "minLength": 1
        },
        "path": {
          "type": "string",
          "minLength": 1
        },
        "content": {
          "type": "string"
        },
        "overwrite": {
          "type": "boolean"
        },
        "lines": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ensureNewline": {
          "type": "boolean"
        },
        "scriptName": {
          "type": "string"
        },
        "scriptValue": {
          "type": "string"
        },
        "edits": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "pointer",
              "value"
            ],
            "properties": {
              "pointer": {
                "type": "string"
              },
              "value": {
                "type": [
                  "string",
                  "number",
                  "boolean",
                  "null"
                ]
              }
            },
            "additionalProperties": false
          }
        },
        "keys": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name",
              "value"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "value": {
                "type": "string"
              },
              "comment": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        },
        "target": {
          "type": "string"
        },
        "command": {
          "type": "string"
        },
        "phony": {
          "type": "boolean"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "const": "file-create"
              }
            }
          },
          "then": {
            "required": [
              "content",
              "overwrite"
            ],
            "properties": {
              "content": {},
              "overwrite": {
                "const": false
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "file-append"
              }
            }
          },
          "then": {
            "required": [
              "lines",
              "ensureNewline"
            ],
            "properties": {
              "lines": {},
              "ensureNewline": {}
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "file-copy"
              }
            }
          },
          "then": {
            "required": [
              "sourcePath",
              "overwrite"
            ],
            "properties": {
              "sourcePath": {},
              "overwrite": {
                "const": false
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "package-json-script"
              }
            }
          },
          "then": {
            "required": [
              "scriptName",
              "scriptValue"
            ],
            "properties": {
              "scriptName": {},
              "scriptValue": {}
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "json-edit"
              }
            }
          },
          "then": {
            "required": [
              "edits"
            ],
            "properties": {
              "edits": {}
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "env-key-add"
              }
            }
          },
          "then": {
            "required": [
              "keys"
            ],
            "properties": {
              "keys": {}
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "makefile-target"
              }
            }
          },
          "then": {
            "required": [
              "target",
              "command",
              "phony"
            ],
            "properties": {
              "target": {},
              "command": {},
              "phony": {}
            }
          }
        }
      ],
      "additionalProperties": false
    }
  },
  "additionalProperties": true
}