{"record":{"id":"049678732c8c4d7d","repo":"lima-vm/lima","slug":"field-probe-d-file-digest-support-is-not-yet-i","errorCode":null,"errorMessage":"field `probe[%d].file.digest` support is not yet implemented","messagePattern":"field `probe\\[(.+?)\\]\\.file\\.digest` support is not yet implemented","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/limayaml/validate.go","lineNumber":295,"sourceCode":"\tneedsContainerdArchives := (y.Containerd.User != nil && *y.Containerd.User) || (y.Containerd.System != nil && *y.Containerd.System)\n\tif needsContainerdArchives {\n\t\tif len(y.Containerd.Archives) == 0 {\n\t\t\terrs = errors.Join(errs, errors.New(\"field `containerd.archives` must be provided\"))\n\t\t}\n\t\tfor i, f := range y.Containerd.Archives {\n\t\t\terr := validateFileObject(f, fmt.Sprintf(\"containerd.archives[%d]\", i))\n\t\t\tif err != nil {\n\t\t\t\terrs = errors.Join(errs, err)\n\t\t\t}\n\t\t}\n\t}\n\tfor i, p := range y.Probes {\n\t\tif p.File != nil {\n\t\t\tif p.File.URL != \"\" {\n\t\t\t\terrs = errors.Join(errs, fmt.Errorf(\"field `probe[%d].file.url` must be empty during validation (script should already be embedded)\", i))\n\t\t\t}\n\t\t\tif p.File.Digest != nil {\n\t\t\t\terrs = errors.Join(errs, fmt.Errorf(\"field `probe[%d].file.digest` support is not yet implemented\", i))\n\t\t\t}\n\t\t}\n\t\tif p.Script != nil && !strings.HasPrefix(*p.Script, \"#!\") {\n\t\t\terrs = errors.Join(errs, fmt.Errorf(\"field `probe[%d].script` must start with a '#!' line\", i))\n\t\t}\n\t\tswitch p.Mode {\n\t\tcase limatype.ProbeModeReadiness:\n\t\tdefault:\n\t\t\terrs = errors.Join(errs, fmt.Errorf(\"field `probe[%d].mode` can only be %#q\", i, limatype.ProbeModeReadiness))\n\t\t}\n\t}\n\tfor i, rule := range y.PortForwards {\n\t\tfield := fmt.Sprintf(\"portForwards[%d]\", i)\n\t\tif *rule.GuestIPMustBeZero && !rule.GuestIP.Equal(net.IPv4zero) {\n\t\t\terrs = errors.Join(errs, fmt.Errorf(\"field `%s.guestIPMustBeZero` can only be true when field `%s.guestIP` is 0.0.0.0\", field, field))\n\t\t}\n\t\tif rule.GuestPort != 0 {\n\t\t\tif rule.GuestSocket != \"\" {","sourceCodeStart":277,"sourceCodeEnd":313,"githubUrl":"https://github.com/lima-vm/lima/blob/dd909d0973cd84fa35f9e1693181b4585ea616c1/pkg/limayaml/validate.go#L277-L313","documentation":"A probe entry declares a `file.digest`, which is parsed but not yet implemented; probe file verification is currently unsupported.","triggerScenarios":"Calling limactl validate/start/etc. with a probe entry whose `file:` object includes a `digest:` field.","commonSituations":"Copying a file object with digest from `containerd.archives` or `additionalDisks`-style examples into a probe; hoping to verify an integrity-checked probe script.","solutions":["Remove the `digest:` field from the probe's `file` entry","Embed the script inline via `script:` with a `#!` shebang instead of using file+digest"],"exampleFix":"// before\nprobes:\n- file:\n    url: https://example.com/check.sh\n    digest: sha256:abc...\n// after\nprobes:\n- script: |\n    #!/bin/sh\n    echo ok","handlingStrategy":"validation","validationCode":"for i, p := range cfg.Probes {\n    if p.File != nil && p.File.Digest != nil {\n        return fmt.Errorf(\"probe[%d].file.digest is unsupported; remove it\", i)\n    }\n}","typeGuard":"func probeHasDigest(p limatype.Probe) bool {\n    return p.File != nil && p.File.Digest != nil\n}","tryCatchPattern":null,"preventionTips":["Do not add digest to probe.file entries; the feature is unimplemented","Check the lima version's schema docs before using newer fields","Keep probes as inline scripts to avoid file/digest handling entirely"],"tags":["config-validation","probe","unsupported-feature"],"backgroundTag":"unsupported-feature","analyzedSha":"dd909d0973cd84fa35f9e1693181b4585ea616c1","analyzedAt":"2026-09-01T14:24:59.842Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}