Repository navigation
sminos bridge: scope the delivery key by project (#229) - #231
Merged
Merged
Conversation
…a made-up harness name never renames one
…retried whole, a resume unlinks, one writer's lines read in order - reconciliation looks, for each seat whose session no longer runs, for the record naming a job it continues in: the job may join before the harness writes it. transcript_path keeps its hits per invocation, so the pass costs no extra glob beside state(). - hand_off copies the cursor and moves the seat before it retires the old session; a seat lock another command holds leaves it joined, for the next pass to do again; the rename runs whoever won the retirement. - an own joined after a continued retirement ends the link: a resumed session is its own member, and the job keeps its own events. - a chain's in-charge events are merged in each writer's seq order.
…aches on another thread
…d-off is the target the verbs and the bridge see
A writer id is per session, but every project numbers a writer's events on
its own, so the bridge's per-writer high-water mark dropped a writer's
events in a second project as duplicates once its seq passed them in the
first, and the CLI settled them as delivered: lost silently.
- sminos_control.deliver sends key {project, writer, seq}; push_live and
push_member carry the project id from deliver_next and send.
- The mod's mark is <project>/<writer>, the bare writer for a key naming no
project; kept marks stay as they are (no migration). delivered events and
refusals carry the full key.
- The child keeps the same marks, and refusals with their project.
- report_refused skips a refusal naming another project.
- A duplicate answer is still settled, but warned and written to daemon.log.
Closes #229.
SSFSKIM
force-pushed
the
bridge-dedupe
branch
from
October 18, 2026 07:33
039c10b to
48c00a6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #229.
The bridge mod deduplicated sminos deliveries with a per-writer seq mark (
hooks/mods/bridge.tsxdeliver()), but each project numbers a writer's events on its own. A writer that had delivered a higher seq to a session in one project had that writer's messages to the same session in another project, at or below the mark, answeredduplicate.sminos_control.deliverthen read that as success, anddeliver_nextsettled them. An audit of every addressed message on this machine (283 pairs, matched against the recipients' transcripts) found 13 such losses:1ea561bc:1–10→ CI-opt, bare mark 98;a45b97a3:8, 10, 13(sends from CI-opt to maws-3f), bare mark 13 from local-MAWS.The audit found nothing delivered twice and nothing sent to the wrong session.
Change
{project, writer, seq}, frompush_event/send/ the seat send path throughpush_member→push_live→sminos_control.deliver.<project>/<writer>. A key with no project (from a CLI older than this) is held to the bare writer mark, the only mark such a CLI ever raised. Kept bare marks are left as they are, so nothing is migrated or dropped, and a poisoned bare mark stops mattering once scoped keys arrive.sminos_bridge.py) keeps the same scoped marks. Refusals keep the project in their key.sminos_outcomes.report_refusedskips another project's refusal.duplicateanswer is no longer silent:sminos_control.deliverwarns (the sender'ssayprints it) and writes adaemon.logline, and still settles, since with scoped keys a duplicate really was submitted before.docs/doperpowers/plans/2026-10-15-arkho-desk-c2-bridge.md) updated where it defines the kept marks, thedeliverkey and thedeliveredevent.Tests
bridge.test.ts:{project: p2, …, seq: 6}is submitted.test-bridge-control.sh, through the real CLI: the second project's lower seq is delivered beside an existing bare mark, and a duplicate warns and logs.test_policy_requests.py: a refusal kept by another project is not reported here.Review: medium rung, 2 findings, both about version skew, dismissed:
$.plugin.root, bridge.tsx:645).ci-gate GREEN on 039c10b: https://github.com/SSFSKIM/doperpowers/actions/runs/39097186323.
Version 7.172.0: merge after #228 (7.171.0). A running session keeps its old mod until it restarts or reloads its mods.
🤖 Generated with Claude Code