Skip to content

feat(hooks): add Gmail Pub/Sub pull delivery mode#90723

Open
joshp123 wants to merge 4 commits into
mainfrom
josh/gmail-pubsub-pull
Open

feat(hooks): add Gmail Pub/Sub pull delivery mode#90723
joshp123 wants to merge 4 commits into
mainfrom
josh/gmail-pubsub-pull

Conversation

@joshp123

@joshp123 joshp123 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Human-written request

i think you should now start drafting implementation for each of the tools in worktrees and then opening draft PRs against the repos, at least for gog and openclaw. can you do that using $session-goal-writer ?

Draft scope

RFC: openclaw/rfcs#8
Requires companion gog PR: openclaw/gogcli#700
Current companion gog head: 86975b69542c35c814ed3075275ecccc735c5fd6

This draft wires OpenClaw to supervise a Gmail Pub/Sub pull delivery runner once gog exposes gog gmail watch pull.

Merge sequencing: this OpenClaw PR should stay draft/blocked until the companion gog PR lands, or until the OpenClaw runtime/package path otherwise guarantees a gog binary containing gog gmail watch pull.

What changed

  • Adds hooks.gmail.delivery.mode with push and pull variants.
  • Keeps omitted delivery.mode as the existing push behavior for compatibility.
  • Requires pull delivery to use a full Pub/Sub subscription path: projects/<project>/subscriptions/<subscription>.
  • Starts gog gmail watch pull for pull configs and gog gmail watch serve for push configs.
  • Keeps Tailscale setup, push-token handling, bind/port/path, and address-in-use checks scoped to push mode.
  • Updates config schema, labels, help quality tests, docs, and CLI descriptions so setup remains push-oriented while run/gateway supervision become delivery-mode aware.

Compatibility

  • Existing push deployments stay on push when delivery.mode is omitted.
  • openclaw webhooks gmail setup remains push-oriented in this draft; pull-mode cloud setup is a later slice after gog pull support is merged and dogfooded.
  • This does not change hook payload schema.
  • This depends on openclaw/gogcli#700; without that command in the runtime PATH, pull configs will fail at watcher spawn time.

Testing strategy

Already run in this draft:

  • nix shell nixpkgs#nodejs_24 --command node scripts/run-vitest.mjs src/hooks/gmail.test.ts src/hooks/gmail-watcher.test.ts src/cli/webhooks-cli.test.ts src/config/schema.help.quality.test.ts
  • git diff --check

Deterministic coverage added here:

  • legacy Gmail configs without delivery.mode still resolve as push and keep push token/serve defaults;
  • pull configs resolve without push token, serve, or Tailscale settings;
  • pull configs require full Pub/Sub subscription paths;
  • pull log args redact hook tokens;
  • watcher startup spawns gog gmail watch pull with the expected account, subscription, and hook flags;
  • pull watcher startup does not run Tailscale setup.

Remote proof completed for this draft head:

  • Manual OpenClaw CI workflow dispatch https://github.com/openclaw/openclaw/actions/runs/27035870855 completed successfully for commit 89fcda4a6419bf3ebc2141819f11be99eceaee0c.
  • That remote run covered the broad OpenClaw CI matrix, including check-test-types, check-lint, docs, dependency/guard shards, build artifacts, Node 22 compatibility, Windows Node tests, macOS Node tests, macOS Swift build/test, and the relevant Node test shards.
  • PR-triggered draft checks also completed the repository's Real behavior proof and Workflow Sanity checks successfully for this head; the normal PR CI matrix is skipped on draft PR events, so the manual dispatch above is the full remote proof run.

End-to-end scenarios now covered for this draft head:

  • Packaged-runtime proof imports compiled OpenClaw watcher code and proves it spawns the pull runner with the expected gog gmail watch pull arguments without starting push ingress.
  • Live Google proof starts OpenClaw from this PR worktree with the companion gog binary first on PATH, supervises the real pull worker, receives a real Gmail Pub/Sub notification, and creates the expected Gmail hook session.

Production/default flip still needs later dogfood proof:

  • longer renewal/soak behavior;
  • a nix-openclaw declarative module slice;
  • operational runbook for credential rotation and watch invalidation;
  • compatibility proof for existing push deployments before changing setup defaults.

Real behavior proof

Behavior addressed: OpenClaw can now choose pull delivery for Gmail watch supervision instead of assuming Pub/Sub push/HTTP ingress.

Real environment tested: local macOS Codex worktree with Node 24 from Nix, maintainer-controlled Gmail/Pub/Sub resources, candidate gog from openclaw/gogcli#700, and an isolated temporary OpenClaw state/config directory. No Tailscale route, public ingress, private OpenClaw service, or live nix-openclaw deployment was used.

Exact steps or command run after this patch: see Testing strategy above.

Evidence after fix: focused Vitest tests pass for Gmail config resolution, watcher spawn behavior, CLI help/schema quality, and redaction behavior; packaged-runtime proof verifies compiled watcher spawn; live proof verifies supervised pull delivery into an OpenClaw Gmail hook session.

Observed result after fix: pull config starts the pull watcher path in tests and compiled runtime proof; legacy push config remains push-shaped; live OpenClaw proof created agent:main:hook:gmail:<message-id> from one real incoming email.

What was not tested: long-running renewal/soak behavior, production nix-openclaw deployment, and changing setup defaults for existing push users.

After-fix proof, 2026-06-05

Commits: e0b702400d43502b8088fc79c88d0a6c3456bfa4, 89fcda4a6419bf3ebc2141819f11be99eceaee0c

This update addresses the ClawSweeper setup/config finding and the local adversarial follow-up. Push setup now writes a canonical push delivery block instead of preserving stale pull mode, and pull mode now checks gog gmail watch pull --help before spawning a watcher in both gateway lifecycle and foreground service paths.

Proof I ran after this fix:

  • nix shell nixpkgs#nodejs_24 nixpkgs#pnpm --command node scripts/run-vitest.mjs src/hooks/gmail.test.ts src/hooks/gmail-watcher.test.ts src/hooks/gmail-ops.test.ts src/cli/webhooks-cli.test.ts src/config/schema.help.quality.test.ts -> passed 4 Vitest shards.
  • nix shell nixpkgs#nodejs_24 nixpkgs#pnpm --command pnpm exec oxfmt --check src/hooks/gmail.ts src/hooks/gmail-gog-capability.ts src/hooks/gmail-watcher.ts src/hooks/gmail-ops.ts src/hooks/gmail-watcher.test.ts src/hooks/gmail-ops.test.ts src/cli/webhooks-cli.ts -> passed.
  • git diff --check -> passed.
  • No-live fake-gog watcher scenario -> passed. It created a temporary gog shim, ran the real startGmailWatcher path with pull config, observed exactly these command families: gmail watch pull --help, gmail watch start ..., and supervised gmail watch pull ... --subscription projects/project-a/subscriptions/gog-gmail-watch-pull; no gmail watch serve call occurred.
  • Local ClawSweeper-style adversarial review against the current rubric -> pass for draft-update readiness, with no accepted actionable findings.

Remote proof completed for this exact head:

Still intentionally not claimed here:

  • This draft does not flip openclaw webhooks gmail setup to pull by default.
  • This is one controlled live Gmail/Pub/Sub delivery proof, not a renewal/soak proof.
  • nix-openclaw first-party declarative wiring remains a later repo slice.

Packaged runtime proof, 2026-06-05

This proof closes the earlier non-live packaged-runtime gap. It does not claim live Gmail delivery or Pub/Sub consumption.

Commands and scenario run after the current head:

  • nix shell nixpkgs#nodejs_24 nixpkgs#pnpm --command bash -lc 'pnpm build' -> passed; compiled OpenClaw output was generated under dist/.
  • Packaged runtime harness -> passed. The harness imported compiled dist/gmail-watcher-Dcl6Um9D.js, put a temporary gog shim first on PATH, delegated only gog gmail watch pull --help to the companion built gog binary from feat(gmail): add Pub/Sub pull watch consumer gogcli#700, and intercepted watch start / watch pull so no Google state was changed.

Observed compiled OpenClaw invocations:

  • gmail watch pull --help
  • gmail watch start --account [email protected] --label INBOX --topic projects/proof-project/topics/openclaw-gmail
  • gmail watch pull --account [email protected] --subscription projects/proof-project/subscriptions/openclaw-gmail-pull --hook-url http://127.0.0.1:18789/hooks/gmail --hook-token <redacted> --max-bytes 12345

Observed result:

  • startGmailWatcher returned { "started": true }.
  • The spawned pull runner was stopped through the OpenClaw watcher lifecycle with SIGTERM.
  • The proof log did not contain the dummy hook token value.
  • No gmail watch serve invocation occurred.
  • No gcloud pubsub subscriptions pull, real gog gmail watch start, Tailscale command, OpenTofu apply, live config mutation, or Pub/Sub ack/nack was run.

Current provider inventory after the live proof setup and cleanup:

  • Active maintainer Google project has gmail.googleapis.com and pubsub.googleapis.com enabled.
  • Current Gmail topic used by the proof: djtbot-gmail-watch.
  • Current Gmail subscription used by the proof: djtbot-gmail-watch-pull with no pushConfig, i.e. pull delivery only.
  • No public push endpoint, Tailscale Funnel route, or push subscription is part of this proof path.

Remaining proof gap after this packaged-runtime pass:

  • At the time of that pass, live Gmail/Pub/Sub proof was still blocked on provider-side pull-subscription setup. That blocker has since been cleared by the controlled live proof below.
  • Remaining work is not basic delivery proof; it is longer dogfood, renewal behavior, and downstream nix-openclaw wiring.

Live OpenClaw-supervised Gmail pull proof, 2026-06-06

Commit: 89fcda4a6419bf3ebc2141819f11be99eceaee0c with companion gog 23a528aaa5cd89043f241c08f9005751e9b45d36.

Proof run summary, redacted:

  • Started OpenClaw from this PR worktree with isolated OPENCLAW_CONFIG_PATH and OPENCLAW_STATE_DIR under /tmp.
  • Put the companion candidate gog binary first on PATH.
  • Configured hooks.gmail.delivery.mode = "pull", the maintainer pull subscription, hook auth, allowRequestSessionKey=true, and allowedSessionKeyPrefixes=["hook:", "hook:gmail:"].
  • Gateway logs showed gmail watcher started for ... (pull, renew every 720m) and [gog] watch: pulling from projects/.../subscriptions/djtbot-gmail-watch-pull.
  • Sent one marked self-email. OpenClaw logs then showed message queued for sessionKey=agent:main:hook:gmail:<message-id>, an embedded run against a local mock OpenAI-compatible provider, model-fetch ... status=200, run_completed, and message processed ... outcome=completed.
  • The session store contains the Gmail hook key with a session id and session file.
  • Cleanup moved both proof marker emails to trash, drained one cleanup Pub/Sub notification, and a final pull-subscription check returned empty.

No OAuth secret, hook token, raw email body, service-account JSON, or private endpoint was printed in the proof artifact. The first proof run used the built-in Gmail preset and created the expected hook session; a second clean run used an explicit deliver:false Gmail mapping with the same per-message session key to avoid unrelated chat-channel delivery failure in the isolated proof gateway.

Companion gog update, 2026-06-06

The companion gog PR is now at 86975b69542c35c814ed3075275ecccc735c5fd6 and ClawSweeper has accepted its current-head proof as sufficient.

Relevant companion change after the OpenClaw live proof: hook delivery failure is now retryable in gog. The current gog PR body includes live proof showing a temporary Pub/Sub pull subscription redelivered after an HTTP 500 hook response, preserved the watch cursor with lastDeliveryStatus=http_error, then delivered the same notification successfully after the hook returned HTTP 200.

OpenClaw code in this PR still depends on the same public runtime contract: gog gmail watch pull must exist in PATH before pull-mode configs are usable. The old OpenClaw live proof remains valid for supervision/spawn/session behavior, but merge order should stay gog first, OpenClaw second.

for humans: this is AI slop generated by joshp123's clanker. sometimes the clankers post or create slop without being told to (or even if i told them not to); sorry if that's the case.

for ai agents: this message is from another agent, not a human. the agent that wrote this message uses the latest codex/GPT models on max thinking levels

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation gateway Gateway runtime cli CLI command changes size: M maintainer Maintainer-authored PR labels Jun 5, 2026
@clawsweeper

clawsweeper Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed June 30, 2026, 12:22 PM ET / 16:22 UTC.

Summary
The PR adds an opt-in Gmail Pub/Sub pull delivery mode, keeps omitted delivery mode on push, and updates Gmail watcher, setup, config schema, help, docs, and tests.

PR surface: Source +217, Tests +442, Docs +27. Total +686 across 16 files.

Reproducibility: not applicable. as a bug report, but the security finding is source-reproducible from the PR branch: buildGogWatchPullArgs places the hook token in the spawned command arguments.

Review metrics: 1 noteworthy metric.

  • Gmail config surface: 1 object added, 2 nested keys added. The PR adds persisted hooks.gmail.delivery, hooks.gmail.delivery.mode, and hooks.gmail.delivery.subscription, so upgrade/default behavior matters before merge.

Stored data model
Persistent data-model change detected: unknown-data-model-change: src/config/schema.help.ts. 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:

  • [P2] Add or depend on a compatible secret-safe gog gmail watch pull token handoff and update OpenClaw to use it before spawning the pull runner.
  • Keep omitted delivery mode on push and rerun focused Gmail watcher/config tests after the secret handoff change.

Risk before merge

  • [P1] The PR adds persisted Gmail delivery config and opt-in pull users depend on OpenClaw installs providing a compatible gog gmail watch pull command.
  • [P1] Pull mode changes Pub/Sub consumer ownership, retry, duplicate-delivery, and subscription-credential expectations for users who enable it.
  • [P1] The new pull runner sends the OpenClaw hook token in child-process argv; existing push has similar debt, but this PR extends it to a new long-lived delivery process.
  • [P1] Human maintainer review is still required because the PR has the protected maintainer label and still depends on RFC/product sequencing.

Maintainer options:

  1. Add Secret-Safe Pull Token Handoff (recommended)
    Before merge, add or depend on a compatible gog pull token-file, stdin, or environment contract and update OpenClaw so gog gmail watch pull does not receive the raw hook token in argv.
  2. Accept Local Argv Exposure For First Slice
    Maintainers can intentionally accept the new opt-in pull runner carrying the hook token in argv if they want to land delivery first and track argv hardening as follow-up security debt.
  3. Pause Until RFC And Security Scope Settle
    Keep the PR blocked until the RFC/product direction and Gmail watcher secret-transfer contract are both decided.

Next step before merge

  • [P2] The blocker spans OpenClaw/gog CLI contract and maintainer security/product acceptance, so it is not a safe one-branch automated repair.

Security
Needs attention: The diff introduces a new long-lived pull runner path that passes the OpenClaw hook token through child-process argv.

Review findings

  • [P1] Avoid passing the pull hook token in argv — src/hooks/gmail.ts:339-343
Review details

Best possible solution:

Land the opt-in pull slice only after maintainer/RFC acceptance, compatible gog runtime availability, and a secret-safe hook-token handoff for the pull runner are settled, keeping push as the default.

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

Not applicable as a bug report, but the security finding is source-reproducible from the PR branch: buildGogWatchPullArgs places the hook token in the spawned command arguments.

Is this the best way to solve the issue?

No, not yet as a merge-ready solution: the opt-in delivery shape is a good first slice, but the pull runner should not add a new long-lived argv secret exposure before merge.

Full review comments:

  • [P1] Avoid passing the pull hook token in argv — src/hooks/gmail.ts:339-343
    gog gmail watch pull is a long-lived child process, and this new path passes cfg.hookToken as a process argument. Local users or tooling that can read ps/procfs can recover the OpenClaw hook credential for the pull endpoint, so the pull runner needs a secret-file/env/capability-gated handoff like the existing argv-hardening follow-up is trying to establish for push.
    Confidence: 0.87

Overall correctness: patch is incorrect
Overall confidence: 0.87

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add merge-risk: 🚨 security-boundary: The new pull runner path passes the OpenClaw hook token through child-process argv for a long-lived process.
  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦞 diamond lobster and patch quality is 🧂 unranked krab.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (logs): The PR body includes redacted packaged-runtime output and live Gmail/Pub/Sub pull logs showing after-fix delivery into an OpenClaw hook session.
  • remove rating: 🦞 diamond lobster: Current PR rating is rating: 🧂 unranked krab, so this older rating label is no longer current.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: ⏳ waiting on author.

Label justifications:

  • P2: This is a bounded but compatibility-sensitive Gmail hook feature, not an urgent regression or emergency.
  • merge-risk: 🚨 compatibility: The PR adds a persisted Gmail delivery config shape and enabled pull configs require a compatible gog gmail watch pull runtime command.
  • merge-risk: 🚨 message-delivery: Pull mode changes how Gmail Pub/Sub notifications reach OpenClaw and affects consumer ownership, retry, and duplicate-delivery expectations.
  • merge-risk: 🚨 security-boundary: The new pull runner path passes the OpenClaw hook token through child-process argv for a long-lived process.
  • 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 (logs): The PR body includes redacted packaged-runtime output and live Gmail/Pub/Sub pull logs showing after-fix delivery into an OpenClaw hook session.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes redacted packaged-runtime output and live Gmail/Pub/Sub pull logs showing after-fix delivery into an OpenClaw hook session.
Evidence reviewed

PR surface:

Source +217, Tests +442, Docs +27. Total +686 across 16 files.

View PR surface stats
Area Files Added Removed Net
Source 9 265 48 +217
Tests 4 442 0 +442
Docs 3 42 15 +27
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 16 749 63 +686

Security concerns:

  • [medium] Pull runner exposes hook token through process argv — src/hooks/gmail.ts:341
    The new buildGogWatchPullArgs path appends --hook-token and the raw hook token to the spawned gog gmail watch pull command, exposing the hook credential to local process inspection while the runner is alive.
    Confidence: 0.87

What I checked:

  • PR source exposes pull hook token in argv: At the PR head, buildGogWatchPullArgs appends --hook-token and cfg.hookToken to the long-lived gog gmail watch pull process arguments. (src/hooks/gmail.ts:339, c2aa369930b0)
  • Current main has no merged pull mode: Current main resolves only push-oriented Gmail runtime config and builds gog gmail watch serve arguments, so this PR is still a meaningful feature change rather than already implemented on main. (src/hooks/gmail.ts:131, 6cb82eaab865)
  • PR keeps push as the default config behavior: The PR resolves deliveryMode from overrides or config and defaults omitted mode to push, while pull requires a full Pub/Sub subscription path. (src/hooks/gmail.ts:161, 329f1540c697)
  • Gmail config reload is covered by the existing hot path: The merge result keeps hooks.gmail in the gateway reload plan with the restart-gmail-watcher action, so delivery config changes are in the watched config surface. (src/gateway/config-reload-plan.ts:78, 329f1540c697)
  • Companion gog command is merged: The companion openclaw/gogcli pull consumer PR is merged, which resolves the basic command-availability sequencing risk but not the OpenClaw product/security review. (a2d1d8f0cb4d)
  • After-fix real behavior proof is present: The PR body documents redacted packaged-runtime and live Gmail/Pub/Sub pull proof showing OpenClaw supervising the pull worker and creating a Gmail hook session. (c2aa369930b0)

Likely related people:

  • Peter Steinberger: Commit 523d9ec added the Gmail hook helper and setup files that this PR extends. (role: introduced Gmail hook setup; confidence: high; commits: 523d9ec3c2e4; files: src/hooks/gmail.ts, src/hooks/gmail-ops.ts)
  • Jared Verdi: Commit ca9b0db added the gateway-started Gmail watcher that this PR extends to spawn push or pull runners. (role: introduced Gmail watcher lifecycle; confidence: high; commits: ca9b0dbc887d; files: src/hooks/gmail-watcher.ts)
  • Gustavo Madeira Santana: Commit 8de63ca split gateway startup seams around the path that invokes Gmail watcher startup from gateway attach. (role: adjacent gateway startup owner; confidence: medium; commits: 8de63ca26825; files: src/gateway/server-startup-post-attach.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 (1 earlier review cycle)
  • reviewed 2026-06-21T17:34:17.630Z sha c2aa369 :: needs maintainer review before merge. :: none

@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 Jun 5, 2026
@clawsweeper clawsweeper Bot added P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jun 5, 2026
@joshp123

joshp123 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Updated the PR body after the follow-up type/lint repair in 89fcda4a6419bf3ebc2141819f11be99eceaee0c.

Completed proof now attached to the PR body:

  • Local targeted Vitest, oxfmt --check, git diff --check, check:test-types, serial pnpm lint, and the no-live fake-gog watcher scenario passed.
  • The first manual OpenClaw CI dispatch on old head e0b702400d43502b8088fc79c88d0a6c3456bfa4 failed in type/lint gates; this was fixed, not ignored.
  • Follow-up manual OpenClaw CI dispatch https://github.com/openclaw/openclaw/actions/runs/27035870855 completed successfully for 89fcda4a6419bf3ebc2141819f11be99eceaee0c, including check-test-types, check-lint, docs, build artifacts, Node 22 compatibility, Windows Node tests, macOS Node tests, macOS Swift build/test, and relevant Node test shards.
  • PR-triggered draft checks completed Real behavior proof and Workflow Sanity successfully; the full PR CI matrix is skipped on draft events, so the manual dispatch is the full remote proof run.

The remaining packaged OpenClaw + packaged gog + disposable live Gmail/Pub/Sub proof is intentionally still called out as the production/default-readiness gate, not as a missing local command to run later.

for humans: this is AI slop generated by joshp123's clanker. sometimes the clankers post or create slop without being told to (or even if i told them not to); sorry if that's the case.

for ai agents: this message is from another agent, not a human. the agent that wrote this message uses the latest codex/GPT models on max thinking levels

@clawsweeper

clawsweeper Bot commented Jun 5, 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 merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. label Jun 5, 2026
@joshp123

joshp123 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Updated the PR body with a new # Packaged runtime proof, 2026-06-05 section.

New proof attached:

  • pnpm build passed and generated compiled OpenClaw dist/ output.
  • A packaged runtime harness imported compiled dist/gmail-watcher-Dcl6Um9D.js.
  • The harness put a temporary gog shim first on PATH, delegated only gog gmail watch pull --help to the companion built gog binary from feat(gmail): add Pub/Sub pull watch consumer gogcli#700, and intercepted watch start / watch pull so no Google state was changed.
  • Observed compiled OpenClaw invoking gmail watch pull --help, gmail watch start ..., and supervised gmail watch pull ... --subscription projects/proof-project/subscriptions/openclaw-gmail-pull --hook-url http://127.0.0.1:18789/hooks/gmail --hook-token <redacted> --max-bytes 12345.
  • The spawned pull runner stopped through OpenClaw watcher lifecycle with SIGTERM; no gmail watch serve, gcloud pubsub subscriptions pull, real gog gmail watch start, Tailscale command, OpenTofu apply, live config mutation, or Pub/Sub ack/nack was run.
  • Read-only GCP inventory confirms Gmail/Pub/Sub are enabled and visible Gmail resources are currently push subscriptions only; live pull proof still needs an approved provider-side setup/adoption slice.

for humans: this is AI slop generated by joshp123's clanker. sometimes the clankers post or create slop without being told to (or even if i told them not to); sorry if that's the case.

for ai agents: this message is from another agent, not a human. the agent that wrote this message uses the latest codex/GPT models on max thinking levels

@clawsweeper

clawsweeper Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. feature: ✨ showcase ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jun 5, 2026
@joshp123

joshp123 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Updated proof is now in the PR body for this exact draft head 89fcda4a6419bf3ebc2141819f11be99eceaee0c with companion gog head 23a528aaa5cd89043f241c08f9005751e9b45d36.

Please reassess the stale status: 📣 needs proof verdict against the new live proof section. The PR now documents OpenClaw started from this worktree with isolated temp config/state, the candidate gog binary first on PATH, pull delivery configured against the maintainer pull subscription, watcher logs showing gmail watcher started ... (pull) and gog pulling from Pub/Sub, one marked self-email creating agent:main:hook:gmail:<message-id>, a mock-provider request returning 200, run_completed, outcome=completed, session-store evidence, and cleanup of proof emails plus subscription drain.

This is not an automerge request. It is a re-review request after adding after-fix real behavior proof.

for humans: this is AI slop generated by joshp123's clanker. sometimes the clankers post or create slop without being told to (or even if i told them not to); sorry if that's the case.

for ai agents: this message is from another agent, not a human. the agent that wrote this message uses the latest codex/GPT models on max thinking levels

@clawsweeper

clawsweeper Bot commented Jun 5, 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 proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 5, 2026
@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. 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 proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 6, 2026
@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. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed 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. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jun 15, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jun 21, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes docs Improvements or additions to documentation feature: ✨ showcase ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. gateway Gateway runtime 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. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: L status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. triage:blocked claw-marshal label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant