Scaffold landed in commit f52a914:
mcp-server/src/__tests__/fixtures/anti-echo/README.md
mcp-server/src/__tests__/fixtures/anti-echo/corpus-types.ts
Per docs/wave-4-anti-echo.md §"Sub-task decomposition", W4.1 is the first piece of Wave 4 and is explicitly agent-eligible. This issue tracks the work after the scaffold: fill the corpus and add the harness, one category at a time so each PR stays small and reviewable.
Decomposition (one PR per row, in any order)
Each PR adds:
- A
<category>/ subdirectory with its first JSON fixture (or cohort).
- A node
--test test file (anti-echo-<category>.test.ts) under mcp-server/src/__tests__/ that loads the fixture via AntiEchoCorpusFixture/AntiEchoCohortFixture and asserts the §10 mechanism rejects/quarantines/demotes per metadata.expected_outcome.
- If the PR is the first to need a signing key, also lands
fixture-key.json (Ed25519, fixture-only, deterministic seed). The README already reserves the file slot.
| # |
Category |
§10 mechanism it owns |
Single envelope or cohort? |
| 1 |
forgery |
§3.7 PoK + §5 rule 1 |
single |
| 2 |
plagiarism |
§10.4 diversity filter |
cohort (N≥3, same key OR different keys depending on §10.4 sub-rule the test exercises) |
| 3 |
sybil-flood |
§10.2 quarantine + §10.4 |
cohort (M≥10) |
| 4 |
echo-chamber |
§10.4 |
cohort (≥80% of synthetic peer set) |
| 5 |
slow-poisoning |
§10.5 REM self-audit |
single (paired with a high-confidence local experience the test seeds first) |
| 6 |
truth-by-repetition |
§10.4 + §10.6 firebreak |
cohort (N keys, asserts no Tier-A promotion) |
| 7 |
polarity-inversion-pair |
§10.3 contradicts-trigger |
cohort (size 2) |
| 8 |
chain-rewrite |
§5 rule 19 (single-strike) |
single |
Acceptance criteria
- All 8 categories have at least one fixture and one test case.
- Every assertion checks both the rejection (admission decision) and the side effect (trust-edge delta,
nodes.quarantined_until, memory_relations.contradicts edge, REM falsification reason) — per wave-4-anti-echo.md §"Corpus categories".
- Tests live alongside the existing
lesson-admission.test.ts, rem-audit.test.ts, swarm-admit.test.ts etc. and pass with npm test.
- No fixture changes the production code path. 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 (HTTP corpus runner, separate issue) — flag it with a comment, do not weaken the assertion.
Out of scope for this issue (covered later)
- W4.2:
scripts/run-anti-echo-campaign.mjs HTTP runner against a self-loop federation listener.
- W4.3: multi-node campaign + report generator →
docs/constitution-defense-report.md. Operator-driven, blocked on Wave 2.
Related
- Anchor doc:
docs/wave-4-anti-echo.md
- Wave overview:
docs/waves.md
- Spec:
docs/SWARM_SPEC.md §10
- Scaffold commit: f52a914
Scaffold landed in commit f52a914:
mcp-server/src/__tests__/fixtures/anti-echo/README.mdmcp-server/src/__tests__/fixtures/anti-echo/corpus-types.tsPer
docs/wave-4-anti-echo.md§"Sub-task decomposition", W4.1 is the first piece of Wave 4 and is explicitly agent-eligible. This issue tracks the work after the scaffold: fill the corpus and add the harness, one category at a time so each PR stays small and reviewable.Decomposition (one PR per row, in any order)
Each PR adds:
<category>/subdirectory with its first JSON fixture (or cohort).--testtest file (anti-echo-<category>.test.ts) undermcp-server/src/__tests__/that loads the fixture viaAntiEchoCorpusFixture/AntiEchoCohortFixtureand asserts the §10 mechanism rejects/quarantines/demotes permetadata.expected_outcome.fixture-key.json(Ed25519, fixture-only, deterministic seed). The README already reserves the file slot.forgeryplagiarismsybil-floodecho-chamberslow-poisoningtruth-by-repetitionpolarity-inversion-pairchain-rewriteAcceptance criteria
nodes.quarantined_until,memory_relations.contradictsedge, REM falsification reason) — perwave-4-anti-echo.md§"Corpus categories".lesson-admission.test.ts,rem-audit.test.ts,swarm-admit.test.tsetc. and pass withnpm test.Out of scope for this issue (covered later)
scripts/run-anti-echo-campaign.mjsHTTP runner against a self-loop federation listener.docs/constitution-defense-report.md. Operator-driven, blocked on Wave 2.Related
docs/wave-4-anti-echo.mddocs/waves.mddocs/SWARM_SPEC.md§10