Adds a new ── Settings ── block at the bottom of `ctask doctor` (after
the existing tmux INFO line, before the summary). The block reports
every user-level default tracked by the resolver — ctask_root,
project_root, seed_dir, default_agent, default_category, session_mode,
editor — together with the source it was drawn from.
Implementation:
- runDoctor calls config.LoadResolver() once and passes the resolver
into checkSettings; no setting is re-resolved mid-block (the user's
correction: "new doctor/info code should load the resolver once and
reuse it").
- checkSettings prints the config-file lifecycle line first
(`Config file: <path>` / `Config file: not found — using built-in
defaults` / `[FAIL] unknown key: "..."` per the resolver's
ConfigErr state), then iterates the resolver's ResolvedSetting
accessors and feeds each one through printSettingLine.
- printSettingLine renders the key + value pair plus a `source: …`
child line. When the resolver chains an Override, the source line
embeds the overridden source + value in parens. For the
PlatformOverride session_mode case, an additional
`configured: <value>` line surfaces what the user asked for.
- formatSettingSource centralises the "EnvVar → CTASK_X env var" /
"PlatformOverride → ... (persistent mode requires tmux; not
available on native Windows)" / override-chain wording so doctor
and info can share the same labels in commit 4.
- Only the invalid-config-file branch increments the failed counter.
Missing file is INFO. The valid-file branch is purely informational.
Tests (cmd/doctor_settings_test.go, 6 cases):
- TestDoctorShowsSettingsSection — header present + all keys appear
- TestDoctorShowsSourceAttribution — every line has source: + at
least one "built-in default"
- TestDoctorShowsOverrides — env vs config override chain rendered
- TestDoctorConfigNotFound — INFO, no failed bump
- TestDoctorConfigInvalid — FAIL bump + unknown key named
- TestDoctorSessionModePlatformOverrideRendered — direct value +
"platform override" label + "configured: persistent" row
Smoke-verified end-to-end against the installed binary:
- no config + no env → all "built-in default"
- env CTASK_AGENT=aider + config default_agent=opencode →
"CTASK_AGENT env var (overrides config file: opencode)"
- config session_mode=persistent on native Windows → "platform
override (...)" plus "configured: persistent"
- config with typo "default_agnet: foo" → [FAIL] line names the key
and the "settings not applied" advisory