Skip to content

Repair catalog 1→5, and stop titling findings with machine text - #25

Merged
felirami merged 1 commit into
mainfrom
feat/repairs-2
Jul 27, 2026
Merged

Repair catalog 1→5, and stop titling findings with machine text#25
felirami merged 1 commit into
mainfrom
feat/repairs-2

Conversation

@felirami

Copy link
Copy Markdown
Owner

Continues #24. Two things: more of what ClawFix detects is now repairable, and findings stop
shouting raw upstream text at the user.

Repair catalog: 1 → 5

Three more repairs, all openclaw config set with the read-back as verification, all sharing one
configToggleRepair contract so the guard rails cannot drift apart between them.

Repair Key On a real install
auto-update-enabled-warning update.auto.enabled → false applied, finding gone
gateway-loopback-no-auth gateway.auth.mode → token applied, finding gone
no-hybrid-search agents.defaults.memorySearch.query.hybrid.enabled → true applied, current:"true", finding gone
no-memory-flush agents.defaults.compaction.memoryFlush.enabled → true applied, current:"true", finding gone

Four of the five now work without a service manager, so a containerised OpenClaw is no longer
a host where ClawFix can only look and shrug. gateway-not-running still needs systemd or
launchd — that is OpenClaw's own restart path.

Each toggle refuses an unreadable key (config_state_unknown) rather than reading "cannot read"
as "false", and rollback restores the previous value.

Port conflict: deliberately still not repaired

The obvious next repair — ClawFix already knows the squatting PID — was not added, because every
version of it ends in killing a process ClawFix does not own. That is not a guarded repair
whatever the preview says. If it is wanted later, the safe shape is to refuse unless the listener
is itself a stale OpenClaw process, and even then prefer OpenClaw's --force restart over a kill.

Findings stopped shouting machine text

[critical] timeout came from nativeStatus.gateway.error used directly as a title — a probe
that gave up, presented as a critical OpenClaw fault named "timeout". Same pattern produced
JSON5 parse failed: SyntaxError: JSON5: invalid character 'i' at 1:8. Both now lead with a
sentence and keep the upstream text as detail:

[high] OpenClaw config schema validation failed
       detail: JSON5 parse failed: SyntaxError: JSON5: invalid character 'i' at 1:8

Fixing the title broke the doctor-findings dedup, which had been matching on the raw message, so
the same problem briefly appeared twice — once well-titled, once raw. That was caught on the real
machine rather than in tests; the dedup now compares the detail as well as the headline.

Gates

418 node tests, 91 TUI tests, tsc clean, prove:remediation, validate:repairs, npm audit clean,
node --check sweep, 21-file package allowlist — all run locally before pushing.

…th machine text

Repair catalog goes 1 -> 5. Three toggles share one configToggleRepair contract,
so preflight, verification and rollback cannot drift apart between them:

  auto-update-enabled-warning  update.auto.enabled -> false
  no-hybrid-search             agents.defaults.memorySearch.query.hybrid.enabled -> true
  no-memory-flush              agents.defaults.compaction.memoryFlush.enabled -> true

Each reads the key back through OpenClaw as its verification, so a `config set`
that reports success but changes nothing still fails. An unreadable key is
refused as config_state_unknown rather than treated as false, and rollback
restores the previous value. Verified against a real OpenClaw 2026.6.11 install:
both new toggles applied, verified current "true", and the findings were gone on
rescan. Four of the five repairs now work without a service manager.

The port conflict is still not repaired, on purpose: every version of that repair
ends in killing a process ClawFix does not own, which is not a guarded repair
whatever the preview says.

Also stops handing raw upstream text to users as finding titles. A gateway probe
that timed out produced `[critical] timeout`, and a config error produced
`JSON5 parse failed: SyntaxError: JSON5: invalid character 'i' at 1:8`. Both now
lead with an actionable sentence and carry the upstream text as detail. That
change broke the doctor-findings dedup, which had matched on the raw message, so
the same problem appeared twice — found on the real machine; the dedup now
compares the detail as well as the headline.
@felirami
felirami requested a review from arcabotai as a code owner July 27, 2026 03:22
@felirami
felirami merged commit fc306b3 into main Jul 27, 2026
3 checks passed
@felirami
felirami deleted the feat/repairs-2 branch July 27, 2026 03:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant