Skip to content

feat(signal): add target aliases#95738

Merged
jesse-merhi merged 6 commits into
mainfrom
jesse/signal-aliases-directory
Jul 3, 2026
Merged

feat(signal): add target aliases#95738
jesse-merhi merged 6 commits into
mainfrom
jesse/signal-aliases-directory

Conversation

@jesse-merhi

@jesse-merhi jesse-merhi commented Jun 22, 2026

Copy link
Copy Markdown
Member

What Problem This Solves

Signal delivery targets are hard to reuse because DMs can be phone numbers or UUIDs, while groups use opaque group IDs. This adds OpenClaw-side Signal aliases so users can configure friendly names like signal:me or signal:ops once and use them in normal Signal delivery paths.

Why This Change Was Made

The alias mapping belongs in the Signal plugin boundary because it is Signal-specific target normalization, not a cross-channel address book or Signal contact mutation. The implementation resolves config-backed aliases before outbound delivery, default target lookup, approval authorization/routing, directory listing, and outbound session route construction so Signal history and approval reactions use canonical Signal targets.

This intentionally does not mutate Signal contacts, discover live Signal contacts, or add wildcard/broad Signal access behavior. The only shared outbound change keeps directory-cache entries query-scoped so an exact alias lookup or miss cannot poison later peer/group resolution for Signal or sibling channel adapters.

User Impact

Users can configure channels.signal.aliases or channels.signal.accounts.<id>.aliases with DM and group targets, then send to aliases such as signal:ops. Per-account aliases inherit top-level aliases and may override them. Invalid, blank, or recursive aliases fail before delivery with a clear Signal alias error.

The Signal directory surface can list configured aliases as peers or groups, and exact alias lookups keep peer and group targets separated. Aliases are config-backed only; they do not imply live Signal contact discovery or contact updates.

Evidence

Manual Signal proof from Jesse:

  • Live gateway was running from worktree/branch openclaw-signal-aliases-directory / jesse/signal-aliases-directory.
  • Temp config mapped channels.signal.aliases.ops to group:l+j9mBRLUCHN+2xue4rlVLOiEbVsKi7yF3WacQazOB0= and channels.signal.aliases.me to Jesse's configured E.164 alias, with channels.signal.defaultTo = "signal:me".
  • Safe ingress stayed narrow: DMs disabled, group policy allowlist, Testing realm IDs only.
  • openclaw message send --channel signal --target signal:ops --message "alias ops smoke ..." --json resolved to group:l+j9mBRLUCHN+2xue4rlVLOiEbVsKi7yF3WacQazOB0=, and Jesse confirmed it appeared in the Testing realm.
  • From the Testing realm, Jesse asked the agent to message him via signal:me; Jesse confirmed the response was visible in the intended Signal DM.

Automated checks on the final reviewed branch at 3ac6eb093a:

  • node scripts/run-vitest.mjs extensions/signal/src/aliases.test.ts extensions/signal/src/core.test.ts extensions/signal/src/approval-auth.test.ts extensions/signal/src/approval-handler.runtime.test.ts extensions/signal/src/approval-reactions.test.ts extensions/signal/src/config-schema.test.ts src/infra/outbound/target-resolver.test.ts src/infra/outbound/directory-cache.test.ts passed: 2 Vitest shards, 8 files, 117 tests.
  • pnpm tsgo:prod passed.
  • pnpm config:channels:check passed.
  • pnpm docs:list passed.
  • git diff --check origin/main...HEAD passed.
  • ./node_modules/.bin/oxfmt --check --threads=1 <changed TypeScript files> passed: 20 files.
  • Native review and independent cold review phases completed clean on the final origin/main...HEAD diff after the formatted media alias coverage fix.

Known proof gap:

  • No new Signal alias-resolution log or returned metadata field was added in this closeout. The shared outbound target resolution contract currently returns the canonical to, so this PR relies on message send --json resolved-target evidence and manual confirmation; gateway logs still do not literally show signal:me resolving to Jesse's configured E.164 alias.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: signal Channel integration: signal size: L maintainer Maintainer-authored PR labels Jun 22, 2026
@clawsweeper

clawsweeper Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

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

Summary
Adds config-backed Signal target aliases, docs/schema/types support, alias-aware Signal delivery/approval/directory resolution, and query-scoped outbound directory cache keys.

PR surface: Source +403, Tests +863, Docs +56, Generated 0. Total +1322 across 23 files.

Reproducibility: not applicable. This PR adds a new Signal feature rather than fixing a reported current-main bug. The PR body includes live Signal group and DM alias proof plus focused automated checks.

Review metrics: 1 noteworthy metric.

  • Signal alias config surfaces: 2 added, 0 changed, 0 removed. The PR documents and validates both top-level and per-account alias maps, making them supported user config once merged.

Stored data model
Persistent data-model change detected: persistent cache schema: src/infra/outbound/directory-cache.test.ts, unknown-data-model-change: src/config/bundled-channel-config-metadata.generated.ts. Confirm migration or upgrade compatibility proof before merge.

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:

  • Get explicit maintainer acceptance for the top-level and per-account Signal alias config contract before release.

Risk before merge

  • [P1] The PR adds two supported Signal config surfaces, channels.signal.aliases and channels.signal.accounts.<id>.aliases, so maintainers need to accept that contract before release.
  • [P1] Alias canonicalization affects Signal sends, default targets, approvals, reactions, directory lookup, and session routing; a bad alias can route a DM or group message to the wrong Signal target.
  • [P1] The shared outbound directory cache key now includes query text for every directory-backed channel, which is tested but still changes cache reuse outside Signal.

Maintainer options:

  1. Accept the Signal alias contract (recommended)
    Approve the top-level and per-account Signal alias keys and land with the existing proof as the accepted upgrade behavior.
  2. Narrow the config surface first
    Ask for a smaller or renamed Signal-only alias shape before merge if maintainers want a tighter supported contract.
  3. Pause for address-book direction
    Pause or close this PR if maintainers want target aliases to become a cross-channel address-book feature instead of a Signal-owned feature.

Next step before merge

  • [P2] Human review is needed because the PR has the protected maintainer label and creates a new supported Signal config/message-routing contract; there is no narrow mechanical repair for ClawSweeper to queue.

Security
Cleared: The diff does not change workflows, dependencies, lockfiles, scripts, secret handling, permissions, or external code execution paths; no concrete security or supply-chain concern was found.

Review details

Best possible solution:

Maintainers should explicitly accept or narrow the Signal alias config contract, then land with the existing live Signal proof and focused regression coverage.

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

Not applicable; this PR adds a new Signal feature rather than fixing a reported current-main bug. The PR body includes live Signal group and DM alias proof plus focused automated checks.

Is this the best way to solve the issue?

Yes, if maintainers accept the product/config contract: keeping Signal target aliases inside the Signal plugin is narrower than a core address book and still canonicalizes delivery, approval, directory, and session paths. The remaining question is whether this supported config surface should ship.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P3: This is an optional Signal ergonomics feature with proof and tests, not an urgent regression or outage.
  • merge-risk: 🚨 compatibility: The diff adds documented Signal alias config keys and changes how Signal default targets are normalized.
  • merge-risk: 🚨 message-delivery: Alias resolution affects Signal outbound sends, approval prompts, reactions, directory lookup, and session route construction.
  • 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 PR body includes after-fix live Signal proof for alias-based group delivery and alias-based DM delivery, plus focused automated checks on the reviewed branch.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix live Signal proof for alias-based group delivery and alias-based DM delivery, plus focused automated checks on the reviewed branch.
Evidence reviewed

PR surface:

Source +403, Tests +863, Docs +56, Generated 0. Total +1322 across 23 files.

View PR surface stats
Area Files Added Removed Net
Source 11 421 18 +403
Tests 8 868 5 +863
Docs 3 56 0 +56
Config 0 0 0 0
Generated 1 8 8 0
Other 0 0 0 0
Total 23 1353 31 +1322

What I checked:

  • Repository policy applied: Root policy treats new config/default surfaces and message-delivery routing changes as compatibility-sensitive merge risk, and scoped extension policy keeps Signal-specific behavior inside the plugin boundary. (AGENTS.md:31, 153fed790a5c)
  • Current main lacks the requested feature: Current main documents only raw Signal delivery targets and the Signal plugin has no alias resolver, directory adapter, or channels.signal.aliases config surface. Public docs: docs/channels/signal.md. (docs/channels/signal.md:348, 153fed790a5c)
  • Alias resolver implementation: The PR head adds Signal alias map resolution, recursive/invalid alias rejection, raw target canonicalization, and alias-backed directory entries within the Signal plugin. (extensions/signal/src/aliases.ts:36, 96e2b25a9966)
  • Signal runtime integration: The PR resolves aliases through Signal sends, formatted text/media, target resolver, directory listing, outbound resolveTarget, approval prompt delivery, and approval reactions. (extensions/signal/src/channel.ts:76, 96e2b25a9966)
  • Config and docs contract: The PR documents top-level and per-account aliases, adds the Signal config type, and accepts aliases in the zod schema. Public docs: docs/channels/signal.md. (docs/channels/signal.md:355, 96e2b25a9966)
  • Shared outbound cache change: The PR adds query text to directory-cache keys for shared outbound directory lookups and includes tests that a query-filtered miss does not poison later lookups. (src/infra/outbound/directory-cache.ts:21, 96e2b25a9966)

Likely related people:

  • jesse-merhi: In addition to authoring this PR, Jesse recently merged Signal docs and status reaction lifecycle work adjacent to this feature's Signal delivery/docs area. (role: recent Signal contributor; confidence: medium; commits: 8abc633cf8e2; files: docs/channels/signal.md, extensions/signal/src/monitor/event-handler.ts)
  • steipete: Authored the channel target resolution API refactor that established the Signal and shared outbound target resolver paths this PR extends. (role: adjacent target-resolution owner; confidence: high; commits: c4f0da00a9fe; files: extensions/signal/src/channel.ts, src/infra/outbound/target-resolver.ts)
  • joshavant: Recent Signal approval reaction delivery work overlaps the alias-aware approval handler and reaction registration paths touched here. (role: recent approval contributor; confidence: high; commits: 6830aa39eaa1; files: extensions/signal/src/approval-handler.runtime.ts, extensions/signal/src/approval-reactions.ts, extensions/signal/src/channel.ts)
  • kevinslin: Signal reaction approval support and plugin SDK reaction helper work established approval paths that this PR extends for alias targets. (role: feature history contributor; confidence: high; commits: 719ce7f96f42, 7d6b7f434c2e; files: docs/channels/signal.md, extensions/signal/src/approval-auth.ts, extensions/signal/src/approval-handler.runtime.ts)
  • zhangguiping-xydt: Recent outbound target-resolver changes are adjacent to the query-scoped directory-cache behavior changed by this PR. (role: recent outbound resolver contributor; confidence: medium; commits: bbf494955d3e, 3c8ff0d1c3c0; files: src/infra/outbound/target-resolver.ts, src/infra/outbound/target-resolver.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.

@clawsweeper clawsweeper Bot added 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. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. labels Jun 23, 2026
@clawsweeper clawsweeper Bot added merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels Jun 30, 2026
@jesse-merhi
jesse-merhi force-pushed the jesse/signal-aliases-directory branch from 068e582 to 3ac6eb0 Compare July 1, 2026 23:49
@jesse-merhi

Copy link
Copy Markdown
Member Author

@clawsweeper re-review.

@jesse-merhi
jesse-merhi marked this pull request as ready for review July 2, 2026 02:18
@clawsweeper

clawsweeper Bot commented Jul 2, 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.

Copilot AI review requested due to automatic review settings July 2, 2026 02:18
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

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

Pull request overview

Adds Signal-specific, config-backed target aliases (e.g. signal:me, signal:ops) inside the Signal plugin boundary, and updates outbound directory caching so query-scoped misses don’t contaminate later lookups.

Changes:

  • Add Signal alias resolution + alias-backed directory listing in extensions/signal, including alias support in approval routing/session routes/outbound sends.
  • Expand Signal config surface to accept aliases at both top-level and per-account scopes (schema + types), and document the new feature.
  • Partition outbound directory-cache entries by normalized query to prevent cross-query cache poisoning.

Best-fix verdict: Best (Signal-specific target normalization belongs in the Signal plugin; outbound directory cache keying by query addresses the stated cross-channel/miss-poisoning concern at the right shared boundary).

Alternatives considered (rejected):

  • Core/global address book abstraction: broader product surface and cross-channel semantics; out of scope for Signal-only normalization.
  • Mutating/reading Signal contacts live: violates the stated “config-backed only, no contact discovery/mutation” constraint.
  • Resolving aliases only at final send: wouldn’t canonicalize targets for approval/session routing/history/directory surfaces as required.

Code read (key paths):

  • src/infra/outbound/target-resolver.ts, src/infra/outbound/directory-cache.ts
  • extensions/signal/src/channel.ts, extensions/signal/src/aliases.ts, extensions/signal/src/normalize.ts
  • extensions/signal/src/accounts.ts, src/channels/plugins/account-helpers.ts (merge semantics)

Reviewed changes

Copilot reviewed 21 out of 22 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/infra/outbound/target-resolver.ts Include normalized query in directory-cache keys for scoped caching.
src/infra/outbound/target-resolver.test.ts Add regression test ensuring query-scoped misses don’t block later hits.
src/infra/outbound/directory-cache.ts Extend cache-key dimensions to include query.
src/infra/outbound/directory-cache.test.ts Update expectations for new cache-key serialization.
src/config/zod-schema.providers-core.ts Allow aliases on Signal account config schema.
src/config/types.signal.ts Add aliases to SignalAccountConfig type.
extensions/signal/src/shared.ts Resolve defaultTo through alias resolution (best-effort).
extensions/signal/src/core.test.ts Cover alias behavior across target resolution, outbound sends, session routing, and directory listing.
extensions/signal/src/config-schema.test.ts Validate config accepts top-level + per-account aliases.
extensions/signal/src/channel.ts Resolve aliases in messaging target resolver, directory listing, outbound resolveTarget, and outbound sends/session routes.
extensions/signal/src/approval-reactions.ts Canonicalize alias targets for approval reaction routing + persistence keys.
extensions/signal/src/approval-reactions.test.ts Ensure delivered prompts are registered under canonical targets when aliases are configured.
extensions/signal/src/approval-handler.runtime.ts Resolve aliases (and default-account aliases) when preparing approval prompt delivery targets.
extensions/signal/src/approval-handler.runtime.test.ts Add tests asserting alias resolution before native approval prompt delivery.
extensions/signal/src/approval-auth.ts Resolve defaultTo aliases when computing approval approvers.
extensions/signal/src/approval-auth.test.ts Add tests for alias-backed defaultTo authorization + recursive alias ignore behavior.
extensions/signal/src/aliases.ts Implement config-backed alias resolution + alias-backed directory entries.
extensions/signal/src/aliases.test.ts Add focused unit tests for alias resolution and alias directory behavior.
extensions/signal/src/accounts.ts Merge per-account alias maps with channel-level aliases (nestedObjectKeys).
docs/cli/directory.md Note that Signal targets can resolve from configured aliases.
docs/channels/signal.md Document channels.signal.aliases and per-account alias configuration and directory listing behavior.

Comment thread extensions/signal/src/aliases.ts Outdated
Comment on lines +72 to +81
export function resolveSignalAliasTarget(params: {
cfg: OpenClawConfig;
accountId?: string | null;
input: string;
}): ResolvedSignalAliasTarget | null {
const aliases = resolveAliasMap(params);
const initialAlias = normalizeAliasKey(params.input);
if (!initialAlias || !aliases.has(initialAlias)) {
return null;
}
Comment on lines +135 to +162
export function listSignalAliasDirectoryEntries(params: {
cfg: OpenClawConfig;
accountId?: string | null;
kind: SignalResolvedTargetKind;
query?: string | null;
limit?: number | null;
}): ChannelDirectoryEntry[] {
const aliases = resolveAliasMap(params);
const query = normalizeLowercaseStringOrEmpty(params.query);
const limit = typeof params.limit === "number" && params.limit > 0 ? params.limit : undefined;
const exactAlias = params.query ? normalizeAliasKey(params.query) : undefined;
if (exactAlias && aliases.has(exactAlias)) {
const target = resolveSignalAliasTarget({ ...params, input: exactAlias });
if (target?.kind === params.kind) {
return [{ kind: params.kind, id: target.to, name: target.alias }];
}
if (target) {
return [];
}
}
const entries: ChannelDirectoryEntry[] = [];
for (const alias of aliases.keys()) {
let target: ResolvedSignalAliasTarget | null;
try {
target = resolveSignalAliasTarget({ ...params, input: alias });
} catch {
continue;
}
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jul 2, 2026
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 2, 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.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

1 similar comment
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi
jesse-merhi force-pushed the jesse/signal-aliases-directory branch from 0a48bb5 to 183223f Compare July 3, 2026 01:20
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 3, 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.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

1 similar comment
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi
jesse-merhi force-pushed the jesse/signal-aliases-directory branch from 6de2b11 to 9accb68 Compare July 3, 2026 05:41
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 3, 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.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

3 similar comments
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@openclaw-barnacle openclaw-barnacle Bot added channel: telegram Channel integration: telegram app: android App: android app: ios App: ios app: web-ui App: web-ui gateway Gateway runtime labels Jul 3, 2026
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 3, 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.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 3, 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.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

1 similar comment
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 3, 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.

@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

1 similar comment
@jesse-merhi

Copy link
Copy Markdown
Member Author

/clawsweeper re-review

@jesse-merhi

Copy link
Copy Markdown
Member Author

Merged via squash.

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

Labels

channel: signal Channel integration: signal docs Improvements or additions to documentation maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: XL 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.

2 participants