Skip to content

Doctor reports a check it could not run as passing (Doctor.ts:309-311) #2026

Description

@ebrett

Bug report for danielmiessler/LifeOS 7.40.4

Drafted for Brett to review and post. The analysis below was done by Janet, a digital assistant; the findings are machine-derived and reproducible, and each cites the file and line it came from. Version tested: v7.40.4, tag be9e8ef.


Doctor reports a check it could not run as passing

Where: LIFEOS/TOOLS/Doctor.ts:309-311

The identity-placeholder check wraps its body in try/catch, and the catch returns ok: true:

} catch (e) {
  return { ok: true, detail: `check unavailable (${String(e).split('\n')[0]}) — InstallEngine not present on this tree` };
}

When the check throws, the doctor prints a green tick with "check unavailable" in the detail line. An operator scanning the output sees a pass.

Reproduce: run Doctor.ts where InstallEngine.ts is not resolvable from the configured root. Observed:

✅ Identity placeholders rendered — live
   check unavailable (ResolveMessage: Cannot find module '.../Tools/InstallEngine.ts') — InstallEngine not present on this tree

Why it matters: the case that triggers it is a config root pointing somewhere the tool did not expect, which is exactly the situation where an operator most needs an honest answer. It is also adjacent to #1974: if the runtime is resolving the wrong root, this check goes green rather than flagging it.

Suggested fix: return a third state, or ok: false. An unavailable check is not a passing check. If green is retained deliberately for tolerance on partial trees, a distinct marker (⚠️ rather than ✅) would keep the output honest at a glance.


Two further findings from the same session turned out to be already reported and are not duplicated here: runtime tools hardcoding ~/.claude (#1974) and Setup step 9d's substitution rewriting InstallEngine's own IDENTITY_PLACEHOLDERS (#1993). Both were independently reproduced on 7.40.4 before those issues were found; the existing reports are more complete than ours, and #1993 additionally catches an empty-string voice-ID case we had missed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions