Every settings field declares its tier; a value in the wrong file is an error naming
file, key and tier. A field naming a program or affecting a gate cannot be declared
instance. Secrets are references only: {"ref": "<name>"} via WIKITOOL_SECRET_<NAME> or
a user-only secrets file, {"ref": "op://..."} via op read (locked 1Password: exit 42).
The preflight records op as an optional tool. doctor gains one line per tier, docs
verify checks a committed wikitool.json for plaintext secrets, CI resolves a real
op:// value through 1password/load-secrets-action. No feature reads its settings
this way yet; without the two files every other command is unchanged.
Files changed:
- .gitea/workflows/ci.yml
- .gitignore
- AGENTS.md
- CHANGES.md
- INSTALL.md
- VERSION
- docs/explanation/README.md
- docs/explanation/configuration-tiers.md
- docs/how-to/README.md
- docs/how-to/use-1password-for-settings.md
- docs/reference/commands/README.md
- docs/reference/commands/configuration.md
- docs/reference/commands/instance-health.md
- docs/reference/commands/types-instructions-and-docs.md
- docs/reference/configuration.md
- docs/reference/exit-codes.md
- instructions/dev/doc-pull-through.md
- instructions/dev/testing-conventions.md
- instructions/preflight.md
- tools/CONTRACT.md
- tools/README.md
- tools/chemenu/cli.py
- tools/chemenu/cli_contract.py
- tools/chemenu/commands/_util.py
- tools/chemenu/commands/config_cmd.py
- tools/chemenu/commands/docs_verify.py
- tools/chemenu/commands/doctor.py
- tools/chemenu/config.py
- tools/chemenu/config_shapes.py
- tools/chemenu/prerequisites.py
- tools/chemenu/settings.py
- tools/chemenu/tests/conftest.py
- tools/chemenu/tests/test_dist_cmd.py
- tools/chemenu/tests/test_preflight.py
- tools/chemenu/tests/test_preflight_pwsh.py
- tools/chemenu/tests/test_settings.py
- tools/chemenu/toolpaths.py
- tools/preflight.ps1
- tools/preflight.sh
- tools/prerequisites.txt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
5.2 KiB
5.2 KiB
Instance health
A single check of whether this instance is set up and working.
doctor
Check that this instance is correctly configured.
Synopsis
wikitool doctor [--json]
Options
--json Print the checks as JSON
-h, --help Show this message and exit.
Examples
tools/wikitool doctor
tools/wikitool doctor --json
Behaviour
- Checks dependencies (Python, ripgrep), author resolution, stack version, git identity/branch/remote, published skills, the kb/raw/reports/work/instructions structure, and generated files.
- Import filters (
import-filter-<name>): one line for eachraw deriveformat that reads through a package (PDF, Outlook.msg) - aWARNnaming the package when it is missing, since that costs only its own format; fixed by runningtools/preflight.shagain. - Tool paths (
tool-paths):.wikitool-tools.jsonwritten by a preflight that finished, every tooltools/prerequisites.txtnames for this platform recorded, and every recorded path still there - aFAILotherwise, fixed by runningtools/preflight.shagain (PowerShell 7:tools/preflight.ps1). - Install folder (
install-dir): on Windows with long paths off, aFAILwhen the folder holdingtools/is longer thantools/prerequisites.txtallows (95 characters) - the limit the preflight enforces before it sets anything up. - PowerShell (
execution-policy,script-marks; Windows only,OKelsewhere): aFAILwhen the effective execution policy isRestrictedorAllSigned- the line then says whether a group policy sets it, which only whoever administers the computer can change - and aFAILwhen a script undertools/carries a Mark of the Web from the internet zone, which a browser download unpacked in Explorer leaves behind andInvoke-WebRequestplustardo not.tools/preflight.ps1checks the same two things before it stops. - Personalization:
USER.md/SOUL.mdpresent and filled - a file still carrying the template's sentinel is aFAIL. - KB conventions:
kb/CONVENTIONS.mdpresent, unsentinelled, and naming all three tool-owned section headings - aFAILon any of the three. - Environment note:
ENVIRONMENT.mdis optional, so absent isOK; a still-templated one is aWARN. - MCP
submittool: whether.wikitool-upload.jsonis present, absent or malformed, its limits, and how many submissions wait inmcp-upload/. Absent isOKand means the write path does not exist at all; malformed is aFAIL. - Task tracker:
.wikitool-tasks.jsonpresent, absent or malformed - absent isOK(no tracker configured), malformed is aFAIL. WhenWIKITOOL_TASKS_CONFIGis set, that file is read instead and the finding names it; a set variable that names no file is aFAIL, neverOK. - For a configured
superproductivityprovider, the configuredaccesspath's own state:access: "api"reports whether its local REST API answersGET /healthwith a ready renderer right now,access: "snapshot"whether a backup file is ready. The other access path is never attempted, and neither state is ever aFAIL. - For a configured
caldavprovider, whether the server is reachable and Basic auth succeeds - never aFAIL; only a broken config block is. - Settings (
settings-instance,settings-checkout,settings-secrets): one line per tier.wikitool.jsonand.wikitool-local.jsoneach present or absent - absent isOK- and aFAILnaming file, key and the right tier when a value sits in the wrong file, a secret or a committed private field holds a plain value, or a value fails its field; a section this version does not read is aWARN. For the references: how many resolve, never a value - an unresolvable one is aFAIL, one 1Password will not hand out until a human unlocks it aWARN. - Session id source:
OKforWIKITOOL_SESSION_IDor a registered harness variable,WARNonly for the bare parent-pid fallback. - Telemetry: on or off and why - installation-form default,
.wikitool-telemetry.json, orWIKI_TRACE- and the current session's count and byte total against both caps; never aFAIL. AWARNwhen.wikitool-telemetry.jsonis not read as written - unreadable JSON, not an object,enablednot a JSON boolean, a cap not a positive integer, or an unknown key - naming the field; telemetry itself drops or reinterprets such a value without a word, so this is where it shows. - Exits 1 only on a
FAIL; a missing remote, session id orVERSIONis aWARN, not a fault. - Read-only and exempt from the Iteration Budget Gate.
Properties
- Changes files: no
- Idempotent: yes
- Atomic: Read-only
- Counts toward the session call budget: no
- Can reach the network: yes
Exit codes
0- success1- At least one check reportedFAIL(aWARN, e.g. no remote or noWIKITOOL_SESSION_ID, does not exit 1)
See also
instructions/setup-instance.md- the setup steps most findings point back toinstructions/preflight.md- whattool-pathsandinstall-dirpoint back todocs/reference/configuration.md- the per-checkout configuration files and the tiered settingsdocs/explanation/telemetry-and-evaluation.md- telemetry state and capsinstructions/session-setup.md- settingWIKITOOL_SESSION_ID