You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
id(chat): chat v1 core remainder — membership/history enforcement, store integration, rate admission (follow-on of #3799) #3950
Follow-on slice of #3799 (ID chat v1 core). The first slice landed in PR #3941 (merged 0b3719e): pkgs/id/src/chat.rs — the chat.message.v1 body shape, bounded sanitized text, blob/event links, and the causal projection (after + backlink parents, dedupe, no arrival-defined order), with unit tests.
This issue owns the remainder of #3799's acceptance criteria:
Membership and channel history policy enforcement on reads and writes, using the channel group's existing policy (crate::groups::policy): non-member writes refused at admission; new-member history follows the group history policy on reads.
Send-rate admission: the world-chat limits as the starting configuration (50 messages per 10 seconds per author; 2,048-byte text cap already enforced by the message shape), with a justified configuration seam if tests motivate one.
Integration test: two independent members create/join a channel and exchange signed chat.message.v1 events; signatures, channel/group binding, replay, duplicate delivery, and out-of-order delivery are covered (duplicate + out-of-order are already proven at the projection level by PR feat(id): chat.message.v1 message shape + causal projection (#3799) #3941's unit tests — this test proves them through the store).
Out of scope (unchanged from #3799): presence/typing (#2809), attachment multi-provider retrieval (#2260/#2261), any change to world chat behavior.
Filed by queue worker lane D from task 5794, per the phased pattern: one issue per slice, #3799 stays the parent record.
Picked up by Lane A queue worker for task 5893. Verified fresh: issue #3950 OPEN with no hard-stop labels, PR #3941 merged (0b3719e), no competing PR or branch for issue #3950. Implementing the chat v1 core remainder in pkgs/id: record conversion into ChatRecord, membership/history policy enforcement, send-rate admission, and the two-member store integration test.
Implemented by Lane A queue worker for task 5893: PR #3965 (branch queue/5893-3950-chat-v1-remainder @ 72d54bd) — ChainExt chat field + EventStore::chat_records/group_policy/chat_timeline + LocalEvents::send_chat with roster admission and the SendRate limiter (50 per 10s, ChatRateConfig seam). Laptop tests: cargo test -p id --lib chat = 41 passed (two-store exchange with duplicate + out-of-order delivery, non-member write/read refusal, rate burst/refusal, group binding); full lib suite 1491 passed with one pre-existing failure (store_traits sqlite lock test — sqlx 0.9.0 lock edges from PR #632; this diff touches no manifest or lock).
Task 5893 is parked 20m, not for CI: the merge waits on the Codex review of PR #3965, which has not run yet. Resume: read and disposition the Codex findings on PR #3965, merge it, and complete task 5893 as fixed_merged.
agent-note:v1
event: handed_off
task: 5893 (repo-health-code-pilot; repo-worker-code; lane code-y)
at: 2026-11-04T16:46Z
found_via: atomic queue claim (lane code-y)
verified: Issue #3950 OPEN, no hard-stop labels; claim labels resynced from parked to claimed (queue/claimed, status/in-progress, work/assigned). PR #3965 (branch queue/5893-3950-chat-v1-remainder) still OPEN at fresh check. Execution-lane assignment for task 5893 is opencode — the bound opencode claimant session owns the work on PR #3965; this lane does not work it directly. Attempts 28/48.
next: Claimant launches the bound opencode session for task 5893; resume on PR #3965 — disposition checks/Codex findings, merge when verified, then complete task 5893.
Expectation: the bound session works only task 5893, revalidates fresh state, heartbeats, and records a terminal queue state with this same session id.
Checks: CodeRabbit skipped; the ID PR matrix did not run because id-check.yml lacks a pull_request trigger (coverage gap). Codex review is running on the new head. The three prior accepted Codex findings have fix replies.
Activity
dezren39 commentedon Nov 1, 2026
Picked up by Lane A queue worker for task 5893. Verified fresh: issue #3950 OPEN with no hard-stop labels, PR #3941 merged (0b3719e), no competing PR or branch for issue #3950. Implementing the chat v1 core remainder in pkgs/id: record conversion into ChatRecord, membership/history policy enforcement, send-rate admission, and the two-member store integration test.
dezren39 commentedon Nov 1, 2026
Implemented by Lane A queue worker for task 5893: PR #3965 (branch queue/5893-3950-chat-v1-remainder @ 72d54bd) — ChainExt chat field + EventStore::chat_records/group_policy/chat_timeline + LocalEvents::send_chat with roster admission and the SendRate limiter (50 per 10s, ChatRateConfig seam). Laptop tests: cargo test -p id --lib chat = 41 passed (two-store exchange with duplicate + out-of-order delivery, non-member write/read refusal, rate burst/refusal, group binding); full lib suite 1491 passed with one pre-existing failure (store_traits sqlite lock test — sqlx 0.9.0 lock edges from PR #632; this diff touches no manifest or lock).
Task 5893 is parked 20m, not for CI: the merge waits on the Codex review of PR #3965, which has not run yet. Resume: read and disposition the Codex findings on PR #3965, merge it, and complete task 5893 as fixed_merged.
dezren39 commentedon Nov 1, 2026
🤖 Agent note · picked up — OpenChamber scheduled lane
294 remaining items
dezren39 commentedon Nov 4, 2026
agent-note:v1
event: handed_off
task: 5893 (repo-health-code-pilot; repo-worker-code; lane code-y)
at: 2026-11-04T16:46Z
found_via: atomic queue claim (lane code-y)
verified: Issue #3950 OPEN, no hard-stop labels; claim labels resynced from parked to claimed (queue/claimed, status/in-progress, work/assigned). PR #3965 (branch queue/5893-3950-chat-v1-remainder) still OPEN at fresh check. Execution-lane assignment for task 5893 is opencode — the bound opencode claimant session owns the work on PR #3965; this lane does not work it directly. Attempts 28/48.
next: Claimant launches the bound opencode session for task 5893; resume on PR #3965 — disposition checks/Codex findings, merge when verified, then complete task 5893.
developing-today commentedon Nov 4, 2026
🤖 Agent note · handed off
opencode-claimant)repo-health-code-pilot, workerrepo-worker-code)ses_e5e58705ed4ffe37I4leC0g9uZopencode-route/workhorse; agentbuilddezren39 commentedon Nov 4, 2026
🤖 Agent note · picked up
ses_e5e58705ed4ffe37I4leC0g9uZ1f401612898937dba13289761dcfb27c30c36bda; no competing open PR found.8a8d509f87fc499c9ff3963fca345c060c58c0b2produces merge conflicts in 26 files in a read-only merge-tree check; no source edits or merge started. Reviewing a safe reconciliation before updating canonical PR feat(id): chat v1 core remainder — store wiring, membership/history enforcement, rate admission (#3950) #3965.dezren39 commentedon Nov 4, 2026
🤖 Agent note · PR opened
repo-worker-code), laneopencode; task 5893, sessionses_e5e58705ed4ffe37I4leC0g9uZ.990bab5caa7c4b8f91a9f9a2c92082d859752388after merging current main8a8d509; PR is OPEN and merge state is CLEAN. No competing PR found.chat::tests(15),chain::tests(20),event_store::chat::tests(4).id-check.ymllacks apull_requesttrigger (coverage gap). Codex review is running on the new head. The three prior accepted Codex findings have fix replies.pr_opened; id(chat): chat v1 core remainder — membership/history enforcement, store integration, rate admission (follow-on of #3799) #3950 remains OPEN; no merge attempted.