Skip to content

Doctor: expose UI freshness health findings#84290

Merged
steipete merged 9 commits into
openclaw:mainfrom
giodl73-repo:doctor-next-plugin-registry
May 31, 2026
Merged

Doctor: expose UI freshness health findings#84290
steipete merged 9 commits into
openclaw:mainfrom
giodl73-repo:doctor-next-plugin-registry

Conversation

@giodl73-repo

@giodl73-repo giodl73-repo commented May 19, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Exposes Control UI protocol freshness as a structured doctor health check for lint and dry-run repair effects.
  • Keeps real build/rebuild mutation on the existing maybeRepairUiProtocolFreshness() path used by openclaw doctor --fix.
  • Keeps existing doctor repairs in their positional slots: the pre-health UI freshness step still calls the legacy repair path, and the broad structured runner now excludes positional-owned health checks.
  • Hardens the stale detector so a successful empty git history does not create false stale findings, while unavailable git history still reports the mtime mismatch without commit details.
  • Skips build/rebuild prompts when the checkout does not contain ui/ sources.

This PR does not change the public health/plugin SDK contract, does not invent file diffs for generated UI assets, and does not move existing doctor repair order into the broad structured runner.

Real behavior proof

Behavior or issue addressed:
openclaw doctor --lint can report missing/stale Control UI assets, and dry-run repair output can preview the build/rebuild process effect without mutating generated UI files or changing the existing openclaw doctor --fix repair ownership.

Real environment tested:
WSL Ubuntu 24.04 durable OpenClaw worktree at /root/src/openclaw-84290-refresh, head 403c9bdbdbe9, source harness using the real doctor health registry and temporary ignored dist/control-ui/index.html states. Paths below are redacted.

Exact steps or command run after this patch:

  1. git diff --check
  2. node_modules/.bin/oxfmt --check --threads=1 src/commands/doctor-ui.ts src/commands/doctor-ui.test.ts src/flows/doctor-core-checks.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-contributions.test.ts src/flows/doctor-health-conversion-plan.ts
  3. node_modules/.bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/commands/doctor-ui.ts src/commands/doctor-ui.test.ts src/flows/doctor-core-checks.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-contributions.test.ts src/flows/doctor-health-conversion-plan.ts
  4. node scripts/run-vitest.mjs src/commands/doctor-ui.test.ts src/flows/doctor-health-contributions.test.ts src/commands/doctor-lint.test.ts --reporter=dot --pool=forks --testTimeout=30000 --hookTimeout=30000
  5. node scripts/run-tsgo.mjs -p tsconfig.core.json --noEmit --incremental false --pretty false
  6. node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --noEmit --incremental false --pretty false
  7. node --import tsx /tmp/84290-real-proof.mjs
  8. bash /mnt/c/src/claws-hapi/.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main

Evidence after fix:
Focused validation passed: oxfmt reported all matched files use the correct format; oxlint reported 0 warnings and 0 errors; Vitest reported 3 focused files and 34 tests passed; core and core-test tsgo exited 0; autoreview reported autoreview clean: no accepted/actionable findings reported.

Redacted behavior proof output:

--- missing assets lint JSON ---
exitCode=1
{"ok":false,"checksRun":1,"checksSkipped":55,"findings":[{"checkId":"core/doctor/ui-protocol-freshness","severity":"warning","message":"- Control UI assets are missing.\n- Run: pnpm ui:build","path":"/redacted/openclaw/dist/control-ui/index.html","fixHint":"Run `openclaw doctor --fix` to build Control UI assets."}]}
--- missing assets dry-run repair result ---
{
  "checksRun": 1,
  "checksRepaired": 1,
  "findings": [
    {
      "checkId": "core/doctor/ui-protocol-freshness",
      "severity": "warning",
      "message": "- Control UI assets are missing.\n- Run: pnpm ui:build",
      "path": "/redacted/openclaw/dist/control-ui/index.html",
      "fixHint": "Run `openclaw doctor --fix` to build Control UI assets."
    }
  ],
  "effects": [
    {
      "kind": "process",
      "action": "would-build-control-ui",
      "target": "/redacted/openclaw",
      "dryRunSafe": false
    }
  ],
  "changes": [],
  "warnings": []
}
--- stale assets lint JSON ---
exitCode=1
{"ok":false,"checksRun":1,"checksSkipped":18,"findings":[{"checkId":"core/doctor/ui-protocol-freshness","severity":"warning","message":"UI assets are older than the protocol schema.\nFunctional changes since last build:\n- ef7e652ec4 test(codex): avoid forced-tool allowlist flake","path":"/redacted/openclaw/dist/control-ui/index.html","fixHint":"Run `openclaw doctor --fix` to build Control UI assets."}]}
--- stale assets dry-run repair result ---
{
  "checksRun": 1,
  "checksRepaired": 1,
  "findings": [
    {
      "checkId": "core/doctor/ui-protocol-freshness",
      "severity": "warning",
      "message": "UI assets are older than the protocol schema.\nFunctional changes since last build:\n- ef7e652ec4 test(codex): avoid forced-tool allowlist flake",
      "path": "/redacted/openclaw/dist/control-ui/index.html",
      "fixHint": "Run `openclaw doctor --fix` to build Control UI assets."
    }
  ],
  "effects": [
    {
      "kind": "process",
      "action": "would-rebuild-control-ui",
      "target": "/redacted/openclaw",
      "dryRunSafe": false
    }
  ],
  "changes": [],
  "warnings": []
}

Observed result after fix:
The structured health check reports missing Control UI assets and stale assets through lint JSON. Dry-run repair returns preview process effects for build/rebuild without generated file diffs. Real doctor --fix repair remains in the existing pre-health UI freshness slot, while the broad structured runner excludes positional-owned checks. When git can prove there are no schema commits since the UI build, no stale finding is emitted; when git history is unavailable, the mtime mismatch remains reportable without commit details. Slim/source-limited installs do not get prompted to run an impossible UI rebuild.

What was not tested:
No live Control UI rebuild was run because this PR intentionally leaves build/rebuild execution on the existing doctor preflight repair path. No generated UI asset diff is emitted because generated build output is not stable or cheap to preview as a file diff.

Validation

  • git diff --check
  • node_modules/.bin/oxfmt --check --threads=1 src/commands/doctor-ui.ts src/commands/doctor-ui.test.ts src/flows/doctor-core-checks.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-contributions.test.ts src/flows/doctor-health-conversion-plan.ts
  • node_modules/.bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/commands/doctor-ui.ts src/commands/doctor-ui.test.ts src/flows/doctor-core-checks.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-contributions.test.ts src/flows/doctor-health-conversion-plan.ts
  • node scripts/run-vitest.mjs src/commands/doctor-ui.test.ts src/flows/doctor-health-contributions.test.ts src/commands/doctor-lint.test.ts --reporter=dot --pool=forks --testTimeout=30000 --hookTimeout=30000
  • node scripts/run-tsgo.mjs -p tsconfig.core.json --noEmit --incremental false --pretty false
  • node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --noEmit --incremental false --pretty false
  • node --import tsx /tmp/84290-real-proof.mjs
  • bash /mnt/c/src/claws-hapi/.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main clean

@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations agents Agent runtime and tooling size: XL maintainer Maintainer-authored PR labels May 19, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed May 31, 2026, 5:06 AM ET / 09:06 UTC.

Summary
The PR adds a structured Control UI protocol freshness doctor health check, dry-run process effects, positional repair exclusion updates, focused tests, and one agent timeout test hardening change.

PR surface: Source +122, Tests +125. Total +247 across 7 files.

Reproducibility: yes. from source inspection: the PR maps UI freshness findings to warning, and current lint code exits nonzero for warnings at the default threshold. I did not run commands because this review is read-only.

Review metrics: 1 noteworthy metric.

  • Default Lint Severity Surface: 1 warning-level health check added. Warning-level findings make broad doctor --lint exit nonzero, so this changes an automation/preflight compatibility surface rather than only adding visibility.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🦪 silver shellfish
Patch quality: 🧂 unranked krab
Result: blocked until stronger real behavior proof is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Resolve the default doctor --lint compatibility posture for UI freshness, preferably by making the broad check informational or opt-in.
  • [P1] Refresh the Real behavior proof against current head 26823a4ab88b503818ce6e2a8fa7037f67d03eb6, including the current stale-git and fix-hint behavior.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The PR body includes terminal proof, but it is tied to an older head and no longer matches the current head's stale-git behavior and fix hints; refresh real behavior proof for the current branch before merge. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P1] Merging as-is can make existing source-checkout, slim-checkout, or CI preflight workflows that run broad openclaw doctor --lint fail when Control UI assets are missing or stale, even though this was previously a guided doctor repair note rather than a default lint gate.
  • [P1] The PR body proof still references an older head and describes stale/unavailable-git behavior and fix hints that no longer match the current head, so maintainers do not have fresh real behavior proof for the exact branch being reviewed.

Maintainer options:

  1. Preserve Default Lint Compatibility (recommended)
    Make core/doctor/ui-protocol-freshness non-failing in broad lint, or require explicit --only/strict selection for warning-level enforcement while keeping dry-run effects visible.
  2. Accept The Stricter Gate
    Maintainers can intentionally keep warning severity, but the PR should document that source/preflight lint may now fail on missing or stale Control UI assets and refresh proof on the current head.
  3. Pause This Slice
    If default UI freshness policy is not settled, keep this PR paused and land only after the broader doctor-health migration posture is decided.

Next step before merge

  • [P1] The protected maintainer label plus default-lint compatibility posture require a human policy decision before any repair or merge path is safe.

Security
Cleared: The diff does not touch dependencies, workflows, credentials, permissions, publishing, or downloaded code execution paths; the new git command uses fixed arguments against the resolved repo root.

Review findings

  • [P1] Keep UI freshness out of failing default lint — src/commands/doctor-ui.ts:125
Review details

Best possible solution:

Keep the structured UI freshness visibility, but preserve default lint compatibility by making the broad check informational or opt-in unless maintainers explicitly accept the stricter warning-level lint gate and refresh the proof/body for that chosen behavior.

Do we have a high-confidence way to reproduce the issue?

Yes, from source inspection: the PR maps UI freshness findings to warning, and current lint code exits nonzero for warnings at the default threshold. I did not run commands because this review is read-only.

Is this the best way to solve the issue?

No for merge as-is: the implementation is narrow, but the default warning severity makes an existing automation/preflight surface stricter without a settled compatibility decision. The safer path is informational/default-compatible visibility or an explicit strict mode.

Full review comments:

  • [P1] Keep UI freshness out of failing default lint — src/commands/doctor-ui.ts:125
    This maps every missing or stale Control UI asset finding to warning. Because doctor --lint registers all core checks and exits 1 for warnings by default, existing source-checkout or preflight workflows can start failing on dist/control-ui/index.html freshness even though this was previously handled by the guided doctor repair path; make the broad check informational/opt-in or get explicit maintainer acceptance for the stricter gate.
    Confidence: 0.91

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 84b025eb6221.

Label changes

Label changes:

  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The PR body includes terminal proof, but it is tied to an older head and no longer matches the current head's stale-git behavior and fix hints; refresh real behavior proof for the current branch before merge. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
  • remove proof: sufficient: Current real behavior proof status is insufficient, not sufficient.
  • remove status: ⏳ waiting on author: Current PR status label is status: 📣 needs proof.

Label justifications:

  • P2: This is a normal-priority doctor CLI improvement with a concrete compatibility blocker but no emergency runtime outage or data-loss signal.
  • merge-risk: 🚨 compatibility: The PR can make existing broad openclaw doctor --lint users fail on Control UI asset freshness states that were not previously part of the default lint gate.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦪 silver shellfish and patch quality is 🧂 unranked krab.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The PR body includes terminal proof, but it is tied to an older head and no longer matches the current head's stale-git behavior and fix hints; refresh real behavior proof for the current branch before merge. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Source +122, Tests +125. Total +247 across 7 files.

View PR surface stats
Area Files Added Removed Net
Source 4 223 101 +122
Tests 3 127 2 +125
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 7 350 103 +247

What I checked:

  • Repository policy read: Root AGENTS.md was read fully; its ClawSweeper policy treats stricter validation, setup/startup checks, and new operator action as compatibility-sensitive merge risk. (AGENTS.md:23, 84b025eb6221)
  • Scoped policy read: The scoped agents test guide was read because the PR touches an agent test; it applies performance/test-harness cautions but does not change the doctor compatibility finding. (src/agents/AGENTS.md:1, 84b025eb6221)
  • PR head adds a warning-level UI freshness finding: At PR head, uiProtocolFreshnessIssueToHealthFinding() maps missing or stale Control UI assets to severity: "warning". (src/commands/doctor-ui.ts:125, 26823a4ab88b)
  • Default lint exits nonzero for warnings: Current main's runDoctorLintCli() uses the selected severity threshold for both visible findings and exit status, so warning findings make default lint return 1. (src/commands/doctor-lint.ts:111, 84b025eb6221)
  • Doctor lint is documented as an automation/preflight surface: The public doctor docs describe openclaw doctor --lint as the read-only automation posture for CI, preflight scripts, and review workflows, with exit 1 for findings at or above the threshold. Public docs: docs/cli/doctor.md. (docs/cli/doctor.md:78, 84b025eb6221)
  • Related current pattern preserves lint compatibility: Current main's shell-completion structured doctor health findings use severity: "info", preserving default lint exit compatibility for another positional repair migration slice. (src/commands/doctor-completion.ts:98, 84b025eb6221)

Likely related people:

  • steipete: Current main blame/log shows Peter Steinberger carrying recent doctor UI and doctor-health files, and the PR timeline/head commits include several latest updates from steipete on this branch. (role: recent area contributor and branch updater; confidence: high; commits: 0303f3a8f086, e93216080aa1, 26823a4ab88b; files: src/commands/doctor-ui.ts, src/flows/doctor-core-checks.ts, src/flows/doctor-health-contributions.ts)
  • giodl73-repo: The author also has merged related doctor repair/health migration work in this area, including the repair runner normalization and shell-completion health PRs referenced by this stack. (role: recent doctor-health migration contributor; confidence: high; commits: 056378efd582, dc17412c3a95, 7127366c8f23; files: src/flows/doctor-health-contributions.ts, src/flows/doctor-core-checks.ts, src/commands/doctor-ui.ts)
  • meaningfool: Git history attributes the original doctor UI protocol freshness check to feat(doctor): add UI protocol freshness check. (role: original behavior introducer; confidence: medium; commits: bfdbaa5ab611; files: src/commands/doctor-ui.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Crabbox proof images

Crabbox run run_40f3018e5b28 on AWS lease cbx_95f6e9c97891 (silver-crab) passed build, focused doctor tests, release configured-plugin tests, tsgo, and the real openclaw doctor --lint --only ... --json checks described in the PR body.

The proof images are stored in a public GitHub Gist because crabbox artifacts publish -storage broker returned 403 AccessDenied from the artifact broker upload URL in this WSL session.

Terminal proof

Desktop proof

Gist: https://gist.github.com/giodl73-repo/e41418e607535f7d29451ff7329e8e00

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 19, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🌱 uncommon Frosted Crabkin

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🌱 uncommon.
Trait: watches the merge queue.
Image traits: location artifact grotto; accessory miniature diff map; palette rose quartz and slate; mood sparkly; pose peeking out from the egg shell; shell polished stone shell; lighting warm desk-lamp glow; background small review tokens.
Share on X: post this hatch
Copy: My PR egg hatched a 🌱 uncommon Frosted Crabkin in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@giodl73-repo
giodl73-repo force-pushed the doctor-next-plugin-registry branch 4 times, most recently from f67e9cb to da75d3d Compare May 20, 2026 04:05
@giodl73-repo
giodl73-repo force-pushed the doctor-next-plugin-registry branch from da75d3d to 49b6ff2 Compare May 20, 2026 22:49
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 20, 2026
@giodl73-repo
giodl73-repo force-pushed the doctor-next-plugin-registry branch from 49b6ff2 to ab23b05 Compare May 21, 2026 00:07
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Rebuilt this PR as the small UI freshness doctor slice stacked on #85566; old plugin-registry/systemd/startup contents were removed. Proof is in the PR body and Real behavior proof is passing.

@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Updated this PR on head f2a6b4af48 after #85566 merged.

Changes since the last review:

  • rebased onto current main
  • kept the UI freshness rule off the public SDK surface and real mutation path
  • added real behavior proof for missing/stale lint JSON and dry-run process effects
  • fixed the stale detector so a successful empty git schema log does not create a false stale finding
  • fixed the stale repair path so slim installs without ui/ sources do not get prompted for an impossible rebuild

Validation rerun:

  • git diff --check
  • oxfmt --check on changed files
  • oxlint on changed files
  • focused doctor Vitest: 5 files / 47 tests passed
  • core tsgo and core-test tsgo passed
  • redacted real behavior proof script passed
  • autoreview clean against origin/main

@clawsweeper

clawsweeper Bot commented May 25, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Updated head c5bf0b3bab to make the positional ownership rule explicit and keep this PR aligned with the doctor migration model:

  • Existing positional doctor repairs stay in their original slot.
  • The pre-health UI freshness repair still calls the legacy maybeRepairUiProtocolFreshness path for real doctor --fix behavior.
  • The broad structured repair runner now excludes positional-owned health checks by ownership metadata instead of a hand-maintained legacy repair set.
  • Doctor: expose shell completion health findings #85566 shell completion now declares healthCheckIds: ["core/doctor/shell-completion"], so it is excluded from the broad runner via the same positional ownership model.

Validation rerun:

  • format/lint on changed doctor contribution files
  • focused positional-ownership Vitest: 4 files / 35 tests passed
  • core tsgo and core-test tsgo passed
  • redacted UI freshness real behavior proof still passes
  • autoreview clean against origin/main

@clawsweeper

clawsweeper Bot commented May 25, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@steipete

Copy link
Copy Markdown
Contributor

Pre-merge verification for 098640213879df8b3622128c9d60cc4b7acd0b32:

Behavior addressed: openclaw doctor --lint --json and dry-run repair output now expose UI freshness findings through the structured doctor health contribution path, while repair filtering keeps positional health repairs in the expected slot.
Real environment tested: local macOS checkout plus GitHub Actions on the PR head SHA.
Exact steps or command run after this patch:

git diff --check origin/main...HEAD
node_modules/.bin/oxfmt --check --threads=1 src/agents/bash-tools.exec-foreground-failures.test.ts src/commands/doctor-ui.test.ts src/commands/doctor-ui.ts src/flows/doctor-core-checks.ts src/flows/doctor-health-contributions.test.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-conversion-plan.ts
node_modules/.bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/agents/bash-tools.exec-foreground-failures.test.ts src/commands/doctor-ui.test.ts src/commands/doctor-ui.ts src/flows/doctor-core-checks.ts src/flows/doctor-health-contributions.test.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-conversion-plan.ts
node scripts/run-vitest.mjs src/commands/doctor-ui.test.ts src/flows/doctor-health-contributions.test.ts src/commands/doctor-lint.test.ts src/agents/bash-tools.exec-foreground-failures.test.ts --reporter=dot --pool=forks --testTimeout=30000 --hookTimeout=30000
GOMAXPROCS=4 node scripts/run-tsgo.mjs -p tsconfig.core.json --noEmit --incremental false --pretty false
GOMAXPROCS=4 node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --noEmit --incremental false --pretty false
GOMAXPROCS=4 node scripts/run-tsgo.mjs -p tsconfig.extensions.json --noEmit --incremental false --pretty false
.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main

Evidence after fix: local focused Vitest passed 3 shards / 36 tests; oxfmt, oxlint, diff check, and all three tsgo lanes passed. Autoreview reported no accepted/actionable findings.
Observed result after fix: GitHub Actions all green for PR head 098640213879df8b3622128c9d60cc4b7acd0b32: CI run 26708647282, Real behavior proof run 26708646476, CodeQL run 26708647258, CodeQL Critical Quality run 26708647230, OpenGrep PR Diff run 26708647214, Workflow Sanity run 26708647232, Dependency Guard run 26708646489, ClawSweeper Dispatch run 26708646475, Labeler run 26708646480.
What was not tested: no known proof gaps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling commands Command implementations maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: M status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants