Skip to content

feat(plugins): accept slot owner records#88507

Draft
kklouzal wants to merge 1 commit into
openclaw:mainfrom
kklouzal:feat/plugin-slot-owner-records
Draft

feat(plugins): accept slot owner records#88507
kklouzal wants to merge 1 commit into
openclaw:mainfrom
kklouzal:feat/plugin-slot-owner-records

Conversation

@kklouzal

Copy link
Copy Markdown
Contributor

Summary

This PR implements the read-side normalization layer proposed in #70823: plugins.slots.memory and plugins.slots.contextEngine can now be read as either a bare plugin id string or an object-form ownership record with an owner field.

What problem does this PR solve?

  • Today, OpenClaw slot ownership is represented only as a bare string such as plugins.slots.memory = "memory-core".
  • That makes ownership checks brittle: every runtime, doctor, validation, install/update, and plugin trust path has to assume the raw slot value is a string.
  • It also blocks the next step in RFC: machine-readable memory-slot ownership — plugins.slots.<slot>.owner #70823: recording slot ownership provenance without breaking existing configs.

What changes?

  • Adds PluginSlotOwnerRecord and PluginSlotValue config types.
  • Extends the config schema so plugins.slots.memory and plugins.slots.contextEngine accept either "plugin-id" or { "owner": "plugin-id", ...metadata }.
  • Adds resolvePluginSlotOwner(value) as the shared read-side helper for slot owner normalization.
  • Updates slot consumers across config normalization, validation, stale config scanning, doctor repair paths, startup plugin preloading, active runtime/status paths, context-engine resolution, memory dreaming, provider auth alias/env-var trust, uninstall cleanup, and plugin ID migration.
  • Preserves object-form metadata when plugin ID migration changes only the owner field.
  • Updates docs and focused regression coverage for object-form slot values.

What is intentionally out of scope?

Intended outcome:

  • Existing configs keep working unchanged.
  • New object-form slot records are accepted everywhere relevant on read.
  • Later PRs can extend this groundwork instead of reimplementing slot-owner parsing in each surface.

Linked context

Closes #70823.

Directly related work:

Supporting related PRs and issues:

Problem / Root Cause

Before this change, slot readers commonly assumed plugins.slots.<slot> was a string. That assumption is exactly what #70823 needs to retire.

The problem is not just schema shape. If only the schema accepts object-form records, but runtime paths keep reading raw values directly, then object-form configs fail in subtle places:

  • startup preloading may skip the selected plugin;
  • doctor and stale-config scans may miss or misreport owners;
  • context-engine resolution may fall back to legacy;
  • memory status/tool-disable paths may misread none;
  • provider auth alias/env-var trust may ignore a selected workspace context engine;
  • plugin update can collapse or lose ownership metadata.

This PR makes the read-side contract real by routing those consumers through one shared helper.

What Changed

  • src/config/types.plugins.ts

    • Adds PluginSlotOwnerRecord.
    • Adds PluginSlotValue = string | PluginSlotOwnerRecord.
    • Applies the value type to plugins.slots.memory and plugins.slots.contextEngine.
  • src/config/zod-schema.ts

    • Accepts string slot values and object values with required owner.
    • Allows additional object fields so future provenance fields can be carried without another schema turn.
  • src/plugins/slots.ts

    • Adds resolvePluginSlotOwner(value).
    • Normalizes strings and object-form owners to one scalar owner id.
    • Treats blank values as unset and none as the slot-disabled sentinel.
    • Uses the helper in exclusive slot switching so existing object-form ownership is recognized.
  • Runtime/config consumers now normalize slot owners before comparison:

    • config normalization
    • config validation
    • stale plugin config detection
    • doctor route and context-engine compatibility checks
    • gateway startup plugin id selection
    • context-engine resolution
    • memory dreaming config resolution
    • memory status and tool-disable logic
    • provider auth alias/env-var workspace trust checks
    • uninstall cleanup
    • plugin update ID migration
  • Documentation now states that slot values may be string ids or { owner: "<plugin-id>" } records.

Merge-Order Compatibility

This PR is deliberately a groundwork PR, not a competing architecture.

If this lands before #86210:

If #86210 lands before this:

  • This branch should rebase by applying the object-form slot value support to the new memory role keys as well as existing memory and contextEngine.
  • The core helper remains valid; it just gets called from more role-slot consumers.

If #83637 lands before or after this:

  • The two changes should stay complementary.
  • feat: add per-agent compaction overrides (AI-assisted) #83637 controls which agent scope supplies compaction/context-pruning settings.
  • This PR controls how global plugin-slot owners are represented and normalized on read.
  • Later compaction/context-engine work should consume normalized contextEngine ownership where it reads that slot, without changing per-agent compaction semantics.

Follow-up intended after this PR:

  • Write-side canonicalization to produce object-form owner records.
  • Slot overwrite invariants and explicit force/override behavior.
  • Plugin-side adoption of the normalized owner abstraction.

Real behavior proof

  • Behavior or issue addressed: object-form plugins.slots.memory and plugins.slots.contextEngine records should behave the same as bare string slot owners across config parsing, validation, doctor checks, startup planning, runtime memory/context-engine resolution, provider auth trust checks, plugin lifecycle cleanup, and plugin ID migration.
  • Current PR head: b87f4a710c6de665bffcc6c58245d9950a021926 (feat(plugins): accept slot owner records), a final single-commit squash on top of fork main at 26913e60a42e84dd256a682c5239be57f346e244.
  • Proof note: The detailed proof below was collected before the final rebase/squash at 27585fb987df8d6c68886566a6280e755a507456. The final squash preserves the intended branch content as one commit, but exact-head proof has not yet been rerun for b87f4a710c6de665bffcc6c58245d9950a021926.
  • Real environment tested for proof refresh: Dev-01 source checkout at /home/kklouzal/.openclaw/workspace/repos/openclaw; branch feat/plugin-slot-owner-records; proof head 27585fb987df8d6c68886566a6280e755a507456; local Node/Vitest/OpenClaw repo toolchain.
  • Exact steps or command run for that proof refresh:
npx vitest run src/plugins/config-state.test.ts src/plugins/slots.test.ts src/config/config-misc.test.ts src/config/config.plugin-validation.test.ts src/agents/provider-auth-aliases.test.ts src/commands/doctor/shared/context-engine-host-compat.test.ts src/commands/status.scan.shared.test.ts src/context-engine/context-engine.test.ts src/gateway/tools-invoke-shared.test.ts src/memory-host-sdk/dreaming.test.ts src/secrets/provider-env-vars.dynamic.test.ts
npx vitest run src/plugins/update.test.ts
node --import tsx scripts/generate-config-doc-baseline.ts --check
node --import tsx scripts/generate-base-config-schema.ts --check
npx oxfmt --check <touched files>
git diff --check
node scripts/run-tsgo.mjs -p tsconfig.core.json
  • Evidence after fix:
Test Files 11 passed (11)
Tests 301 passed (301)

Test Files 1 passed (1)
Tests 80 passed (80)

OK docs/.generated/config-baseline.sha256
[base-config-schema] ok

All matched files use the correct format.
git diff --check passed
tsgo core check exitCode=0
  • Observed result after fix: object-form slot owners are accepted by schema, normalize to the same owner ids as string slots, preserve none behavior, participate in context-engine and memory runtime resolution, validate missing plugin references correctly, trust selected workspace context-engine plugins for provider auth only when the normalized owner matches, reset/update selected slots during uninstall/update, and preserve extra object metadata when plugin ID migration only changes owner.
  • What was not tested: live production gateway behavior, write-side object canonicalization, overwrite enforcement, or future feat(memory): add multi-slot memory role architecture #86210 memory role slots. Those are out of scope for this read-side normalization PR.
  • Proof limitations or environment constraints: this is a config/runtime parsing and normalization groundwork PR, so the proof is focused local deterministic execution rather than a live model/channel proof. No production config, gateway restart, external provider account, or live plugin registry state was mutated.
  • Before evidence: RFC: machine-readable memory-slot ownership — plugins.slots.<slot>.owner #70823 documents the pre-change limitation: slot ownership was only machine-readable through direct string comparison, leaving no durable place for ownership provenance and forcing each consumer/plugin to repeat brittle raw-slot checks.

Tests and validation

Commands run:

npx vitest run src/plugins/config-state.test.ts src/plugins/slots.test.ts src/config/config-misc.test.ts src/config/config.plugin-validation.test.ts src/agents/provider-auth-aliases.test.ts src/commands/doctor/shared/context-engine-host-compat.test.ts src/commands/status.scan.shared.test.ts src/context-engine/context-engine.test.ts src/gateway/tools-invoke-shared.test.ts src/memory-host-sdk/dreaming.test.ts src/secrets/provider-env-vars.dynamic.test.ts
npx vitest run src/plugins/update.test.ts
node --import tsx scripts/generate-config-doc-baseline.ts --check
node --import tsx scripts/generate-base-config-schema.ts --check
npx oxfmt --check --threads=1 <touched files>
git diff --check
node scripts/run-tsgo.mjs -p tsconfig.core.json

Regression coverage added or updated:

  • Slot normalization for string owners, object owners, blank values, and none.
  • Config schema acceptance for object-form memory and contextEngine.
  • Config validation diagnostics for missing plugin references inside object-form slot owners.
  • Exclusive slot selection when the previous owner is object-form.
  • Context-engine resolution for object-form contextEngine.
  • Doctor host compatibility and route-warning paths with object-form context-engine owners.
  • Memory status/tool-disable/dreaming paths with object-form memory.
  • Provider auth alias/env-var trust checks for selected workspace context engines represented as owner records.
  • Plugin update migration preserving object-form metadata while changing the owner.

Compatibility and Risk

Backward compatibility:

  • Existing string slot configs remain valid.
  • Existing "none" memory-slot behavior remains valid.
  • Existing default behavior remains unchanged: memory defaults to memory-core; context engine defaults to legacy.
  • Existing write paths that still write strings remain valid.

Compatibility changes reviewers should inspect:

  • Config schema now accepts object records for existing slot values.
  • Consumers that previously compared raw slot strings now compare normalized owners.
  • Plugin update migration now preserves object-form slot metadata where possible.

Primary risks:

Risk mitigation:

  • The branch adds one shared resolver rather than multiple ad hoc conversions.
  • Focused tests cover schema, normalization, runtime consumers, doctor paths, provider auth trust, status/tool behavior, and lifecycle migration.
  • This PR avoids write-side canonicalization/enforcement, keeping the blast radius to read compatibility.

Current Branch State

  • Base branch: main
  • Current PR head: b87f4a710c6de665bffcc6c58245d9950a021926
  • Commit: feat(plugins): accept slot owner records
  • Branch shape: one squashed commit over fork main at 26913e60a42e84dd256a682c5239be57f346e244.
  • Local final-shape checks before PR creation:
    • git diff --stat origin/main...fork/feat/plugin-slot-owner-records: 33 files changed, 450 insertions, 75 deletions.
    • git rev-list --left-right --count origin/main...fork/feat/plugin-slot-owner-records: 1 1 because the branch is based on the pinned green fork-main commit one commit behind upstream.
    • Branch verified as one squashed commit over fork/main.
    • Anchored conflict-marker scan clean.
    • git diff --check origin/main...fork/feat/plugin-slot-owner-records: passed.

@kklouzal
kklouzal requested a review from a team as a code owner May 31, 2026 03:11
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation gateway Gateway runtime cli CLI command changes commands Command implementations agents Agent runtime and tooling triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. size: L labels May 31, 2026
@clawsweeper

clawsweeper Bot commented May 31, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed June 27, 2026, 10:50 AM ET / 14:50 UTC.

Summary
The PR widens plugins.slots.memory and plugins.slots.contextEngine from string-only values to string-or-{ owner } records and routes many slot consumers through a shared owner-normalization helper.

PR surface: Source +59, Tests +312, Docs +4. Total +375 across 33 files.

Reproducibility: yes. for the blocking defects: the PR diff shows duplicate imports, and source inspection shows object-form memory slots can reach a raw string comparison in Active Memory. For the broader requested behavior, this is a config-contract feature rather than a current-main bug report.

Review metrics: 1 noteworthy metric.

  • Plugin slot config fields: 2 widened, 0 removed. plugins.slots.memory and plugins.slots.contextEngine change from string-only to string-or-owner-record values, which is a persisted config compatibility surface.

