perf: skip manifest normalization in status summary#87831
Conversation
|
Codex review: needs maintainer review before merge. Reviewed June 21, 2026, 1:45 AM ET / 05:45 UTC. Summary PR surface: Source +11, Tests +100. Total +111 across 3 files. Reproducibility: yes. Source inspection shows current status summary disables plugin normalization without disabling manifest normalization, and the PR body provides after-fix terminal proof plus before/after benchmark output for that path. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Merge only after maintainers accept the shallow-status label tradeoff; otherwise preserve manifest-normalized display semantics and pursue a different status performance path. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection shows current status summary disables plugin normalization without disabling manifest normalization, and the PR body provides after-fix terminal proof plus before/after benchmark output for that path. Is this the best way to solve the issue? Yes for the code shape: the status summary is already a shallow read-only caller, and threading an opt-out flag keeps defaults unchanged for other persisted resolver callers. The unresolved question is whether maintainers accept the intentional literal-label status behavior. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 4b2298e8cbcb. Label changesLabel justifications:
Evidence reviewedPR surface: Source +11, Tests +100. Total +111 across 3 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
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
|
239f43b to
50bc288
Compare
|
This pull request has been automatically marked as stale due to inactivity. |
Summary
What problem does this PR solve?
status/status --jsonbuilds model labels for configured and persistedsession rows in a shallow read-only path.
manifest model-id normalization run repeatedly while building status rows.
Why does this matter now?
and package validation.
mainis much better than the original local slowdown, but repeatedstatus row parsing still pays avoidable manifest-normalization cost.
What is the intended outcome?
plugin/runtime normalization for configured or providerless persisted session
model values.
What is intentionally out of scope?
CHANGELOG.mdedit.What does success look like?
statusSummaryRuntimepassesallowManifestNormalization:falsein its shallowconfigured and persisted session model paths.
temp-prefix install pass on the rebased branch.
What should reviewers focus on?
normalization.
callers.
improvement.
Linked context
Which issue does this close?
Closes #
Which issues, PRs, or discussions are related?
Related #80611
Related #80614
Was this requested by a maintainer or owner?
No maintainer request. This is a narrow follow-up from local status-summary
performance investigation and current-main package proof.
Real behavior proof (required for external PRs)
repeatedly invoke manifest model-id normalization even though status is a
read-only display path that already opts out of plugin/runtime normalization.
origin/mainat5d8cf28578a1c5b4025a7d8da1b73d1dffc047c3, head50bc288c4dabaac33b8675ec54818eed7e9520fc, Nodev22.22.2, packagedOpenClaw
2026.5.28 (50bc288)installed into a temporary npm prefix.node scripts/test-projects.mjs, checked formatting withoxfmt, rangit diff --check, rebuilt withnode --import tsx scripts/openclaw-prepack.ts,ran
npm pack, checked the tarball withnode scripts/check-openclaw-package-tarball.mjs, installed the tarball in atemp prefix, read back
openclaw --version, and checked built markers.Copied terminal output from the rebased source and package proof:
session model parsing stay on the shallow path, the package installs in a
temp prefix, and the direct hot operation avoids manifest-normalization cost.
no Kova workflow dispatch, no live-provider run, and no broad status-summary
refactor.
uses local generated session stores so it is reproducible and private-data
free. It was generated earlier in this current-main prep lane; after PR review
and upstream drift, the branch was rebased onto
5d8cf285, and focusedtests/package proof were rerun on the rebased head.
benchmark base, the same synthetic status workload had
54.5mswarm medianand the direct parse microbench had
45.5msmedian for 500 calls with defaultmanifest normalization.
Tests and validation
Which commands did you run?
node scripts/test-projects.mjs src/commands/status.summary.runtime.normalization.test.ts src/commands/status.summary.runtime.test.ts src/agents/model-selection.test.ts test/scripts/test-live-shard.test.ts./node_modules/.bin/oxfmt --check --threads=1 src/agents/model-selection.ts src/commands/status.summary.runtime.ts src/commands/status.summary.runtime.normalization.test.tsgit diff --check origin/main...HEADPATH=/usr/lib/node_modules/corepack/shims:$PATH node --import tsx scripts/openclaw-prepack.tsnpm pack --ignore-scripts --pack-destination <artifact-dir>node scripts/check-openclaw-package-tarball.mjs <tarball>npm install --global --prefix <temp-prefix> <tarball><temp-prefix>/bin/openclaw --versionrgWhat regression coverage was added or updated?
src/commands/status.summary.runtime.normalization.test.ts.normalization and verifies status summary does not call either path for:
What failed before this fix, if known?
mainstill calls manifest normalization from the status summaryconfigured and persisted session model parse paths.
45.5msmedian per 500
parseModelRefcalls, while the status opt-out path took0.2ms.If no test was added, why not?
Risk checklist
Did user-visible behavior change? (
Yes/No)Yes, narrowly: status summary may display providerless persisted session model
values literally, for example
anthropic/opus-4.6, instead of applying pluginmanifest aliases in this shallow status path.
Did config, environment, or migration behavior change? (
Yes/No)No.
Did security, auth, secrets, network, or tool execution behavior change? (
Yes/No)No.
What is the highest-risk area?
The intentional status-display tradeoff for providerless persisted model aliases.
How is that risk mitigated?
allowManifestNormalization:falseinto thepersisted model resolver chain.
surface are present.
Current review state
What is the next action?
Maintainer review after CI reruns on the rebased head. ClawSweeper says no
contributor repair is needed; the maintainer decision is whether to accept the
shallow-status display tradeoff.
What is still waiting on author, maintainer, CI, or external proof?
and display providerless persisted model values literally in this read-only
status path.
Which bot or reviewer comments were addressed?
platinum hermit, and said no ClawSweeper repair is needed before maintainerreview.
status tradeoff before merge.
build-artifactsfailure was traced to upstream drift intest/scripts/test-live-shard.test.ts. Currentorigin/mainincludes theupstream fix (
f09b69a7 test: drop removed gateway live shard fixture), andthe rebased branch now passes that focused test locally.