Skip to content

Diagnostics reference

Every problem Sigil reports carries a code, and every code names exactly one failure. When sigil validate, sigil pack or sigil sign prints something like

error SIG0122: build.source './payload' resolves to 'C:\work\payload', which does not exist. ...
  see: https://docs.sigil.build/diagnostics/#sig0122

the see: link lands on this page, at that code's entry.

One code, one meaning. Codes are never reused for a second failure, even across the CLI and the installer runtime, because a code's whole job is to identify one problem well enough to document it in one place. Four numbers once meant two unrelated things each; that is why the signing band was renumbered before any release shipped.

Severity is not encoded in the number. Most of these are errors, but some are warnings that let the pack continue with a feature omitted — each entry below says which.

The bands

Band Subject Raised by
SIG00xx Loading and schema validation validate, pack
SIG01xx Packaging — the host or the toolchain, not the manifest pack
SIG02xx parameters: and install_steps: validate, pack
SIG024xSIG031x The installer: block validate, pack
SIG029x Localization validate, pack
SIG032x Updates and network trust pack and update runtime
SIG04xx Signing sign

SIG00xx — loading and schema

SIG0001 — the manifest is not valid YAML

The file could not be parsed at all: it is empty, its root is not a mapping, or the YAML itself is malformed (most often indentation, or a value containing : that needed quoting).

Nothing else can be checked until this passes — the schema, the step catalog and every other rule below run against a parsed document.

SIG0002 — manifest file not found

The path given to the command does not exist. sigil defaults to sigil.yaml in the current directory when no path is passed.

SIG0003 — spec version mismatch

Reserved for a spec: value this build does not support.

Not currently emitted. The code is declared and nothing raises it today; the supported spec value is enforced by the schema instead, which reports SIG0010.

SIG0010 — the manifest violates the schema

The document parsed as YAML but broke a rule in sigil-schema.json: an unknown property, a missing required one, a value of the wrong type, or a string outside its allowed set.

The message names the offending path. The manifest reference is generated from that same schema, so it is the authority on what a block accepts.

SIG0020 — environment variable is not set

The manifest interpolates ${ENV_VAR} and the variable is not present in the environment running the command. Typical in CI, where the variable exists locally but was never added to the job.

SIG0050 — missing optional field

Reserved for informational notices about optional fields left unset.

Not currently emitted.


SIG01xx — packaging

Nothing in this band is the manifest's fault. The document is valid; the machine cannot honour it.

SIG0100 — MSIX packaging requires Windows

formats: [msix] on a non-Windows pack host. MSIX is produced by Windows SDK tooling with no cross-platform equivalent.

SIG0101 — Windows SDK not found

MSIX packaging needs MakeAppx.exe from the Windows 10/11 SDK, and it is not installed. Install it from https://aka.ms/winsdk.

SIG0110 — MakeAppx failed

MakeAppx.exe exited non-zero. The message carries its exit code and output — that output, not this page, is what explains the failure.

SIG0111 — Windows App Certification Kit is not installed

Warning, not an error. The manifest asked for WACK validation (runWack: true) and appcert.exe is absent, so validation was skipped. The package was still produced.

SIG0112 — WACK reported failures

The App Certification Kit ran and found problems. The message names the report file; open it for the specifics.

SIG0120 — the installer host runtime is missing

formats: [exe] needs an AOT-published installer host staged at runtimes/<rid>/SigilBuild.Installer.Host.exe next to the CLI, and it is not there. A release archive ships it; a development tree needs scripts/publish-installer-runtime.ps1 to have been run.

SIG0121 — the exe format requires a Windows pack host

Producing a Setup.exe stamps the payload into the host executable through the Win32 resource-update APIs (BeginUpdateResourceW), which exist only on Windows. Other declared formats still pack; the exit code reports the unmet request.

SIG0122 — build.source names a directory that does not exist

build.source is the one manifest field the schema cannot check: it is an assertion about the filesystem.

Relative paths resolve against the manifest's own directory, not the working directory. That is the usual cause — running sigil pack from elsewhere, or pointing at a directory one level off.

Packing is refused rather than continued. An absent source yields a package with no payload, and until this check existed pack printed an artifact path and exited 0; the failure surfaced later, on the end user's machine, as a failed install step and a rollback.


SIG02xx — parameters and install steps

SIG0210 — unknown parameter type

A parameters.<name>.type value outside the supported set.

SIG0220 — parameter validation failed

A parameter's default or supplied value failed its own declared constraints — pattern, range, or allowed values.

SIG0230 — unknown install step type

install_steps[].type is not a step Sigil knows. See the install steps guide for the catalog.

SIG0231 — unknown field on an install step

Warning, not an error. The step carries a field its type does not define, and that field is ignored. Almost always a typo or a field borrowed from a different step type — worth fixing, because the behaviour you wrote is not the behaviour you will get.

SIG0232 — a required step field is missing

The step omits something its type requires, most commonly id.

SIG0233 — a step field holds a value outside its allowed set

A bad enum — for example an unrecognized trigger or run_level on scheduled_task_create.

Fatal by design: there is no safe fallback for an enum value nobody defined, and guessing one would install something other than what the manifest says.

SIG0234 — a parameter's source: block is invalid

A dynamic-options source: block is missing required fields. All of url, items_path, value_property and label_property are needed for the wizard to populate the control at install time. See parameters.

SIG0235 — http_download URL is not HTTPS

Refused at pack time. A downloaded payload is executed on the user's machine, frequently elevated; a cleartext origin makes that an injection point.

SIG0236 — http_download has no integrity checksum

Refused at pack time. HTTPS authenticates the server, not the bytes you expected from it. Declare the sha256.


SIG024x — installer.screens

SIG0240 — a screen field references an unknown parameter

A custom screen binds a parameter that is not declared. Add it to the top-level parameters: block.

SIG0241 — a screen's when expression is invalid

The expression failed to parse. The message carries the reason; the grammar is documented in conditional installs.

SIG0242 — a screen title or subtitle has an unterminated token

A { was opened and never closed. Left alone, the brace would be rendered literally to the user.


SIG025x–SIG031x — the installer: block

SIG0250 — the licence file could not be read

Warning, not an error. The file named by installer.license is missing, unreadable or empty at pack time. The pack succeeds and the License screen is omitted — so check for this if a wizard you expected to show a licence does not.

SIG0260 — invalid installer.scope

Warning, not an error. The value is outside {user, machine, auto} and the parser falls back to auto. The schema enum is the hard gate; this covers the paths that reach the parser directly.

SIG0270 — invalid installer.vars entry

A variable expression is malformed, or the variables form a reference cycle.

A cycle is fatal: there is no evaluation order that resolves it, so there is nothing sensible to install.

SIG0280 — invalid prerequisite

A installer.prerequisites entry is missing name, detect or source, or an https:// source omits the required sha256. A bundled payload:// source needs no checksum — the package's own signature covers it. See prerequisites.

SIG0300 — invalid custom component

A component under installer.options.components has a name that is not a bare identifier, collides with a built-in component or a declared parameter, duplicates another custom component, or omits its required label.

SIG0310 — this step requires machine scope

Three steps touch machine-global state: scheduled_task_create, com_register and firewall_rule. If any of them appears anywhere in the manifest — install_steps, pre_install, post_install, uninstall, or any installer.hooks phase — then installer.scope must be machine.

Note that auto also fails this check: it resolves to per-user scope by default, and a per-user install cannot write machine-global state. Set scope: machine explicitly if these steps are intended.


SIG029x — localization

SIG0290 — a localized string has no English value

Fatal. Every runtime language fallback bottoms out at en, so a map without an en key has no defined rendering — the string would ship blank. See localization.

SIG0291 — invalid language tag

A key in a localized map is not a language tag Sigil recognizes.

SIG0292 — a localized value is not a plain string

A language key holds a nested sequence or mapping instead of a scalar. Fatal for the same reason as SIG0290: the value would silently collapse to an empty string, one language at a time.


SIG032x — updates and network trust

SIG0320 and SIG0321 are raised at update runtime, inside the installed application's update check. The rest are raised at pack time, against the manifest.

SIG0320 — malformed channel manifest

The fetched update manifest failed to parse, is missing version, packageUrl or sha256, declares a non-HTTPS packageUrl, or declares a schemaVersion this build does not support.

SIG0321 — channel manifest signature is invalid

The detached ECDSA P-256 signature, fetched from manifestUrl + ".sig", does not verify against updates.signingKey. The update is refused. See updates.

SIG0322 — the web installer's package URL could not be resolved

sigil pack --payload web was given no --package-url, an empty one, or one that is not https://. Pack refuses rather than stamping a stub whose download step could never succeed.

SIG0323 — a parameter source.url is not HTTPS

Values fetched from that URL become parameter values, and parameters are substituted into step fields — paths, registry coordinates, command arguments — that execute elevated. A cleartext origin is therefore an injection point into a privileged run.

Re-checked at install time as well, because a URL built from tokens is not knowable at pack time.

SIG0324 — updates.manifestUrl is not HTTPS

The schema constrains only the URI shape, so the scheme is gated here. Code execution is still gated by the channel-manifest signature, so the exposure is cleartext leakage of app id, version and channel, plus a reliable update-suppression denial of service.

SIG0325 — updates.signingKey is not a valid public key

The value must be a base64-encoded X.509 SPKI DER of an ECDSA P-256 public key.

Unvalidated, a private-key file path packs cleanly and produces an installer whose every future update dies at SIG0321 — failing closed, but only after it has shipped.

SIG0326 — invalid installer.require_signed_downloads

The value is outside the declared policy set. That policy governs whether a binary pulled off the network this run must be Authenticode-valid before it is launched elevated, so an unrecognized value is refused rather than quietly treated as the default.


SIG04xx — signing

Signing has its own band because it fails for reasons that have nothing to do with the manifest.

SIG0400 — local signing requires Windows

signtool.exe is a Windows tool. Use Azure Trusted Signing, or sign on a Windows host. See signing.

SIG0401 — the signing certificate is invalid

The certificate could not be loaded or does not validate — wrong password, wrong format, expired, or no private key attached.

SIG0402 — signtool failed

signtool.exe ran and exited non-zero. Its output carries the reason.

SIG0410 — the Azure signing job failed

The remote signing request was submitted and came back rejected.

SIG0411 — Azure signing failed

Signing through Azure Trusted Signing could not be completed — most often credentials, endpoint or certificate-profile configuration. All six settings must be present and refer to the same account.