Stored data model
Persistent data-model change detected: migration/backfill/repair: docs/tools/plugin.md, migration/backfill/repair: src/commands/doctor/shared/context-engine-host-compat.test.ts, vector/embedding metadata: src/config/config-misc.test.ts, vector/embedding metadata: src/plugins/provider-auth-choice-helpers.test.ts, vector/embedding metadata: src/plugins/update.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #70823
Summary: This PR is the active candidate implementation for the slot owner-record RFC, while the memory role-slot work is adjacent architecture rather than the same fix.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦪 silver shellfish
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:

  • [P1] Fix duplicate imports, unsupported docs, and incomplete raw slot-reader coverage.
  • [P1] Add redacted exact-head terminal output or logs for b87f4a710c6de665bffcc6c58245d9950a021926.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The PR body includes useful prior terminal output, but it explicitly says the detailed proof was collected before the final squash and exact-head proof has not been rerun for b87f4a7. 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] Exact-head real behavior proof is still missing for the pushed squash, and this external PR changes a persisted config contract.
  • [P1] The canonical RFC for object-form slot owners is stale-closed, so maintainers still need to explicitly sponsor the config/API direction before merge.
  • [P1] The CLI plugin update command still has a raw slot-reference preflight that may miss object-form owners even though the lower-level update helper is changed.

Maintainer options:

  1. Repair and prove current head (recommended)
    Fix the compile/docs/raw-reader defects and add redacted exact-head terminal output or logs proving the widened slot shape through the affected runtime, auth, doctor, update, and bundled plugin paths.
  2. Sponsor the config contract
    A maintainer can explicitly accept { owner } slot records as an API direction, but should keep the merge blocked until upgrade and auth-provider proof are current.
  3. Pause behind the stale RFC
    If maintainers are not ready to accept the object-form config contract, keep or close the PR as product direction rather than merging the implementation by default.

Next step before merge

  • [P1] Human handling is needed because exact-head contributor proof is insufficient and maintainers still need to accept the wider persisted config contract before merge.

Security
Cleared: No dependency, workflow, package, secret, or supply-chain surface changes were found; auth-provider trust semantics remain a merge risk, not a separate supply-chain concern.

Review findings

  • [P1] Normalize Active Memory's memory slot reader — src/config/zod-schema.ts:272
  • [P1] Remove the duplicate imports — src/memory-host-sdk/dreaming.ts:10-12
  • [P2] Remove or implement the legacy manifest field claim — docs/plugins/manifest.md:1438
Review details

Best possible solution:

Repair the branch so every raw slot reader that can receive OpenClawConfig understands object-form owners, remove unsupported docs claims, refresh exact-head proof, and then have a maintainer explicitly accept the object-form slot contract before merge.

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

Yes for the blocking defects: the PR diff shows duplicate imports, and source inspection shows object-form memory slots can reach a raw string comparison in Active Memory. For the broader requested behavior, this is a config-contract feature rather than a current-main bug report.

Is this the best way to solve the issue?

No. A shared read helper is a good core shape, but the current branch is incomplete because it accepts object-form slot values before all relevant raw config readers and docs are aligned.

Full review comments:

  • [P1] Normalize Active Memory's memory slot reader — src/config/zod-schema.ts:272
    After this schema accepts { owner: "memory-lancedb" }, Active Memory still checks the raw slot with cfg?.plugins?.slots?.memory === "memory-lancedb". That object-form config will skip the LanceDB memory_recall default and fall back to memory_search/memory_get, so update this reader through a supported SDK/helper and add coverage for the owner-record form.
    Confidence: 0.93
  • [P1] Remove the duplicate imports — src/memory-host-sdk/dreaming.ts:10-12
    The PR adds a second import for resolveAgentWorkspaceDir, resolveDefaultAgentId, and OpenClawConfig in the same module, which should trigger duplicate identifier/typecheck failures before the new dreaming-slot behavior can ship.
    Confidence: 0.98
  • [P2] Remove or implement the legacy manifest field claim — docs/plugins/manifest.md:1438
    The docs now say providerDiscoveryEntry is a legacy spelling that still works, but the manifest parser and registry only expose providerCatalogEntry. That documents an unsupported plugin manifest API and would mislead plugin authors unless the code actually accepts it.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 4010b81a77f4.

Label changes

Label justifications:

  • P2: This is a bounded but cross-cutting config/plugin feature with normal backlog urgency rather than a current user-breaking regression.
  • merge-risk: 🚨 compatibility: The PR widens persisted plugins.slots.* values and multiple readers must agree on string, object, default, and disabled semantics.
  • merge-risk: 🚨 auth-provider: Provider auth aliases and env-var trust now depend on normalized contextEngine owners for selected workspace plugins.
  • merge-risk: 🚨 availability: Startup plugin planning, context-engine resolution, memory status/tool-disable, update, uninstall, and doctor paths can fail or fall back incorrectly if any slot reader still assumes strings.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦪 silver shellfish.
  • 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 useful prior terminal output, but it explicitly says the detailed proof was collected before the final squash and exact-head proof has not been rerun for b87f4a7. 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 +59, Tests +312, Docs +4. Total +375 across 33 files.

View PR surface stats
Area Files Added Removed Net
Source 17 120 61 +59
Tests 13 322 10 +312
Docs 3 8 4 +4
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 33 450 75 +375

What I checked:

  • Repository policy applied: Root and scoped policy require whole-surface review for plugin APIs, persisted config, provider auth, docs, and plugin boundaries; extensions/AGENTS.md says bundled plugins should be treated like the third-party plugin boundary. (AGENTS.md:1, 4010b81a77f4)
  • Live PR state and proof gap: Live PR metadata shows this PR is open and draft at head b87f4a710c6de665bffcc6c58245d9950a021926; the body still says the detailed proof was collected before the final squash and exact-head proof has not been rerun for that head. (b87f4a710c6d)
  • Duplicate import defect: The PR diff adds duplicate imports for resolveAgentWorkspaceDir, resolveDefaultAgentId, and OpenClawConfig in src/memory-host-sdk/dreaming.ts, which should fail TypeScript duplicate identifier checks. (src/memory-host-sdk/dreaming.ts:10, b87f4a710c6d)
  • Unsupported manifest docs claim: The PR adds a providerDiscoveryEntry legacy-spelling claim, but code search only found providerCatalogEntry parser/registry support and no providerDiscoveryEntry symbol. Public docs: docs/plugins/manifest.md. (docs/plugins/manifest.md:1438, b87f4a710c6d)
  • Incomplete raw slot-reader coverage: Active Memory still checks cfg?.plugins?.slots?.memory === "memory-lancedb"; once the schema accepts { owner: "memory-lancedb" }, that object-form config would skip the LanceDB memory_recall default and use the memory-core tool defaults. (extensions/active-memory/index.ts:479, 4010b81a77f4)
  • Normalized readers checked: Several apparent raw slot references are safe because they operate on normalizePluginsConfig() output, including effective plugin IDs, activation state, memory runtime, and doctor memory search; this narrows the concrete incomplete-reader finding to raw OpenClawConfig consumers. (src/plugins/effective-plugin-ids.ts:100, 4010b81a77f4)

Likely related people:

  • Sebastian Slight: Commit cef6b16d14ce6d0c717adb27dd90664ddd5cdfe2 introduced the exclusive plugin slot helper that this PR extends. (role: introduced behavior; confidence: medium; commits: cef6b16d14ce; files: src/plugins/slots.ts)
  • fuller-stack-dev: Merged work in feat(plugins): support multi-kind plugins for dual slot ownership #57507 updated slot-kind helpers and multi-kind ownership across src/plugins/slots.ts, manifest parsing, loader, registry, and config validation. (role: adjacent feature contributor; confidence: high; commits: 235908c30e1b; files: src/plugins/slots.ts, src/plugins/manifest.ts, src/plugins/manifest-registry.ts)
  • vincentkoc: Recent plugin manifest/activation history and fix(plugins): scope install slot selection #75640 cover slot selection, install activation, and plugin loading performance concerns adjacent to this PR. (role: recent area contributor; confidence: high; commits: 70095f08f471, 3ceba442b77d, b7b384679379; files: src/plugins/slots.ts, src/plugins/manifest-registry.ts, src/plugins/gateway-startup-plugin-ids.ts)
  • steipete: CLI update/config mutation flow history includes extraction and source-snapshot refactors that are relevant to the raw slot-reference preflight in src/cli/plugins-update-command.ts. (role: adjacent owner; confidence: medium; commits: 5920ea838d51, 47216702f4f7; files: src/cli/plugins-update-command.ts, src/plugins/update.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.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 31, 2026
@kklouzal
kklouzal marked this pull request as draft June 4, 2026 04:49
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jun 29, 2026
@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label Jul 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling cli CLI command changes commands Command implementations docs Improvements or additions to documentation gateway Gateway runtime merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: L stale Marked as stale due to inactivity status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RFC: machine-readable memory-slot ownership — plugins.slots.<slot>.owner

2 participants