Skip to content

test(wave-4): sybil-flood cohort #1 — coordinated-broadcast (W4.1, #196)#201

Merged
Dewinator merged 1 commit into
agent/wave-4-plagiarism-fixturefrom
agent/wave-4-sybil-flood
May 3, 2026
Merged

test(wave-4): sybil-flood cohort #1 — coordinated-broadcast (W4.1, #196)#201
Dewinator merged 1 commit into
agent/wave-4-plagiarism-fixturefrom
agent/wave-4-sybil-flood

Conversation

@Dewinator

Copy link
Copy Markdown
Owner

Summary

Third row of the W4.1 adversarial corpus, stacked on #198 (plagiarism row).

A canonical M=10 §10.4 cross-peer concentration cohort: ten signature-valid envelopes from ten distinct sock-puppet fixture-key node IDs, near-identical embeddings (cosine > 0.95), identical content + evidence_root, signed within a 5-minute window. Each envelope individually passes validateWireRecord — §10.4 is post-admission, REM-cycle, not admission-time.

The test asserts scoreFinding clamps local_weight strictly below MIN_LOCAL_WEIGHT_FOR_BROADCAST (0.3) at M=10 cohort size for both:

  • Saturation: over_concentration=1.0new_weight=0
  • Boundary: over_concentration=0.8 (the §10.4 trigger threshold) → new_weight=0.2 ≤ 0.3

Asserting at M=10 (vs plagiarism's M=3) proves §10.4 has no M-dependent escape hatch — the firebreak is purely a function of over_concentration, not of cohort size.

§10.2 quarantine arm — flagged, not silently weakened

The spec lists this row as "§10.2 quarantine + §10.4". §10.2 quarantines an origin only after N=5 consecutive rejections under §5 rules 1-20 (or single-strike on rules 5/16/19/20). A signature-valid well-formed sybil envelope passes those rules, so admission-time §10.2 does not fire on the cohort.

The §10.2 dimension of sybil-flood is therefore operator-driven multi-node escalation (the operator quarantines the M flagged origins after a §10.4 finding) and is deferred to W4.2 (HTTP corpus runner) and W4.3 (multi-node campaign report) per the issue #196 deferral rule. The deferral is captured in:

  • metadata.owns_mechanism = "§10.2 quarantine + §10.4 diversity filter" so the spec linkage stays greppable
  • metadata.comment — explicit text identifying the §10.2 arm as W4.2/W4.3
  • The metadata-invariant test which asserts both spec sections appear in owns_mechanism

This satisfies the issue #196 acceptance criterion: "If a §10 mechanism cannot be made to fire from a unit test (because it requires real federation or a multi-node cohort), that fixture is deferred to W4.2 — flag it with a comment, do not weaken the assertion."

Stacking

Files

  • cohort-keys-sybil-flood.json — 10× Ed25519 fixture-only keys (write-once, same discipline as fixture-key.json and cohort-keys-plagiarism.json)
  • sybil-flood/coordinated-broadcast-cohort.json — the M=10 cohort fixture
  • anti-echo-sybil-flood.test.ts — 10 assertions across metadata, distinct-origin invariant, Pillar-6 signatures, wire-validator admission, §10.4 trigger conditions (cosine + signed_at window + shared evidence_root), and the scoreFinding decision layer

Test plan

  • npx tsx --test src/__tests__/anti-echo-sybil-flood.test.ts — 10/10 green
  • npm test — 963 pass / 0 fail (10 new sybil-flood tests + 953 prior)
  • npm run build clean
  • node scripts/build-anti-echo-fixtures.mjs is idempotent (re-run produces byte-identical fixtures, no working-tree drift)

Decomposition status

This closes row 3 of issue #196's 8-row table. 5 categories remain (echo-chamber, slow-poisoning, truth-by-repetition, polarity-inversion-pair, chain-rewrite). Each will land as a separate one-PR-per-row.

🤖 Generated with Claude Code

Third row of the W4.1 adversarial corpus, stacked on **#198** (plagiarism row).

A canonical M=10 §10.4 cross-peer concentration cohort: ten signature-valid
envelopes from ten distinct sock-puppet fixture-key node IDs, near-identical
embeddings (cosine > 0.95), identical content + evidence_root, signed within
a 5-minute window. Each envelope individually passes validateWireRecord.

The test asserts scoreFinding clamps local_weight strictly below
MIN_LOCAL_WEIGHT_FOR_BROADCAST (0.3) at M=10 cohort size, for both:
- Saturation:  over_concentration=1.0  -> new_weight=0
- Boundary:    over_concentration=0.8  -> new_weight=0.2 ≤ 0.3

Asserting at M=10 (vs plagiarism's M=3) proves §10.4 has no M-dependent
escape hatch — the firebreak is purely a function of over_concentration.

The §10.2 quarantine arm of "§10.2 quarantine + §10.4" is operator-driven
multi-node escalation (§10.2 only fires on rejected lessons under §5 rules
1-20; signature-valid sybil envelopes pass those rules). Per the issue #196
deferral rule, the §10.2 dimension is flagged in metadata + comments and
deferred to W4.2/W4.3, never silently weakened.

This closes row 3 of issue #196's 8-row table. 5 categories remain
(echo-chamber, slow-poisoning, truth-by-repetition, polarity-inversion-pair,
chain-rewrite). Each will land as a separate one-PR-per-row.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dewinator added a commit that referenced this pull request May 3, 2026
…eep queue

Doc was written at the 132nd tick when only rows 1-2 had shipped and the
queue was 11 PRs deep. Tick 151 shipped row 3 (sybil-flood, PR #201) and
tick 152 posted the explicit "paused at 3/8" checkpoint with resumption
trigger ("once any of the queue's 14 PRs merges"). Three call-sites in
the doc still claimed "all 6 remaining rows", "9 native-app-track PRs",
and "paused at 2/8 until the 11-deep PR queue" — pure drift.

Updates: title, TL;DR, the row-3 table cell (now ✅ shipped + PR link),
the queue-drain trigger quote, the fixture-key prerequisite section
(rows 4-8 reuse the key; sybil-flood was the only row needing extras),
and the form-break footer's PR-count snapshot.

No behavior claims changed — the per-row §10-test correspondence stays
intact; this is pure number-and-link refresh so the next agent picking
W4.1 back up reads ground truth instead of stale state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dewinator added a commit that referenced this pull request May 3, 2026
…split)

The Native-App Track section claimed "Alle 9 PRs sind green und
MERGEABLE" and "9-PR-Queue", but the actual open-PR count has been 14
since PR #201 landed (151st tick). The 9-only framing under-stated the
drain workload Reed is sitting on and obscured the orthogonal cohorts —
3 W4.1 anti-echo PRs (#197, #198, #201) and 2 W2 federation PRs (#199,
#200) merge fully independent of the native-app stack (143rd-tick file-
overlap audit, 148th-tick 3-order commute proof on 13 PRs; #201 is
additive on top with no shared files).

Now CLAUDE.md states the 14-PR total with the cohort split and the
empirical commute evidence, so the next agent tick reads the correct
drain workload and the next "queue full → analyse, don't add" decision
is grounded in current state, not in the 2026-05-02 9-PR snapshot.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Dewinator Dewinator merged commit 8462dc5 into agent/wave-4-plagiarism-fixture May 3, 2026
1 check passed
Dewinator added a commit that referenced this pull request May 3, 2026
…rain)

Reed merged 10 PRs today: all 3 W4.1 anti-echo (#197/#198/#201), both W2
federation (#199/#200), 5 native-app (#190/#191/#192/#193/#194). Only the
linear 4-PR #178-stack remains open (#185 independent + #187#188#189
strictly stacked). Three-cohort split collapsed to one cohort — old order-
independence proofs (143rd/148th tick) now obsolete.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dewinator added a commit that referenced this pull request May 4, 2026
…212

Doc was last refreshed 2026-05-03 when only row 3 (sybil-flood) was
shipped. Since then PRs #197 (forgery) and #198 (plagiarism) also
merged on 2026-05-03, and PR #212 (echo-chamber, row 4) is now in
flight behind the Wave-1 stack. The footer's "14-deep queue" reference
is also stale (queue is currently 5).

Changes:
- header: "row 3 shipped, 5 remaining" → "rows 1-3 merged, row 4 in PR
  queue, 4 remaining"
- TL;DR: enumerate PRs #197/#198/#201 as shipped and #212 as in-flight
- table: add rows 1 and 2 with their shipped-PR pointers; row 4 verdict
  is now "in PR #212 — test green, awaiting Reed merge"
- "What this means" section: drop the stale "queue's 14 PRs" wording
- fixture-key section: rows 5-8 (was 4-8) reuse the row-1 key; note
  plagiarism + echo-chamber both mint cohort keys following the same
  pattern as sybil-flood
- footer: "paused at 4/8 in flight" (was 3/8 against a 14-deep queue)

Direct-to-main, zero queue growth — saves the next W4.1 tick from
re-deriving shipped/in-flight state from gh + git log.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dewinator added a commit that referenced this pull request May 4, 2026
…sks 1/2/3-most/4/5/7-core landed

The 09024a2 (tick 103) snapshot is two days stale: 9 of the 9 PRs in its
"recommended merge order" have merged, plus #197/#198/#201/#202/#203/#204/
#205/#206/#207 landed in the same window. Refresh the doc that "is the
canonical entry point for the native-app initiative" so a fresh reader
does not get a 79-tick-old picture.

Concrete changes:
- Phase line: "spike phase complete · gated on PR-queue drain" →
  "implementation underway · sub-tasks 1, 2, 3 (most), 4, 5, 7 (core)
  landed; 5 PRs open, ~26 h Reed-lag since #202#207".
- End-state installer list: ".dmg / .msi / .AppImage" → ".pkg / .msi /
  .AppImage", with the 2026-05-04 epic-body decision (.pkg, not .dmg)
  cited.
- Sub-task table: legend (✅ landed, 🔄 PR open, ⏳ spike-only) plus
  per-row PR status reflecting the current main:
  - Row 1 picks up #204 (79-migration walk as CI gate).
  - Row 3 picks up #202, #203, #206, #207 as landed and #208#211 as
    open. Row was "_none yet_".
  - Row 4 / 5 reframed as "inherent" (PGlite is one WASM binary;
    node-llama-cpp ships per-platform bindings).
  - Row 7 picks up #205 (Docker → PGlite migration helpers core).
- New "DbClient sub-story" subsection: 22 services touch Supabase
  directly on main; 2 in flight (Skills, SwarmPin); 20 remain after
  the open stack lands. Pattern: one service per PR.
- "Recommended merge order — open PR queue (9 deep)" section replaced
  with "Open PR queue (5 deep, all CLEAN+MERGEABLE)" — the 9 it
  documented have all merged.
- "Post-drain implementation gate" → "Post-stack implementation gate":
  parallel tracks (DbClient long-tail of 20 services + the sub-tasks
  6/8/9 release-pipeline triangle on tauri-plugin-updater per #207).

Doc-only, zero risk, direct-to-main per the standing rule for this
file shape.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant