Commit Graph

1968 Commits

Author SHA1 Message Date
Joel Hooks 29b1394cdb cutover: re-flip attempt #2 record — canary failed, rolled back; canary blind + event consumed-unconfirmed 2026-07-17 10:45:54 -07:00
Joel Hooks d1d64382db fix: work-state pass reconciles delivered reservations before re-waking
Expired wake reservations now check Redis for the delivery event id;
actually-queued wakes flip to notified instead of firing again — closes
the crash-after-send window without a duplicate DM.
2026-07-17 10:41:54 -07:00
Joel Hooks 9b23637654 memory-system-repair: charter — brief + 10 steps (4 mechanical fixes dispatched, taste bench queued, 5 grillings await Joel) 2026-07-17 10:34:53 -07:00
Joel Hooks 92a35d4887 feat: slack-work-state-pass — hourly live sweep, pages + state-change wakes
Dedicated Inngest cron (17 * * * *) on the host worker: bounded live
conversations.history sweep per allowlisted channel (cc-matt-p +
brain-joel), non-Joel human roots classified untagged/started/shipped
from Joel's root reactions — Slack stays the only store. Finding runs
write one sensitive observation page (no message bodies); wakes fire
only on state transitions via joelclaw notify --event-id with 7-day
Redis dedup. Funnel: scripts/work-state-pass-funnel.ts. Seeded proof
01KXRGVJD5JPS8JGH95JP7PJSN (page + one wake), live run proved zero
repeat wakes. Closes the slack-work-state brief — all steps done.
2026-07-17 10:31:31 -07:00
Joel Hooks b034922059 memory-system page: honest grade claims — one reaction is a smoke test, learning unproven 2026-07-17 10:31:20 -07:00
Joel Hooks 58be580667 memory-system page: ELI5 executive summary up top 2026-07-17 10:22:32 -07:00
Joel Hooks 9f7b1ebb5c memory-system-review: complete — the memory system page (map + verdicts) live on the wiki; periphery survey closed; observer root rendering 2026-07-17 10:18:05 -07:00
Joel Hooks dd88d9b6b2 reactions bridge: live human proof — Joel's real reaction graded 248a3715344a to worked; grades provably feed the judge history 2026-07-17 10:08:28 -07:00
Joel Hooks bb21189fee memory-system-review: three surveys closed — capture/condense, brain stores, curation/delivery (taste loop proven: real 👍 graded 248a3715344a worked) 2026-07-17 10:08:11 -07:00
Joel Hooks b35e468267 memory-system-review: charter — brief + 7 steps, 4 survey workers dispatched, observer brain registered as wiki root 2026-07-17 09:54:04 -07:00
Joel Hooks 884f2ff791 docs: pass shape decided — hourly cron, live sweep as truth, state-change wakes
Grilled with Joel: dedicated hourly Inngest cron; live sweep is the
candidate source (feed = hints, proven holes); cc-matt-p + brain-joel;
non-Joel human roots; 4h untagged / 7d stale; page per run + wakes only
on state change; OTEL + funnel command + seeded-scenario assert at
enable. Feed repairs chartered in stream-observation (tap webhook-mode
bug, ingress reconciliation). Build authorized and fired (pane w1A:p4).
2026-07-17 09:30:17 -07:00
Joel Hooks d3f16a1057 feat: campaign-pulse/reaction consumer — pulse DM emoji become actions
message/reaction.received matched against persisted pulse DM flowIds:
thumbs-up acks into pulse-log, wrench schedules the daily flow agent,
magnifier schedules the pulse investigator runbook. Each queues a
one-line receipt DM so the loop closes visibly. Unknown flows are
ignored non-retriably.
2026-07-17 09:09:49 -07:00
Joel Hooks 2bde629680 docs: slack-work-state — both charter workers landed
Research: cc-matt-p allowlisted + live but Matt's CMS-token root is a
proven feed hole (edge-triggered, no reconciliation); Slack reaction
shadow tap broken at construction (webhook-mode default) — bridge is
Telegram-proven only; inbound-root reactions need message/inbound.reaction,
not a fabricated flowId. Build: jc-slack reaction read-back shipped
(jc-slack 4bcc1e6) — board proved live on cc-matt-p. Decide step now
ready.
2026-07-17 08:52:03 -07:00
Joel Hooks b54140f489 docs: charter slack-work-state — reactions as truth, observed
Brief + 4 steps: Slack reactions on roots are the canonical work-state
(:shitrat: started, ✅ shipped, fleet rule slack-work-tagging); a periodic
observer pass over allowlisted channels (cc-matt-p first) emits observation
pages + dispatcher wakes per wake-dont-feed. Builds on stream-observation
(live Slack ingress), observational-memory, and today's reactions bridge
(f26064c3). Two workers fired: jc-slack reaction read-back (authorized
build) and ingress coverage research.
2026-07-17 08:36:40 -07:00
Joel Hooks f26064c36c reactions bridge: message/inbound.reaction → flowId correlation (redis index, journal fail-soft) → message/reaction.received; neat-memory grading consumer maps emoji→outcome and writes flagg state via the gateway-event execution pattern; idempotent per raw event id; 78 tests green (23 pre-existing memory-friction fails untouched)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 21:17:46 -07:00
Joel Hooks 79d71acc78 reactions bridge claimed + worker fired
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 20:38:06 -07:00
Joel Hooks 0b2980288c telegram formatting: markdown renders on both paths (MarkdownV2 w/ escaping fail-soft to plain, paragraphs preserved, bullets render, bold/links/emoji) — completes the telegram-markdown helper origin/main was missing after 053d2156
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 20:33:52 -07:00
Joel Hooks 053d215657 telegram poller requests message_reaction updates — Joel's emoji reactions now reach the gateway + shadow tap (reactions-teach-taste plumbing live at transport level)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 20:21:49 -07:00
Joel Hooks 9992b11664 telegram formatting worker brief
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 20:04:48 -07:00
Joel Hooks f2dfd49242 receipt schema: truthful deliveryState variants (part of invisible-delivery fix)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 16:30:17 -07:00
Joel Hooks 6b1e29efc4 invisible-delivery root cause + fix: (1) normal-priority operator memories were digested (kind mapping now honest for the whole operator lane), (2) redis acting shim stamped confirmed unconditionally (redis.ts:802) — deliveryState now truthful through envelope+OTEL, (3) journal Effect.as(true) faked durability — receipts now carry written/queued; confirmed structurally requires platform message id + journal readback; visible-delivery canary added to flip runbook; hot-dog memory unburned; 173 gateway tests green
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 16:30:02 -07:00
Joel Hooks 1a9a96d759 invisible-delivery root-cause worker fired
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 16:06:45 -07:00
Joel Hooks 91b5f0afba ROLLBACK: acting path had confirmed-but-invisible deliveries — runbook trigger honored, legacy restored+proven, evidence preserved, re-flip conditions recorded
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 16:02:24 -07:00
Joel Hooks 85fe954c2b cutover daemon wiring (handover composition the live gateway is running — belated to main) + messaging v2 docs: AGENTS/architecture/cli/gateway/sdk updated, canonical skills/messaging added
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 15:44:28 -07:00
shitratgit[bot] 0abfa5c2c5 signal: deliver scheduled reminder redeliveries (producer signal/reminder)
The reminder redelivery is sent through the outbound-queue drain with no
policy sourceEventType, so it fell through to investigate/suppress and
Joel never got the snoozed reminder. Key on producer signal/reminder ->
deliver, mirroring the curated-memory rule. This is what made the live
snooze->reminder loop go silent after four proven redeliveries.
2026-07-16 22:39:55 +00:00
Joel Hooks 75069de8a5 docs+fleet coverage worker fired
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 15:29:37 -07:00
shitratgit[bot] d9cefdd14a gateway: operator script to prove the snooze->reminder loop (sends nothing to a chat directly; schedules a real reminder event) 2026-07-16 22:29:16 +00:00
Joel Hooks 2e4a1e5ee2 CUT OVER: Chat SDK is the acting dispatcher — 5 ordered handover receipts, zero conflicts, notify shim confirmed live
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 15:25:54 -07:00
Joel Hooks aaf6fc2709 cutover build: chat-sdk event dedup window in message-store (part of acting-path no-double-execution guarantee)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 15:13:59 -07:00
Joel Hooks ab8edb0620 cutover build: acting path flag-gated off (SDK events → authorization → command-queue, notify compat shim wired, sequenced transport handover + rollback as tested functions), conversationId mismatch reconciled, e2e suite green (burst supersession, kill/restart replay, full-loop dry run w/ acting on vs fake transports); runbook on the step; 53 tests. Flip stays supervised
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 15:13:31 -07:00
shitratgit[bot] e8898b2945 digest: wire Snooze to the real reminder function
Fixture adapter declared snooze unsupported, so the button was dead.
New brain-reminder adapter: snooze emits signal/reminder.scheduled
through an injected port (source-actions keeps no gateway dep), Done is
honestly Acknowledge-only (a memory has no mutable source). Added the
missing brain source inspector to signal-reminder (memories always
return open → always redeliver). Gateway composes the reminder adapter
with its Inngest event helper so sent buttons and the callback route
share one live adapter. Test-only snoozeMs override for a ~90s live
proof.

Step: telegram-signal-system/wire-digest-snooze-real-reminder.svx
2026-07-16 21:45:58 +00:00
Joel Hooks a3c314a8c6 cutover go recorded (authorized in advance, steering flips when conditions green); cutover build + e2e worker fired
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:30:04 -07:00
Joel Hooks 0f5b225b3c builds closed with live receipts, shadow-window/cutover step graduated — the messaging map is one Joel-go from done
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:24:34 -07:00
Joel Hooks 67f09996a3 v2 alerts reach the operator lane: contract alert kind (operator lane, high/critical) speaks the policy's notify.message source — the classifier was correctly suppressing message-contract/* as unrecognized machinery; live Telegram delivery confirmed (7718912466:14542)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:22:08 -07:00
Joel Hooks 2862f6d644 shadow taps wired live: production tap composition (flag-gated CHAT_SDK_INBOUND_SHADOW_ENABLED, lazy per-platform normalizers, fail-open, fire-and-forget) + the six one-line taps at inbound worker's verified insertion points — before legacy filters so rejection parity is provable; tsc + biome + 14 inbound tests green
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:02:08 -07:00
Joel Hooks f65ed64048 inbound v1 shadow mirror: inbound event schemas (platform ids, audit lineage, authorization verdict), in-process tap seam w/ documented insertion points, SDK normalization w/ self-message + non-Joel rejection tested on real envelopes, observe-only message/inbound.* bus publishing marked shadow, legacy-vs-SDK diff harness; 14 tests. Completes the message-contract package outbound's 94a78ce2 referenced
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 13:42:08 -07:00
Joel Hooks 94a78ce23b outbound v1 on Chat SDK 4.34 behind contract v2: @joelclaw/message-contract (kinds, versioned routing, branded flowId, receipts, reaction/reply event schemas), single Chat instance w/ lifecycle ownership, send path w/ Telegram policy preflight + journal flowId index + Slack-native reply threading, flag-gated shadow diff, unwired notify-send compat; live canaries Telegram+Slack confirmed w/ journal readback; 17 tests. Steering owns daemon wiring + cutover; Telegram/Discord native reply-reference needs an SDK extension (documented stop)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 13:39:13 -07:00
Joel Hooks b096e4ecaa provisioning closed (Slack subscriptions confirmed); outbound + inbound v1 claimed and fired in parallel with directory partition
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 12:53:53 -07:00
Joel Hooks 619191c0a2 provisioning ledger line
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 12:47:32 -07:00
Joel Hooks 9b0dec533c bot identities provisioned: Discord app id + public key stored in secrets daemon and wired into gateway channel config (channel stays disabled); Telegram polling-mode + Slack reactions:read proven by API; one Joel item remains (Slack Event Subscriptions UI readback doesn't exist)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 12:47:01 -07:00
Joel Hooks 5c2a948e49 provisioning unblocked: pi-discord-threads rig proves the Discord identity (app id + verify_key fetchable by API, MessageContent already granted) — step flipped AFK, worker fired
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 12:40:07 -07:00
Joel Hooks 7f78cf8bc2 contract v2 grilled and closed: intent kinds + routing table, flowId return path on the bus, replyTo correlation, inbound observe-only on bus w/ command-queue sole executor; ledger updated
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 12:31:26 -07:00
shitratgit[bot] f6240d5000 brain: file gateway startup-window message loss (silent immediate-event drop) 2026-07-16 19:29:50 +00:00
shitratgit[bot] d2f99a0d42 signal: curated neat-memory DMs deliver as memory
observer/neat-memory is quality-gated by the curator itself (Joel's
2026-07-16 product decision: DMs on the curator's beat, no cap).
Explicit deliver rule with memory category so journal/audit classify
it honestly instead of riding the operator-escalation rule.
2026-07-16 19:24:25 +00:00
Joel Hooks 290cc68459 bench-the-curator closed: sol:xhigh + simple prompt picked and adopted, self-pacing beats live on the bus; ledger updated
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 11:55:51 -07:00
Joel Hooks 8d097ff15b call-tuning-loop: judge scheduling diagnosis chartered — idempotency-by-room prime suspect
3-day resume found zero judge runs across 60+ emitted events despite healthy
registration; retro + A/B now explicitly blocked on the diagnosis step.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 11:45:04 -07:00
shitratgit[bot] d1e232bf88 signal: operator-immediate notifications deliver — hotfix for eaten messages
The INFRA keyword pattern scanned message CONTENT, so any operator
notify mentioning 'failed'/'error' was swallowed into investigation —
including Joel's digest preview. All Telegram notify traffic went dark
after the policy deploy. notify.message at high/urgent now delivers as
written (human prose is not a machine signal); narrow probe-failure
carve-out keeps verify-voice intercepted. Regression tests pin both.
2026-07-16 18:45:02 +00:00
Joel Hooks 58ee2adc1b curator bench receipts on the step; page deployed, awaiting Joel's pick
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 09:08:51 -07:00
Joel Hooks 0aff278298 chat-sdk fit/gap closed: adapter layer behind joelclaw wrappers, beta adapters demand pin+shadow, all bot identities reuse, embed-in-gateway topology; provisioning step sharpened, ledger + latent updated
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 09:07:36 -07:00
Joel Hooks 182f001697 neat-memory DM shipped: ledger line (live daily LaunchAgent, proof send receipted) + curator bench claimed and fired
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 09:00:12 -07:00