Repository navigation
agents: don't spend cycles detecting a publisher that breaks identity - #8242
Conversation
A publisher that reuses or restarts group sequences, or rewinds timestamps, hurts only its own broadcast. Code must stay safe (no panic, no unbounded cost, no effect on other broadcasts) but not detect it. REVIEW.md's matching "Not findings" entry now covers reused sequences. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed 80f185c using the base branch's review rules.
No actionable findings. The two changes distinguish the publisher's identity contract from runtime detection of misuse confined to its own broadcast, while explicitly retaining panic prevention, bounded work and isolation of other broadcasts. REVIEW.md keeps the same confinement condition rather than making all sequence-reuse consequences non-findings.
Direction: preserve those safety boundaries when applying this guidance; this instruction-only change does not establish that any particular implementation's detection can be removed safely.
Verification limits: GitHub-only static review of both complete instruction files, base guidance and the referenced #8202 context. No implementation audit, tests or quest commands run. Rechecked open/non-draft state, full head and published reviews immediately before this COMMENT.
Copies of one group identity disagree only when the publisher broke the identity rule, which hurts only its own broadcast. Maintainer decision, 2026-11-07: drop it entirely. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. WalkthroughThe review guidance now states that publisher identity or timestamp violations must not cause panics, unbounded work, or effects on other broadcasts. It also excludes reports about publisher sequence reuse when only the publisher’s own broadcasts are affected. Merge Risk:
|
There was a problem hiding this comment.
Important
Two contradictions to resolve before this lands: the timestamp example in the new rule reads as forbidding main's deliberate TimestampMismatch refusal, and the rule lands ahead of the #8202 / quest changes that remove the recreated-track detection it forbids.
Reviewed changes
- New Required rule —
AGENTS.md:13says a publisher that reuses or restarts group sequences or rewinds timestamps hurts only its own broadcast, so code spends no cycles detecting it and must only avoid panics, unbounded work, and cross-broadcast effects. - Not-findings entry widened —
REVIEW.md:55now covers a publisher's reused sequences alongside a peer's duplicate IDs when only the sender's own requests or broadcast suffer.
⚠️ The rule lands before the code and quest it invalidates
The PR body says #8202 drops its recreated-track check, but #8202's head (38a49ab) still adds Error::Reused / Reused and the per-name high-water record; only the restart detection and its quest were dropped. quest/m2/sequence-reuse.md is still on main (listed at quest/m2/README.md:201) and its Goal mandates exactly the detection this rule forbids, so whichever PR lands first, main will hold instructions that contradict each other and quest context will tell agents to build the check.
Technical details
# Rule lands before the code and quest it invalidates
## Affected sites
- `AGENTS.md:13` — new Required rule.
- `quest/m2/sequence-reuse.md:1` — "A recreated or restarted track cannot reuse group sequences"; its Goal says moq-net "refuses" reuse. Still on main and listed at `quest/m2/README.md:201`.
- `#8202` at `38a49ab` — still adds `Error::Reused` (`rs/moq-net/src/error.rs`), the per-name high-water record (`rs/moq-net/src/model/broadcast.rs`), and the JS `Reused` path (`js/net/src/error.ts`, `broadcast.ts`, `track.ts`). Its own commit message says "the recreated-track half ... landed in #8202".
- `js/net/src/broadcast.ts:439` — the `createTrack` doc on main already promises the append throws on a reused sequence.
## Required outcome
- After both PRs land, no instruction file, quest, or API doc asks for reused-sequence detection, and `#8202` does not implement it.
- The PR body's claim about `#8202` matches `#8202`'s head.
## Open questions for the human
- Is the recreated-track refusal being dropped, as this body says? If yes, `#8202` needs that commit before this rule lands, and `js/net/src/broadcast.ts:439` needs its promise removed.deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
ℹ️ Reviewed the new commit only; the
copy-identityquest deletion is clean. One scope question about the existing copy-conflict checks the deleted quest described.
Reviewed changes
quest/m1/copy-identity.mdremoved — the per-frame timestamp and object-field digest plan is dropped under the new rule, along with itsquest/m1/README.mdentry;#8201is closed unmerged as the body says.- The
AGENTS.mdandREVIEW.mdedits are unchanged since the prior review and are not re-reviewed here.
ℹ️ The rule's boundary against existing copy-conflict checks is unstated
The deleted quest described the existing size/inflated and overlapping-byte comparisons (rs/moq-net/src/model/group/content.rs:90, rs/moq-net/src/model/frame.rs:1155) as the narrow version of the digest check it wanted to add. Those checks still fail a disagreeing copy with ProtocolViolation on main, which the new rule's "spend no cycles detecting it" can be read to retire, yet the body says "Impact: none". State whether the existing conflict checks stay (and carve them out) or are a follow-up.
Technical details
# Rule boundary for existing copy-conflict checks
## Affected sites
- `rs/moq-net/src/model/group/content.rs:90` — `size`/`inflated` mismatch returns `ProtocolViolation`.
- `rs/moq-net/src/model/frame.rs:1155` — overlapping-byte mismatch returns `ProtocolViolation`.
- `rs/moq-net/src/model/frame.rs:1889`, `2011` — tests asserting the refusal.
- `js/net/src/group.ts:512` — JS counterpart's inflated-size refusal.
- `quest/m1/copy-identity.md` (deleted) — named these as the narrow version of the planned digest check.
## Required outcome
- The rule says whether the existing copy-conflict refusal stays, so the body's "Impact: none" is accurate and an agent does not read the rule as retiring these checks.
## Open questions for the human
- If the existing checks stay, what distinguishes them from the deleted timestamp/field digests?deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Rule scoped to identity breaks —
fda232edroppedrewinding timestampsfrom theAGENTS.md:13example list, leaving the ordering refusal tors/moq-net/AGENTS.md, and namedthe violationas the subject of the no-panic/no-unbounded-work clause. That addresses the prior inline finding onAGENTS.md:13, and the rule now matches what#8202(merged ase18730d) documents: nothing detects a reused group identity.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

Summary
Adds one Required rule to
AGENTS.md: a publisher that breaks the identity rule (reused or restarted group sequences) hurts only its own broadcast, so code spends no cycles detecting it. It must still never panic, cost unbounded work, or affect other broadcasts.REVIEW.md's "Not findings" entry on reused IDs now also covers a publisher's reused sequences, so reviewers stop raising it. That list saysAGENTS.mddecides its entries, and until now no rule there backed this one.Prompted by the maintainer (2026-11-07, /quest-spawn), after deciding moq-dev/moq#8202 drops both its restart detection and its recreated-track check.
It also deletes quest/m1/copy-identity.md, which planned per-frame timestamp and field digests so that disagreeing copies of one group identity fail. Under this rule that is detection of a publisher's own misuse. Maintainer decision, 2026-11-07: drop it entirely; its draft moq-dev/moq#8201 is closed. Not chosen: keeping only the check that refuses commits past a group's settled end.
Impact
Public API: none. Wire: none. Agent instructions only.
Models
Size: XS
Implementer: Claude Code, claude-opus-5-5, unknown effort
Implementer: Claude Code, claude-opus-5-5, low effort (iterate, XS)
Review
Rewritten by
quest reviewafter each round.01a1b99a-be1b-7622-9de2-6ebb808fd7b2, round 1The change updates guidance and removes the abandoned quest without changing executable code or leaving references to the deleted quest.