Skip to content

fix(memory): skip placeholder short-term promotions#95598

Open
harjothkhara wants to merge 1 commit into
openclaw:mainfrom
harjothkhara:codex/80582-memory-placeholder-normalization
Open

fix(memory): skip placeholder short-term promotions#95598
harjothkhara wants to merge 1 commit into
openclaw:mainfrom
harjothkhara:codex/80582-memory-placeholder-normalization

Conversation

@harjothkhara

@harjothkhara harjothkhara commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Closes #80582.

Short-term memory promotion could treat markdown and QMD scaffolding as durable content. That included empty list/checklist/fence/table fragments, placeholder daily-note headings, generic daily/dreaming headings, QMD hunk wrappers, collapsed persisted heading prefixes, and mixed snippets that carried structural text alongside real content.

Why This Change Was Made

The fix centralizes short-term snippet promotability in the promotion resolver and applies that resolver across recall recording, store normalization, grounded candidates, ranking, relocation/rehydration, and direct promotion application.

Placeholder-only snippets are skipped. Mixed snippets keep real content while dropping structural wrappers such as QMD hunk headers, generic daily/dreaming headings, collapsed heading prefixes, and bullet-prefixed collapsed heading prefixes. Ordinary non-generic bullets remain intact.

The diagnostic skipped recall event now has an additive unpromotable-short-term-snippet reason, with the Plugin SDK API baseline hash regenerated for the exported event type change.

User Impact

Memory promotion should carry actual remembered content instead of daily-note scaffolding or QMD placeholder text. Existing meaningful snippets still promote, and legacy event readers continue to read recorded recall events while diagnostic readers can see skipped recall records.

Evidence

Real-behavior proof — actual MEMORY.md written to disk

This drives the real promotion pipeline end-to-end against a temp workspace — rankShortTermPromotionCandidates -> applyShortTermPromotions — with real note files on disk and the real SQLite recall store. No mocks; the only inputs are seeded recalls (one markdown placeholder skeleton ## Tagesnotizen\n-, one meaningful note), both crossing promotion thresholds. The transcript below is the MEMORY.md the production code wrote.

Before — origin/main @ e43bd3d57bc (applied: 2 — the placeholder is promoted into long-term memory):

## Promoted From Short-Term Memory (2026-07-12)

<!-- openclaw-memory-promotion:placeholder -->
- ## Tagesnotizen - [score=0.532 signals=4 recalls=4 avg=0.900 source=memory/2026-04-03.md:1-2]
<!-- openclaw-memory-promotion:meaningful -->
- Keep gateway restarts supervised. [score=0.532 signals=4 recalls=4 avg=0.900 source=memory/2026-04-04.md:3-3]

After — this branch @ 144693f8816 (applied: 1 — the placeholder is excluded, the real note is kept):

## Promoted From Short-Term Memory (2026-07-12)

<!-- openclaw-memory-promotion:meaningful -->
- Keep gateway restarts supervised. [score=0.532 signals=4 recalls=4 avg=0.900 source=memory/2026-04-04.md:3-3]

The harness is a vitest spec asserting the real file contains Keep gateway restarts supervised. and does not contain Tagesnotizen; it passes on this branch and fails on main (AssertionError: expected '# Long-Term Memory…' not to contain 'Tagesnotizen').

Reproduce (drop into extensions/memory-core/src/ and pnpm test it on either checkout)
// Real-behavior proof for issue #80582 / PR #95598.
// Drives the ACTUAL short-term promotion pipeline (rank -> apply) against a real
// temp workspace and prints the real MEMORY.md written to disk. No mocks: the
// only inputs are a seeded recall store and real filesystem writes by the
// production `applyShortTermPromotions` path. Run:
//   pnpm test extensions/memory-core/src/short-term-promotion.proof.test.ts
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { afterAll, beforeAll, expect, it } from "vitest";
import { configureMemoryCoreDreamingStateForTests } from "./dreaming-state.js";
import {
  applyShortTermPromotions,
  rankShortTermPromotionCandidates,
  testing,
} from "./short-term-promotion.js";

let root: string;
beforeAll(async () => {
  await configureMemoryCoreDreamingStateForTests();
  root = await fs.mkdtemp(path.join(os.tmpdir(), "proof-80582-"));
});
afterAll(async () => {
  await fs.rm(root, { recursive: true, force: true });
});

it("PROOF #80582: real MEMORY.md excludes placeholder skeletons, keeps meaningful notes", async () => {
  const workspaceDir = path.join(root, "ws");
  await fs.mkdir(path.join(workspaceDir, "memory"), { recursive: true });

  // Real note files on disk backing the recall entries (the promotion path
  // rehydrates each candidate from its source note before writing).
  await fs.writeFile(
    path.join(workspaceDir, "memory", "2026-04-03.md"),
    "## Tagesnotizen\n-\n",
    "utf8",
  );
  await fs.writeFile(
    path.join(workspaceDir, "memory", "2026-04-04.md"),
    "## Entscheidungen:\n-\n- Keep gateway restarts supervised.\n",
    "utf8",
  );

  // Seed the real recall store the way the running agent would after repeated
  // recalls: two entries that BOTH clear promotion thresholds — one is a
  // markdown placeholder skeleton (heading + empty bullet), one is a real note.
  await testing.writeRawRecallStore(workspaceDir, {
    version: 1,
    updatedAt: "2026-04-04T00:00:00.000Z",
    entries: {
      placeholder: {
        key: "placeholder",
        path: "memory/2026-04-03.md",
        startLine: 1,
        endLine: 2,
        source: "memory",
        snippet: "## Tagesnotizen\n-",
        recallCount: 4,
        dailyCount: 0,
        groundedCount: 0,
        totalScore: 3.6,
        maxScore: 0.95,
        firstRecalledAt: "2026-04-03T00:00:00.000Z",
        lastRecalledAt: "2026-04-04T00:00:00.000Z",
        queryHashes: ["a", "b"],
        recallDays: ["2026-04-03", "2026-04-04"],
        conceptTags: ["notes"],
      },
      meaningful: {
        key: "meaningful",
        path: "memory/2026-04-04.md",
        startLine: 3,
        endLine: 3,
        source: "memory",
        snippet: "- Keep gateway restarts supervised.",
        recallCount: 4,
        dailyCount: 0,
        groundedCount: 0,
        totalScore: 3.6,
        maxScore: 0.95,
        firstRecalledAt: "2026-04-03T00:00:00.000Z",
        lastRecalledAt: "2026-04-04T00:00:00.000Z",
        queryHashes: ["a", "b"],
        recallDays: ["2026-04-03", "2026-04-04"],
        conceptTags: ["notes"],
      },
    },
  });

  const ranked = await rankShortTermPromotionCandidates({
    workspaceDir,
    minScore: 0,
    minRecallCount: 0,
    minUniqueQueries: 0,
  });

  const result = await applyShortTermPromotions({
    workspaceDir,
    candidates: ranked,
    minScore: 0,
    minRecallCount: 0,
    minUniqueQueries: 0,
  });

  const memory = await fs.readFile(result.memoryPath, "utf8").catch(() => "<no MEMORY.md written>");

  const transcript = [
    "================ REAL MEMORY.md ON DISK ================",
    `path: ${path.relative(workspaceDir, result.memoryPath)}`,
    `promotion candidates ranked: ${ranked.map((c) => JSON.stringify(c.snippet)).join(", ") || "(none)"}`,
    `applied: ${result.applied}`,
    "-------------------------------------------------------",
    memory.trimEnd(),
    "=======================================================",
  ].join("\n");
  await fs.writeFile(path.join(os.tmpdir(), "proof-80582-out.txt"), transcript, "utf8");

  // The real file must contain the meaningful note and must NOT contain the
  // placeholder skeleton heading.
  expect(memory).toContain("Keep gateway restarts supervised.");
  expect(memory).not.toContain("Tagesnotizen");
});

Source-level red-green

CI=true pnpm test extensions/memory-core/src/short-term-promotion.test.ts — 99 pass on branch; copying that same test file onto origin/main fails 3 (… to have a length of 1 but got 2), because main records the placeholder skeletons this branch filters. pnpm tsgo:core, pnpm tsgo:extensions, and the plugin-sdk surface budgets are clean.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation extensions: memory-core Extension: memory-core size: L labels Jun 21, 2026
@clawsweeper

clawsweeper Bot commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 13, 2026, 3:04 AM ET / 07:04 UTC.

Summary
Centralizes Markdown/QMD placeholder normalization across short-term memory promotion and adds an exported skipped-recall reason for rejected snippets.

PR surface: Source +274, Tests +333. Total +607 across 4 files.

Reproducibility: yes. at high source confidence: the linked issue, current promotion path, and refreshed red-green filesystem transcript provide a concrete recent-main path where a placeholder candidate reaches MEMORY.md. The reviewer did not independently execute the harness against SHA d614920.

Review metrics: 1 noteworthy metric.

  • Plugin SDK event surface: 1 exported reason type added; 2 reason fields widened. The additive discriminant affects external event consumers and needs explicit compatibility acceptance before merge.

Stored data model
Persistent data-model change detected: unknown-data-model-change: extensions/memory-core/src/short-term-promotion.test.ts, unknown-data-model-change: extensions/memory-core/src/short-term-promotion.ts, vector/embedding metadata: extensions/memory-core/src/short-term-promotion.test.ts, vector/embedding metadata: extensions/memory-core/src/short-term-promotion.ts, vector/embedding metadata: src/memory-host-sdk/events.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #80582
Summary: The linked issue is the canonical report and this PR is its current open implementation candidate; earlier competing PRs are closed unmerged.

Members:

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

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

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

Rank-up moves:

  • Obtain explicit memory-core or Plugin SDK owner acceptance for the new exported reason and persisted-candidate normalization behavior.
  • [P2] Rebase onto current main and resolve or re-run the exact-head required checks before merge.

Risk before merge

  • [P1] The exported skipped-event reason widens a Plugin SDK discriminated union; downstream exhaustive consumers may need updates even though existing serialized readers remain compatible.
  • [P1] Normalization now drops previously persisted candidates matching broad generic scaffold headings, so an incorrect classification could silently suppress a legitimate long-term-memory promotion.
  • [P1] The branch is behind current main and the supplied check digest includes current failures; merge readiness needs an exact-head refresh, although check state does not change the item priority.

Maintainer options:

  1. Approve and verify the SDK addition (recommended)
    Retain the additive reason after owner approval and add or confirm focused coverage for representative external-style exhaustive event consumers and upgrade normalization.
  2. Remove the public event widening
    Keep the memory filtering but report the new diagnostic only through an internal contract, avoiding a new Plugin SDK union member.
  3. Pause the broad normalization change
    Do not merge until maintainers agree that generic scaffold headings and matching persisted candidates should be discarded automatically.

Next step before merge

  • [P2] A memory-core or Plugin SDK owner must decide the exported event and upgrade-normalization contract, then the branch needs an exact-head rebase/check refresh; there is no narrow automated defect to repair.

Maintainer decision needed

  • Question: Should the new unpromotable-short-term-snippet reason become part of the exported Plugin SDK event union, with persisted-candidate filtering accepted as the intended upgrade behavior?
  • Rationale: The filtering fix is technically well-supported, but repository policy treats Plugin SDK changes and persisted state normalization as compatibility-sensitive contracts requiring owner intent rather than automation judgment.
  • Likely owner: vignesh07 — The original promotion-pipeline author has the strongest feature-history connection to both the filtering invariant and its persisted-state behavior.
  • Options:
    • Approve the additive contract (recommended): Keep the exported reason, validate representative legacy and exhaustive consumers, rebase, and land the centralized filtering behavior.
    • Keep the diagnostic internal: Land the promotion filtering but avoid widening the public event union by recording the classification through an internal or existing generic diagnostic path.
    • Narrow the classifier first: Pause landing until generic headings and persisted-candidate cleanup are reduced to a smaller owner-approved structural rule set.

Security
Cleared: The four-file diff adds no dependency, workflow, permission, secret, artifact-download, or executable supply-chain surface, and no concrete security regression was found.

Review details

Best possible solution:

Keep one canonical promotability resolver across every promotion boundary, preserve meaningful multilingual content, and merge only after a memory-core or SDK owner accepts the exported reason contract and exact-head upgrade coverage confirms that only structural candidates are removed.

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

Yes at high source confidence: the linked issue, current promotion path, and refreshed red-green filesystem transcript provide a concrete recent-main path where a placeholder candidate reaches MEMORY.md. The reviewer did not independently execute the harness against SHA d614920.

Is this the best way to solve the issue?

Yes, with one compatibility qualification. A single resolver enforced at all state-entry and apply boundaries is the maintainable root fix; the exported diagnostic reason should remain only with explicit SDK-owner acceptance.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The updated body provides exact-head before/after live output from the production rank-and-apply path using real note files, the real recall store, and the resulting MEMORY.md, showing the placeholder removed while meaningful content remains.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The updated body provides exact-head before/after live output from the production rank-and-apply path using real note files, the real recall store, and the resulting MEMORY.md, showing the placeholder removed while meaningful content remains.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a bounded memory-quality and session-state bug with demonstrated user impact but no emergency runtime, security, or data-loss condition.
  • merge-risk: 🚨 compatibility: The PR widens an exported Plugin SDK event union and may require downstream exhaustive consumers to recognize the new reason.
  • merge-risk: 🚨 session-state: The PR changes normalization and promotion eligibility for persisted recall candidates, which can alter what existing workspaces retain and promote after upgrade.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The updated body provides exact-head before/after live output from the production rank-and-apply path using real note files, the real recall store, and the resulting MEMORY.md, showing the placeholder removed while meaningful content remains.
  • proof: sufficient: Contributor real behavior proof is sufficient. The updated body provides exact-head before/after live output from the production rank-and-apply path using real note files, the real recall store, and the resulting MEMORY.md, showing the placeholder removed while meaningful content remains.
Evidence reviewed

PR surface:

Source +274, Tests +333. Total +607 across 4 files.

View PR surface stats
Area Files Added Removed Net
Source 2 337 63 +274
Tests 2 333 0 +333
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 4 670 63 +607

What I checked:

Likely related people:

  • vignesh07: Introduced the dreaming promotion pipeline, weighted recall thresholds, and its central source and regression-test surfaces in commit 4c1022c. (github.com) (role: original feature-history owner; confidence: high; commits: 4c1022c73b39; files: extensions/memory-core/src/short-term-promotion.ts, extensions/memory-core/src/short-term-promotion.test.ts, extensions/memory-core/openclaw.plugin.json)
  • gumadeiras: Added prior self-ingestion and dreaming-contamination hardening that this classifier extends. (github.com) (role: adjacent contamination-guard contributor; confidence: high; commits: 0c4e0d703023; files: extensions/memory-core/src/short-term-promotion.ts, extensions/memory-core/src/short-term-promotion.test.ts, extensions/memory-core/src/dreaming-phases.ts)
  • solomonneas: Authored the merged staged-candidate contamination fix on the same promotion and test paths. (github.com) (role: recent adjacent contributor; confidence: high; commits: 314903417fcc; files: extensions/memory-core/src/short-term-promotion.ts, extensions/memory-core/src/short-term-promotion.test.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.
Review history (3 earlier review cycles)
  • reviewed 2026-06-29T21:04:36.382Z sha 2b60198 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-13T01:50:33.452Z sha 144693f :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-13T05:00:10.766Z sha 144693f :: needs real behavior proof before merge. :: none

@harjothkhara
harjothkhara marked this pull request as ready for review June 21, 2026 17:30
@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: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels Jun 21, 2026
@harjothkhara
harjothkhara force-pushed the codex/80582-memory-placeholder-normalization branch from aa5ff16 to f8fc15a Compare June 21, 2026 20:28
@openclaw-barnacle openclaw-barnacle Bot removed the docs Improvements or additions to documentation label Jun 21, 2026
@openclaw-barnacle openclaw-barnacle Bot added the scripts Repository scripts label Jun 22, 2026
@harjothkhara
harjothkhara force-pushed the codex/80582-memory-placeholder-normalization branch from 857ed12 to 5952040 Compare June 22, 2026 21:15
@openclaw-barnacle openclaw-barnacle Bot added the docs Improvements or additions to documentation label Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

The stale proof blocker has been addressed on head 595204057753f1f826c6e82a4e5a3b6d531db3c4.

Evidence added to the PR body:

  • Fresh GitHub check-run poll: 102 total; 70 success, 30 skipped, 1 neutral, 1 cancelled auto-response; 0 blocking or pending runs. The former checks-node-compact-small-whole-2 failure is green on this head.
  • Real memory-workspace proof using temp OPENCLAW_STATE_DIR and temp workspace, importing the source modules directly. The proof recorded both placeholder @@ -1,2\n## Tagesnotizen\n- and meaningful Rotate backups before deploy. hits from memory/daily/2026-04-19.md.
  • Proof result: recall store retained only memory/daily/2026-04-19.md:3-3 with Rotate backups before deploy., promotion applied 1 candidate, MEMORY.md contains the meaningful snippet, and memoryContainsPlaceholderHeading is false.
  • Focused local checks remain green: SDK API baseline, SDK surface report, test/scripts/plugin-sdk-surface-report.test.ts, and the memory/plugin-SDK Vitest files listed in the PR body.

The spaced fence info-string gap from the previous review is fixed and covered by focused reject/preserve tests.

@clawsweeper

clawsweeper Bot commented Jun 22, 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.

@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. and removed 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. labels Jun 23, 2026
@harjothkhara
harjothkhara force-pushed the codex/80582-memory-placeholder-normalization branch from 5952040 to 2b60198 Compare June 29, 2026 20:52
@openclaw-barnacle openclaw-barnacle Bot removed the docs Improvements or additions to documentation label Jun 29, 2026
@harjothkhara
harjothkhara force-pushed the codex/80582-memory-placeholder-normalization branch from 2b60198 to 144693f Compare July 13, 2026 01:45
@openclaw-barnacle openclaw-barnacle Bot removed the scripts Repository scripts label Jul 13, 2026
@clawsweeper clawsweeper Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jul 13, 2026
@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. and removed 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 Jul 13, 2026
@harjothkhara

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — rebuilt on current main with red-green proof in the body (fails on main, passes on this branch).

@clawsweeper

clawsweeper Bot commented Jul 13, 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:

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jul 13, 2026
@harjothkhara

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — added a real filesystem MEMORY.md promotion transcript (before/after on main vs this branch): main writes the placeholder skeleton into long-term memory, this branch keeps only the real note.

@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. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extensions: memory-core Extension: memory-core merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: L status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Memory: skip markdown placeholder snippets during short-term promotion

1 participant