Skip to content

Memory wiki cache manifest and claim supersession#85055

Closed
Artifact-LV wants to merge 12 commits into
openclaw:mainfrom
Artifact-LV:codex/memory-wiki-cache-manifest-supersession
Closed

Memory wiki cache manifest and claim supersession#85055
Artifact-LV wants to merge 12 commits into
openclaw:mainfrom
Artifact-LV:codex/memory-wiki-cache-manifest-supersession

Conversation

@Artifact-LV

@Artifact-LV Artifact-LV commented May 21, 2026

Copy link
Copy Markdown

Summary

  • separate wiki.status read purity from write-scoped wiki.refresh
  • emit strict wiki-cache-manifest.json atomically from wiki refresh/compile
  • add deterministic claim-key normalization and claim reconciliation with schema coverage
  • allow the existing qa-lab scenario fixtures in the optional Knip unused-file allowlist so the dependency gate reflects test-only scenario imports

Real behavior proof

  • Behavior or issue addressed: wiki.status must stay read-only, wiki.refresh must own cache rebuild writes, and memory-wiki freshness/manifest behavior must be proven against a real WSL OpenClaw vault instead of only mocks.
  • Real environment tested: Desktop WSL host desktop-bg91j4g, clean OpenClaw worktree /tmp/openclaw-memory-wiki-sync-1779386309, live vault/cache under /home/chase/.openclaw/wiki/.openclaw-wiki/cache.
  • Exact steps or command run after the patch: From the clean WSL OpenClaw worktree I ran the updated memory-wiki vitest shard, pnpm tsgo, extension lint, plugin contract guardrail, git diff --check -- extensions/memory-wiki, pnpm deadcode:unused-files, node scripts/run-vitest.mjs run test/scripts/check-deadcode-unused-files.test.ts --maxWorkers=1, and then ran the patched wiki refresh --json path against the live vault followed by schema validation of the emitted manifest and all claim rows.
  • Evidence after fix: Copied live output from the real WSL cache rebuild showed manifest path /home/chase/.openclaw/wiki/.openclaw-wiki/cache/wiki-cache-manifest.json, pageCount: 1313, claimCount: 1933, updatedFilesCount: 3, manifestUpdated: true, source_import.updated_count: 5, source_import.skipped_count: 1260, missing_statement_count: 0, agent-digest.json hash prefix dddb9ac82de7, and claims.jsonl hash prefix 565137ebe75c. The follow-up live schema validation output was manifestValid: true, claimRowsChecked: 1933, invalidClaims: 0.
  • Observed result after fix: The real refresh path emitted a strict atomic wiki-cache-manifest.json with cache hashes and metrics, the live manifest and 1,933 claim rows validated successfully, and local verification passed for pnpm exec vitest run --config test/vitest/vitest.extension-memory.config.ts extensions/memory-wiki (27 files / 135 tests), pnpm tsgo, pnpm lint -- extensions/memory-wiki, the plugin package contract guardrail, pnpm deadcode:unused-files, and the deadcode allowlist unit test.
  • What was not tested: No additional gaps known for the P0/P1/P2 memory-wiki slice.

Verification

  • pnpm exec vitest run --config test/vitest/vitest.extension-memory.config.ts extensions/memory-wiki (27 files / 135 tests passed)
  • pnpm tsgo
  • pnpm lint -- extensions/memory-wiki
  • node scripts/run-vitest.mjs run --config test/vitest/vitest.contracts-plugin.config.ts src/plugins/contracts/plugin-sdk-package-contract-guardrails.test.ts --maxWorkers=1
  • pnpm deadcode:unused-files
  • node scripts/run-vitest.mjs run test/scripts/check-deadcode-unused-files.test.ts --maxWorkers=1
  • git diff --check -- extensions/memory-wiki scripts/deadcode-unused-files.allowlist.mjs

@openclaw-barnacle openclaw-barnacle Bot added extensions: memory-wiki size: XL triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 21, 2026
@clawsweeper

clawsweeper Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed July 1, 2026, 5:43 AM ET / 09:43 UTC.

Summary
The branch adds memory-wiki cache manifest and freshness gating, claim reconciliation, new refresh and receipt tools/Gateway methods, schemas, docs, and tests.

PR surface: Source +2181, Tests +1254, Docs +43. Total +3478 across 30 files.

Reproducibility: yes. for the review blockers by source inspection: the PR head's refresh path is local-only, prompt injection requires a new manifest absent from current caches, and claim-key inference hardcodes broad local-memory patterns.

Review metrics: 2 noteworthy metrics.

  • New public memory-wiki surfaces: 2 model tools, 2 Gateway methods, 3 schemas added. These are model-facing, user-facing, and persistent cache-contract surfaces that need API, docs, and upgrade behavior settled before merge.
  • Persistent artifacts: 1 cache manifest, 1 receipt log added. wiki-cache-manifest.json and memory receipt NDJSON affect upgraded cache validity and memory-session behavior beyond ordinary code correctness.

Stored data model
Persistent data-model change detected: database schema: extensions/memory-wiki/src/prompt-section.test.ts, persistent cache schema: extensions/memory-wiki/docs/AGENT_MEMORY_CONTRACT.md, persistent cache schema: extensions/memory-wiki/schemas/wiki-cache-manifest.schema.json, persistent cache schema: extensions/memory-wiki/src/cli.test.ts, persistent cache schema: extensions/memory-wiki/src/compile.test.ts, persistent cache schema: extensions/memory-wiki/src/compile.ts, and 63 more. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🦞 diamond lobster
Patch quality: 🧂 unranked krab
Result: blocked by patch quality or review findings.

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

Rank-up moves:

  • Refresh the branch to resolve the DIRTY/CONFLICTING merge state.
  • Route bridge-mode CLI refresh through the Gateway-owned runtime.
  • [P2] Remove hardcoded claim-key inference and add the maintainer-approved migration/docs contract for manifest and receipt surfaces.

Risk before merge

  • [P1] Existing users with fresh pre-manifest agent-digest.json and claims.jsonl may lose compiled memory prompt injection until a write-scoped refresh or migration creates wiki-cache-manifest.json.
  • [P1] Bridge-mode users who replace status heartbeats with CLI wiki refresh can rebuild against local CLI state instead of the active Gateway-owned memory context.
  • [P1] The PR adds model tools, Gateway methods, exported APIs, schemas, and receipt telemetry without a maintainer-approved public docs and upgrade contract.
  • [P1] Hardcoded OpenClaw-specific claim-key inference can group unrelated memory claims under the same logical key and produce incorrect contested or superseded state.
  • [P1] The live PR is currently DIRTY/CONFLICTING, so maintainers cannot treat the current patch as the final merge result until it is refreshed.

Maintainer options:

  1. Fix Upgrade, Routing, And Docs Before Merge (recommended)
    Preserve or migrate pre-manifest caches, route bridge refresh through Gateway state, remove hardcoded claim-key inference, and document the new public surfaces before landing.
  2. Accept The Compatibility Break Explicitly
    Maintainers can intentionally own fail-closed manifest gating and the new receipt/API contracts, but the PR should state the operator impact and supported migration path first.
  3. Pause For Memory-Wiki API Direction
    If refresh, receipt, and manifest behavior are still product direction rather than approved plugin contracts, pause this branch or replace it with a narrower design.

Next step before merge

  • [P2] The remaining action is maintainer/API compatibility judgment plus a branch refresh, not a safe autonomous repair lane.

Security
Cleared: No concrete security or supply-chain issue found; the diff does not change dependencies, lockfiles, CI, permissions, downloads, or secret handling, and receipt writes use validation plus the existing regular-file append helper.

Review findings

  • [P1] Use generic claim keys instead of hardcoded memory facts — extensions/memory-wiki/src/claim-key.ts:25-39
  • [P1] Route CLI refresh through the Gateway in bridge mode — extensions/memory-wiki/src/cli.ts:549-558
  • [P1] Preserve upgraded caches until manifest migration is approved — extensions/memory-wiki/src/prompt-section.ts:105-111
Review details

Best possible solution:

Refresh the branch, route bridge-mode refresh through the Gateway-owned runtime, remove hardcoded local-domain claim inference, and land manifest/receipt gating only with an explicit upgrade and docs contract.

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

Yes for the review blockers by source inspection: the PR head's refresh path is local-only, prompt injection requires a new manifest absent from current caches, and claim-key inference hardcodes broad local-memory patterns.

Is this the best way to solve the issue?

No as currently shaped. The manifest and receipt direction may be useful, but the best merge shape needs generic claim identity, bridge-safe refresh routing, and explicit upgrade/docs approval.

Full review comments:

  • [P1] Use generic claim keys instead of hardcoded memory facts — extensions/memory-wiki/src/claim-key.ts:25-39
    resolveClaimKey maps broad statements about OpenClaw candidates and livedramic host location to fixed keys. That can make unrelated claims contest or supersede each other just because their prose matches a local pattern; rely on explicit claimKey frontmatter or the stable hash fallback instead.
    Confidence: 0.88
  • [P1] Route CLI refresh through the Gateway in bridge mode — extensions/memory-wiki/src/cli.ts:549-558
    The new wiki refresh command is documented as the replacement for callers that used status as a heartbeat, but it always runs local sync/compile. Bridge-mode status already routes through the Gateway, so replacing status with CLI refresh can rebuild the wrong memory context.
    Confidence: 0.9
  • [P1] Preserve upgraded caches until manifest migration is approved — extensions/memory-wiki/src/prompt-section.ts:105-111
    Prompt injection now requires wiki-cache-manifest.json in addition to digest and claims. Current released caches do not have that manifest, so upgraded users with fresh compiled memory will lose the prompt supplement until a write-scoped refresh succeeds or a migration creates the manifest.
    Confidence: 0.9
  • [P2] Document the new memory-wiki public surfaces — extensions/memory-wiki/index.ts:43-46
    This registers wiki_refresh and wiki_record_receipt plus new Gateway methods and schemas, but the public memory-wiki docs still describe only the old tools and cache files. Operators need the supported refresh, receipt, manifest, and upgrade contract before merge.
    Confidence: 0.86

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 cf2efbe5d515.

Label changes

Label justifications:

  • P2: This is a normal-priority memory-wiki plugin improvement with important compatibility risks but limited blast radius outside the plugin.
  • merge-risk: 🚨 compatibility: The PR changes public tools, Gateway methods, exported APIs, docs expectations, and cache artifacts that existing users and automation may depend on.
  • merge-risk: 🚨 session-state: The PR changes whether compiled memory context is injected into agent prompts and how claim state is reconciled from persisted wiki cache data.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦞 diamond lobster and patch quality is 🧂 unranked krab.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (live_output): The PR body includes after-fix live WSL vault output showing refresh emitted a manifest, hashes, and schema validation for 1,933 claim rows, plus focused verification commands.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix live WSL vault output showing refresh emitted a manifest, hashes, and schema validation for 1,933 claim rows, plus focused verification commands.
Evidence reviewed

PR surface:

Source +2181, Tests +1254, Docs +43. Total +3478 across 30 files.

View PR surface stats
Area Files Added Removed Net
Source 17 2265 84 +2181
Tests 12 1294 40 +1254
Docs 1 43 0 +43
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 30 3602 124 +3478

What I checked:

Likely related people:

  • Vincent Koc: Introduced and carried the central memory-wiki compile, Gateway, digest, and prompt behavior that this PR changes. (role: feature-history owner; confidence: high; commits: 516a43f9f28c, 947a43dae311, 6a559f0293f4; files: extensions/memory-wiki/src/compile.ts, extensions/memory-wiki/src/cli.ts, extensions/memory-wiki/src/gateway.ts)
  • Peter Steinberger: Added the current memory-wiki public docs and has adjacent refactor history on the same plugin surface, making him relevant for the new docs/API contract review. (role: adjacent docs/refactor contributor; confidence: medium; commits: 9eacd29138a7, 4fa961d4f149, dffa88f39615; files: docs/plugins/memory-wiki.md, extensions/memory-wiki/src/compile.ts)
  • Momo: Most recent current-main blame on the central memory-wiki files points to a broad July 1 touch; the commit appears cross-cutting, so this is a weaker routing signal than the feature-history trail. (role: recent area contributor; confidence: low; commits: 59df350f3c18; files: extensions/memory-wiki/src/compile.ts, extensions/memory-wiki/src/cli.ts, extensions/memory-wiki/src/prompt-section.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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a9f5d8e1de

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread extensions/memory-wiki/src/compile.ts Outdated
Comment on lines +1342 to +1343
sortClaims(page).map((claim, index) => {
const claimId = buildStableClaimId(page, claim, index);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Derive fallback claim IDs from stable input order

Fallback claim_id generation currently depends on index from sortClaims(page), and that sort includes freshness ranking (assessClaimFreshness) that changes as wall-clock time advances. For id-less claims, an unchanged page can therefore emit different claim_id values across compiles, which breaks stable claim references and causes churn in supersession metadata and downstream claim-id lookups.

Useful? React with 👍 / 👎.

Comment thread extensions/memory-wiki/src/compile.ts Outdated
Comment on lines +1373 to +1377
const reconciledById = new Map(
reconcileClaims({ claims: raw.map((entry) => entry.input) }).map((claim) => [
claim.claim_id,
claim,
]),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve distinct claims when claim_id values collide

Reconciled claims are indexed in a Map by claim_id only, so if two input claims share the same id (for example, copied frontmatter across pages), the later entry overwrites the earlier one. The subsequent lookup reuses that single reconciled object for both raw claims, which can assign the wrong statement/status/supersession fields to one record and corrupt claims.jsonl output.

Useful? React with 👍 / 👎.

@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. labels May 21, 2026
@clawsweeper

clawsweeper Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

🔥 Warming up: real-behavior proof passed; findings, security review, or rank-up moves are still in progress.

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.
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.

@Artifact-LV
Artifact-LV force-pushed the codex/memory-wiki-cache-manifest-supersession branch from a9f5d8e to ac2eb90 Compare May 21, 2026 18:22
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 21, 2026
@openclaw-barnacle openclaw-barnacle Bot added the scripts Repository scripts label May 21, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. 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. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 21, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 21, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 21, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 21, 2026
@Artifact-LV

Copy link
Copy Markdown
Author

@clawsweeper hatch

@Artifact-LV

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper PR egg hatch requested.

I queued a comment sync for this PR. If the egg is hatchable, ClawSweeper will generate the image once and update the existing review comment.
Action: PR egg hatch queued (workflow sweep.yml, event repository_dispatch).
The ASCII egg stays as the fallback.

@clawsweeper

clawsweeper Bot commented May 21, 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 the rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. label May 21, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 21, 2026
@Artifact-LV

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. and removed status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels May 21, 2026
@clawsweeper

clawsweeper Bot commented May 21, 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 status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. labels May 21, 2026
@Artifact-LV Artifact-LV reopened this May 22, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the scripts Repository scripts label May 23, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 23, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 23, 2026
@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:

@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 16, 2026
@openclaw-barnacle

Copy link
Copy Markdown

Closing due to inactivity.
If you believe this PR should be revived, post in #clawtributors on Discord to talk to a maintainer.
That channel is the escape hatch for high-quality PRs that get auto-closed.

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

Labels

extensions: memory-wiki 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. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: XL stale Marked as stale due to inactivity status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant