Troubleshooting and FAQ

This page maps Dalo status and doctor codes to concrete recovery steps. Start with:

dalo status
dalo doctor

Use --json when scripting recovery:

dalo --json status
dalo --json doctor

Fast Recovery Paths

Symptom or code What happened Recovery
blocked_by_same_name_skill, unmanaged_same_name_blocker, sync blocked with real unmanaged entry exists at target slot A real folder already occupies the target slot Dalo wanted to link. Keep it intentionally with dalo resolve keep <id> (undo with dalo resolve unkeep <target>:<slot>), adopt it with dalo adopt <id>, or adopt and replace it with dalo adopt <id> --replace.
pending_approval A skill would become active, but no approval rule covers it. Review the skill, then run dalo approve skill <source-id>:<skill> (or grant a reviewed source/author/org scope), or set the source trusted = true if the whole source is trusted. Run dalo status again.
error security audit blocked ... A selected or trusted skill has an unaccepted high or critical finding. Trust skips per-skill approval; it does not bypass the security gate. Inspect it with dalo audit <source-id>:<skill>. If the risk is understood, record a reason with dalo audit <source-id>:<skill> --accept-risk "<reason>", or use dalo approve skill <source-id>:<skill> --accept-risk "<reason>" for a catalog skill. Then rerun dalo sync.
dirty_source A Git-backed source has local edits. Team sources block refresh when dirty. Commit, stash, discard, or promote the edits outside Dalo. Then run dalo sync.
sync reason scan degraded, output degraded source: Dalo could not safely scan an enabled source. Recorded owned links are preserved so an incomplete scan cannot delete them. Restore or re-clone the source checkout, or remove the source with dalo source remove <id>. Do not adopt or delete the preserved target link as an unmanaged blocker.
lock drift Live resolution differs from the last lock.toml. Run dalo status to inspect the drift, then dalo sync when the change is expected.
source_provenance_mismatch A manifest-derived catalog's declaration, generated config, checkout HEAD, or source-lock.toml pin disagree. Inspect dalo source list, review the declaring team's dalo.toml, then run dalo sync to reconcile an expected change. Restore the reviewed manifest or checkout first when the difference is unexpected.
StoreLocked, error text another dalo operation is running Another Dalo command currently owns .lock, or a stale lock file remains. Wait for the other command. If no Dalo process is running, inspect and remove the stale .lock file in the store.
owned_path_real_entry Dalo has an ownership record, but a real file or directory now exists at that path. Run dalo resolve remove-owned <id>. Dalo drops the ownership record and leaves the real entry intact.
missing_owned_symlink, broken_owned_symlink, foreign_owned_symlink A recorded owned symlink is missing, broken, or points outside the store. Run dalo resolve remove-owned <id>, then dalo sync if the skill should be linked again.
instruction_block_drift A managed instruction block is missing, malformed, stale, or points to a missing pack. Re-render with dalo instructions enable <pack> <file>, or disable with dalo instructions disable <pack> <file> if no longer wanted.
selected_removed from catalog drift A selected catalog skill disappeared upstream. Unselect it with dalo source select <catalog> --unselect <skill>, or wait for a catalog fix before syncing.
catalog drift A catalog's upstream inventory differs from its pinned snapshot. Run dalo source refresh <id> to inspect it. Add --check for CI, or preview the reviewed update with dalo --dry-run source refresh <id> --advance before applying it without --dry-run.
autosync_disabled Dalo has install metadata, but the native scheduler no longer reports the job enabled. Reinstall idempotently with dalo autosync install --schedule <hourly|daily|weekly>, or remove it with dalo autosync uninstall.
autosync_run_blocked The latest scheduled run encountered a dirty source, malformed state, pending approval, audit finding, or target conflict. Run dalo autosync status for the durable reason, resolve it with the suggested normal Dalo command, then retry or wait for the next schedule.
autosync_run_stale A scheduled run is still marked running well past its schedule interval, so it was likely interrupted (crash or power loss) before recording an outcome. Run dalo autosync status to confirm, then trigger a fresh run (dalo sync) or wait for the next schedule to overwrite the state.
autosync skipped Another interactive Dalo process held the store lock. No action is normally required. The next scheduled run retries without contention.

Status Codes

Resolver Diagnostics

These appear in status.resolution.diagnostics and in related text output.

Code What it means Recovery
pending_approval A would-be winner is held until locally approved. Run dalo approve skill <source-id>:<skill>, trust the source, or leave it pending.
local_override A local skill wins over another managed source for the same slot. No action required if intentional. Rename/remove the local skill if the team/catalog skill should win.
shadowed A lower-priority managed skill lost to another managed skill with the same slot. No action required if expected. Adjust source priorities or rename one skill if the loser should be active.
required_expanded A selected catalog skill pulled in a same-catalog dependency through requires. No action required if the dependency is expected. Review the dependency before syncing.
cross_source_require A requires entry points at another source. Dalo reports it but does not auto-install across sources. Select or add the dependency explicitly, or change the skill metadata to use a same-source requirement.
required_blocked A skill was held back because a required closure cannot be linked. Use the closure block reason below to fix the dependency, approval, shadowing, or target conflict.
blocked_winner_alternate_available A higher-precedence winner was blocked by its required closure while an approved lower-precedence alternate for the same slot remains shadowed. This advisory does not auto-promote the alternate or itself make --check fail; the related required_blocked diagnostic does. Resolve the winner's blocked requirement(s), or give the approved alternate higher precedence with a lower dalo source priority value.
legacy_bare_approval An older skill approval names only the skill and is no longer accepted because it is ambiguous across sources. Re-grant it with dalo approve skill <source-id>:<skill> as suggested by the diagnostic.
audit_failed Dalo could not complete the security audit for one active skill. The owning source is degraded and existing owned links are preserved until the audit succeeds. Inspect status.audit_failures, restore the reported path or permissions, then rerun dalo status or dalo sync.

Required-Closure Block Reasons

These appear in status under blocked skills.

Reason What it means Recovery
missing The required reference exists in no enabled source. Add/select the required skill, enable its source, or remove/fix the requires entry.
pending approval The required skill exists but is not approved. Approve the required skill or its source/owner.
shadowed but not satisfied The required skill is shadowed by a different winner. Adjust priorities, rename skills, or require the winner instead.
blocked by a same-name target entry The required skill would be blocked by an unmanaged target entry. Adopt, replace, rename, or keep the unmanaged entry.
unlinked The required skill exists but is otherwise not linkable. Inspect dalo status and resolve the related unlinked/blocking reason first.

Unlinked Skills

Reason What it means Recovery
shadowed Another managed source won the same slot name. No action required if expected. Change source priority, remove/rename one skill, or select a different catalog skill if the loser should win.

Lock Drift

Lock drift compares the previous lock.toml with the current live resolution.

Code What it means Recovery
source_commit_changed A source commit changed since the lock was written. Review source changes, then run dalo sync to write a fresh lock.
source_removed A source from the lock is no longer configured. Run dalo sync to reconcile, or restore the source config.
source_added A new source is configured but absent from the lock. Run dalo sync after reviewing the source.
active_removed A previously active skill is no longer active. Review why it disappeared, then run dalo sync if expected.
active_added A skill is now active but was not active in the lock. Review the skill and approvals, then run dalo sync.
unlinked_removed A previously unlinked skill is no longer unlinked. Usually no action; run dalo sync if the new resolution is expected.
unlinked_added A skill is now unlinked. Inspect the reason, usually shadowing, then adjust priority/selection/name if needed.
pending_approval_removed A previously pending skill is no longer pending. Usually no action; run dalo sync if the new resolution is expected.
pending_approval_added A skill now needs approval. Approve it or leave it pending.

Inventory Warnings

Code What it means Recovery
malformed_frontmatter SKILL.md frontmatter could not be parsed. Fix the YAML frontmatter fences and fields, then rerun dalo status.
invalid_slot_name Frontmatter name or folder name is not a portable slot name. Rename the folder or frontmatter name to a lowercase portable token.
duplicate_slot_name One source contains multiple skills with the same slot name. Rename one skill or split the source.
unreadable_path Dalo could not read a skill path. Fix filesystem permissions, broken links, or the source checkout.
skipped_symlink Dalo skipped a symlinked directory or an out-of-tree SKILL.md metadata symlink to keep source discovery and skill identity inside a bounded checkout. Replace it with a real in-tree path, or remove the symlink.

For a local source, make the repair in its local source path. For Git-backed team or catalog sources, do not edit Dalo's managed checkout: fix the upstream repository, push the change, then run dalo sync.

Agent Inventory Warnings

These appear in status.agent_inventory_warnings, dalo agent list, and make dalo status --check fail.

Code What it means Recovery
invalid_agent_package AGENT.md is malformed, misses required frontmatter such as schema_version: 1, or exceeds a safety bound. Fix the frontmatter and package layout, then rerun dalo status.
unsafe_agent_package_entry The package contains a symlink or unsupported special filesystem entry. Replace it with a real in-tree file or directory.
duplicate_agent_slot_name Two packages in one source declare the same canonical agent name. Rename one package or split the source.
unreadable_agent_path Dalo could not read an agent package or one of its entries. Restore the checkout or fix permissions, then rerun dalo status.

Target Scan Warnings

Code What it means Recovery
unreadable_target_dir A linked target directory or child entry could not be scanned. Fix permissions or remove the unreadable entry, then rerun dalo status or dalo doctor.

Sync Operations

dalo sync --json reports materialization operations.

Kind/status What it means Recovery
create / applied Dalo created an owned symlink. No action.
relink / applied Dalo moved an owned symlink to the desired store path. No action.
remove / applied Dalo removed a no-longer-desired owned symlink. No action.
drop_record / applied Dalo dropped stale ownership state without touching a real entry. No action unless the skill should be linked again; then run dalo sync.
conflict / blocked, reason says a real entry or foreign symlink occupies the slot Dalo refused to touch unmanaged or foreign content. Adopt, keep, rename, or remove the blocker, then rerun dalo sync.
conflict / blocked, reason contains source <id> scan degraded Dalo preserved a recorded owned link because its source could not be scanned safely. Restore or re-clone the source checkout, or run dalo source remove <id>. Leave the preserved target link in place.
any kind / planned --dry-run showed what would happen. Rerun without --dry-run if the plan is correct.
any kind / existing The filesystem already matched the desired state. No action.

Catalog Drift

Code What it means Recovery
new_available Upstream added an unselected catalog skill. Inspect/select it if wanted.
selected_changed A selected skill changed content or metadata upstream. Review dalo --dry-run source refresh <id> --advance, then apply the reviewed pin.
selected_moved A selected skill moved but still has a stable ID. Review the advance plan. A real advance canonicalizes the selection to the stable ID and relinks owned targets transactionally.
selected_removed A selected skill no longer exists upstream. Unselect it, restore it upstream, or keep the old pin until resolved.

Instruction Block Drift

Kind What it means Recovery
missing The target file or managed block is missing. Re-render with dalo instructions enable <pack> <file>, or disable the pack if no longer wanted.
malformed Managed block markers are duplicated, reversed, unreadable, or malformed. Re-run dalo instructions disable <pack> <file> to remove the stale lock entry while leaving the malformed target untouched, then fix or remove the markers before re-enabling.
stale The block exists but no longer matches the pack body. Re-render with dalo instructions enable <pack> <file>.
source_missing The active lock entry points to a pack that cannot be read. Restore the pack file or disable the pack.

Doctor Findings

Doctor includes ok and info codes as well as warnings/errors. Codes not listed as requiring action are informational.

Code Severity Recovery
store_missing error Run dalo init or pass the right --store.
store_layout_missing error Run dalo init to recreate missing store paths.
config_invalid error Fix config.toml or restore it from version control/backups.
state_invalid error Run dalo init; corrupt state is backed up and regenerated. Relink targets afterward if needed.
lock_invalid error Inspect and repair lock.toml, or restore a known-good backup before running dalo sync. Do not remove it: it is the sole record of active instruction packs and their managed target blocks.
source_lock_invalid error Inspect or restore source-lock.toml; do not sync until the intended catalog pins are understood.
source_provenance_mismatch error Compare dalo source list with the declaring team's dalo.toml, then run dalo sync after restoring the intended declaration or checkout.
source_store_debris warning Inspect and remove the reported unconfigured source content or interrupted-operation directory when it is no longer needed.
approvals_invalid error Fix approvals.toml; doctor suppresses approval-dependent warnings while it is invalid.
git_missing error Install Git and ensure git is on PATH.
local_git_missing error Run dalo init to restore the local source Git repository.
target_missing warning Recreate the directory or run dalo target link <target> [path].
cloud_synced_target warning Prefer a non-cloud-synced target path if sync software interferes with symlinks.
foreign_owned_symlink error Run dalo resolve remove-owned <id>.
broken_owned_symlink error Run dalo resolve remove-owned <id>, then dalo sync if it should be recreated.
owned_path_real_entry error Run dalo resolve remove-owned <id>; the real entry stays in place.
missing_owned_symlink warning Run dalo resolve remove-owned <id>, then dalo sync if needed.
owned_symlink_repointed error Run the suggested dalo resolve remove-owned <id> command, then dalo sync if the recorded skill should be recreated.
dirty_source error for team/catalog, warning for local The checkout has local edits to tracked files (untracked files such as .DS_Store no longer count). Commit, stash, discard, or intentionally keep them.
source_missing error The enabled source's checkout is missing from disk or could not be read. Restore/re-clone it (or fix its permissions), or run dalo source remove <id>.
source_inventory_degraded error For listed inventory warnings, follow the reported repair hint and then run dalo sync. If the inventory could not be scanned at all, inspect the reported source path and error, restore its checkout or permissions, and rerun dalo doctor; dalo status provides detail but is not itself a repair. Existing links are preserved until the source can be scanned safely.
pending_approval warning Add the needed approval or leave the skill pending.
required_closure_blocked error Resolve the closure block reason shown in the message.
security_audit_blocked error An active skill has an unaccepted high/critical audit finding; sync will refuse to link it. Review with dalo audit <ref> and accept the risk or remove/replace the skill.
security_audit_failed warning An active skill's deterministic security audit could not be completed (for example unreadable content). Investigate with dalo audit <ref>.
tool_pending_approval warning Review the exact tool contract, then run the reported dalo approve tool <source-ref> command.
tool_hash_drift error Inspect the changed contract with the reported dalo tool audit <source-ref> command. Approve it again only after review.
tool_runtime_missing error Install or restore the runtime named in the finding, then run dalo status to recheck the tool.
tool_platform_mismatch warning Use a platform supported by the tool contract, or change the selected plugin/tool configuration.
tool_approval_revoked warning Review the immutable tool bytes and run the reported dalo approve tool <source-ref> command if execution is still intended.
tool_audit_failed error Run the reported dalo tool audit <source-ref> command; repair the immutable staging or approval problem before using the tool.
tool_ready ok The tool's exact execution contract is approved and staged; no recovery is required.
tool_staging_debris warning After confirming no sync or approval is running, remove the reported .tool-stage-* directory; it was never approved or promoted.
hook_pending_approval warning/error Review the hook and its referenced tool. Run the reported dalo approve hook <source-ref> command when the hook itself is pending; also resolve any provider blocker in the finding.
hook_hash_drift error Inspect the changed contract with the reported dalo hook show <source-ref> command, then approve the reviewed hook again.
hook_tool_unavailable error Review and approve the referenced tool with the reported dalo approve tool <source-ref> command.
hook_ready ok The hook and its referenced tool are independently approved; no recovery is required.
hook_provider_disabled warning Enable hook projection for the reported provider/target, or keep the hook managed only if native projection is not required.
hook_provider_unverified error Install or update the reported provider runtime to a supported, verifiable version, then run dalo status.
hook_native_conflict error Restore the Dalo-owned native sidecar or move conflicting provider content out of the reported target path.
plugin_projection_blocked error Run dalo plan and resolve the required component blocker before projecting the plugin.
plugin_projection_conflict error Restore the Dalo-owned native plugin link or move foreign provider content out of the target path.
generated_delivery_invalid error Inspect the reported generated cache path. Move a corrupt hash directory out of generated/sha256, then rerun dalo sync so the approved derivation can be rebuilt.
generated_delivery_staging_debris warning Inspect and remove the reported .delivery-stage-* directory after confirming no sync is running; staging debris was never activated.
instruction_pack_topic_overlap warning Rename topics or disable one overlapping pack if the overlap is not intended.
instruction_block_drift error Re-render or disable the pack.
autosync_installed ok The native scheduler is installed and enabled.
autosync_not_installed info Install it with dalo autosync install if recurring synchronization is desired.
autosync_disabled warning Reinstall with dalo autosync install, or remove stale metadata with dalo autosync uninstall.
autosync_executable_missing warning The executable path recorded during installation is missing or no longer executable. Reinstall with dalo autosync install from a persistent launcher.
autosync_run_blocked warning Inspect dalo autosync status, resolve its recorded reason, and retry.
autosync_run_stale warning A run is still running long after it started; it was likely interrupted. Trigger a fresh dalo sync or wait for the next schedule.
autosync_state_invalid error Run dalo autosync uninstall to quarantine malformed or newer-schema autosync.toml and clean reconstructed scheduler artifacts, then reinstall. Repair or remove malformed autosync-run.toml separately.
unreadable_target_directory warning Fix permissions or remove unreadable entries.
unmanaged_same_name_blocker error Adopt, keep, rename, or remove the unmanaged blocker.
stale_protected_skill warning Relink the target if it moved, or remove the stale marker with the suggested dalo resolve unkeep command.
protected_skill_kept info The unmanaged slot was intentionally kept; no recovery is required.
store_exists, store_layout_ok, config_ok, state_ok, lock_ok, approvals_ok, git_available, local_git_ok, target_exists, duplicate_target_directory, owned_symlink_ok, source_clean ok/info No recovery required.

FAQ

Why did sync not overwrite my folder?

Dalo treats real folders in target directories as user/project content. Use dalo adopt <id> to copy the folder into the local source, dalo adopt <id> --replace to replace it with an owned symlink, or dalo resolve keep <id> to leave it intentionally unmanaged without failing checks. Undo that decision with dalo resolve unkeep <target>:<slot>.

How do I approve a pending skill?

Review the reported source-qualified skill, then run:

dalo approve skill <source-id>:<skill>

Use dalo approve list to inspect existing rules and the user reference for broader source, author, and organization scopes. Rerun dalo status before syncing.

How do I recover from a security-audit block?

An audit block means deterministic or optional semantic review found an unaccepted high or critical risk. Semantic review is optional and can add findings, but a review with no additional findings is not an approval or safety guarantee. This applies to trusted team sources too: trust removes the catalog-style approval requirement, but it never bypasses the security gate.

Inspect the exact source-qualified skill first:

dalo audit <source-id>:<skill>

If the behavior is expected and you accept the risk, record a specific reason:

dalo audit <source-id>:<skill> --accept-risk "reviewed pinned installer"

For a catalog skill that still needs approval, combine both decisions:

dalo approve skill <source-id>:<skill> \
  --accept-risk "reviewed pinned installer"

Then rerun dalo sync. Acceptance is bound to the source, exact content, engine versions, coverage, and findings; a relevant change invalidates it and requires a fresh review.

How do I recover from a dirty team source?

Go to the checkout shown by dalo doctor, then commit, stash, or discard the edits with normal Git commands. Dalo does not decide this for you because the edits may be user or agent work.

How do I remove Dalo completely?

Use the uninstall guide: Uninstall Dalo.

Source: docs/troubleshooting.md