All contracts

Diagnostics and remediation / JSON Schema

Workspai Doctor Workspace Evidence

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

Schema version
doctor-workspace-evidence-v1
Contract path
contracts/doctor-workspace-evidence.v1.json
Publication
json-schema, embedded-type
Defined fields
217
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-last-run.jsondoctor-workspace-evidence-v1
workspai doctor workspace --json

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
cachePathstring | nullNoDefines the cachepath value at this contract boundary.
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: "workspace"
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
projectsarrayYesDefines the projects value at this contract boundary.
projects[].dependencyAuditreferenceNoDefines the dependencyaudit value at this contract boundary.ref: #/$defs/dependencyAudit
projects[].diagnosisreferenceNoDefines the diagnosis value at this contract boundary.ref: https://workspai.dev/schemas/workspace-intelligence/doctor-diagnosis.v1.json
projects[].graphDiagnosisreferenceNoDefines the graphdiagnosis value at this contract boundary.ref: https://workspai.dev/schemas/workspace-intelligence/doctor-graph-diagnosis.v1.json
projects[].probesarrayNoDefines the probes value at this contract boundary.
projects[].probeSummaryreferenceNoDefines the probesummary value at this contract boundary.ref: #/$defs/probeSummary
projects[].repairCapabilitiesarrayNoDefines the repaircapabilities value at this contract boundary.
projects[].verdictenumNoDefines the verdict value at this contract boundary.enum: passed, attention, blocked
projectScanCachedbooleanNoDefines the projectscancached value at this contract boundary.
projectScanSignaturestringNoDefines the projectscansignature value at this contract boundary.
schemaVersionstringYesDefines the schemaversion value at this contract boundary.const: "doctor-workspace-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.contradictionFindingsintegerNoDefines the contradictionfindings value at this contract boundary.minimum: 0
summary.countsreferenceNoDefines the counts value at this contract boundary.ref: #/$defs/counts
summary.hasSystemErrorsbooleanYesDefines the hassystemerrors value at this contract boundary.
summary.projectAdvisoryWarningProjectsintegerNoDefines the projectadvisorywarningprojects value at this contract boundary.minimum: 0
summary.projectAdvisoryWarningsintegerNoDefines the projectadvisorywarnings value at this contract boundary.minimum: 0
summary.scopeProvenanceobjectNoDefines the scopeprovenance value at this contract boundary.additionalProperties: true
summary.totalIssuesintegerYesDefines the totalissues value at this contract boundary.minimum: 0
summary.totalProjectsintegerYesDefines the totalprojects value at this contract boundary.minimum: 0
summary.unknownFindingsintegerNoDefines the unknownfindings value at this contract boundary.minimum: 0
summary.verdictenumNoDefines the verdict value at this contract boundary.enum: passed, attention, blocked
systemobjectNoDefines the system value at this contract boundary.additionalProperties: true
workspaceNamestringNoDefines the workspacename value at this contract boundary.
workspacePathstringYesDefines the workspacepath value at this contract boundary.minLength: 1

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-workspace-evidence.v1.json",
  "title": "Workspai Doctor Workspace Evidence",
  "type": "object",
  "required": [
    "schemaVersion",
    "evidenceType",
    "generatedAt",
    "workspacePath",
    "summary",
    "projects"
  ],
  "properties": {
    "schemaVersion": {
      "const": "doctor-workspace-evidence-v1"
    },
    "evidenceType": {
      "const": "workspace"
    },
    "generatedAt": {
      "type": "string",
      "format": "date-time"
    },
    "workspacePath": {
      "type": "string",
      "minLength": 1
    },
    "workspaceName": {
      "type": "string"
    },
    "projectScanCached": {
      "type": "boolean"
    },
    "projectScanSignature": {
      "type": "string"
    },
    "cachePath": {
      "type": [
        "string",
        "null"
      ]
    },
    "healthScore": {
      "$ref": "#/$defs/healthScore"
    },
    "evidenceFreshness": {
      "$ref": "#/$defs/evidenceFreshness"
    },
    "system": {
      "type": "object",
      "additionalProperties": true
    },
    "projects": {
      "type": "array",
      "items": {
        "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",
      "required": [
        "totalProjects",
        "totalIssues",
        "hasSystemErrors"
      ],
      "properties": {
        "counts": {
          "$ref": "#/$defs/counts"
        },
        "totalProjects": {
          "type": "integer",
          "minimum": 0
        },
        "totalIssues": {
          "type": "integer",
          "minimum": 0
        },
        "projectAdvisoryWarningProjects": {
          "type": "integer",
          "minimum": 0
        },
        "projectAdvisoryWarnings": {
          "type": "integer",
          "minimum": 0
        },
        "verdict": {
          "enum": [
            "passed",
            "attention",
            "blocked"
          ]
        },
        "blockingFindings": {
          "type": "integer",
          "minimum": 0
        },
        "advisoryFindings": {
          "type": "integer",
          "minimum": 0
        },
        "unknownFindings": {
          "type": "integer",
          "minimum": 0
        },
        "contradictionFindings": {
          "type": "integer",
          "minimum": 0
        },
        "hasSystemErrors": {
          "type": "boolean"
        },
        "scopeProvenance": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "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
}