From 4b4ed7f9ee3fba86c182fb9bc91207131fc0621b Mon Sep 17 00:00:00 2001 From: jwbron <8340608+jwbron@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:25:29 +0000 Subject: [PATCH 1/2] docs: update tester role description for coder-owns-tests model Correct stale descriptions of the tester's responsibilities in README.md and docs/guides/agent-teams.md to reflect that the coder now authors its own tests (#2936). The tester no longer writes regression tests from scratch; it reviews-and-hardens the coder's tests, adds missing coverage, and adversarially probes the implementation. Authored-by: egg --- README.md | 4 ++-- docs/guides/agent-teams.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a0b83c1ec9..8b65818e14 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Phase 3: Converge When all reviewers have ACKed all assigned producers, eac - **Delphi-style ordering.** Reviewers form independent judgments from git artifacts *before* seeing the producer's self-assessment. The server withholds producer metadata until the reviewer submits their own evaluation. - **Costly signals.** Proposals and reviews require structured attestations tied to real artifacts (commit SHAs, file paths, test counts), which are mechanically hard to fake without doing the work. - **Commitment devices.** Proposals have cooldown periods; retracting one requires citing specific new information; after repeated flip-flops the agent is locked out and escalated to a human. -- **Adversarial tester.** The tester is a dual role: it writes regression tests *and* probes the coder's implementation for bugs, NACKing with a failing test as the bug report. +- **Adversarial tester.** The tester is a dual role: it reviews-and-hardens the coder's tests (the coder authors its own tests), adds missing regression and adversarial cases, and probes the coder's implementation for bugs, NACKing with a failing test as the bug report. The review topology is asymmetric and sparse: reviewers evaluate producers, not each other, which keeps overhead at a handful of review edges instead of full pairwise review across the team. See [Agent Teams and Deliberative Consensus](docs/guides/agent-teams.md) for the full protocol, research foundations, and failure-mode analysis. @@ -105,7 +105,7 @@ Human gate Human gate Human gate* stacked-PR slices; humans 1. **Refine.** Agents analyze the task, research the codebase, and produce requirements; reviewers validate. A human approves before planning begins. 2. **Plan.** An architect recommends an approach, a task planner breaks it into discrete tasks with acceptance criteria and a **DAG of slices**, and a risk analyst flags concerns. A human approves before any code is written. 3. **Apply** *(Jira epic-mode only)*. When the task resolves to a Jira Epic, an `applier` role drives Jira mutations (epic description writes, child-ticket creates/edits, link creates, Won't-Do handoffs) on operator approval, before implementation begins. -4. **Implement.** The plan's slices are scheduled as a **DAG**: each slice runs as its own agent team on its own integration branch, with its own BRC consensus and its own stacked PR. Slices whose dependencies are satisfied run concurrently (per-pipeline cap `PipelineConfig.max_parallel_slices` at pipeline creation, falling back to `EGG_ORCH_MAX_PARALLEL_SLICES`, default 1 — raise on hosts with capacity; process-wide cap `EGG_ORCH_GLOBAL_MAX_PARALLEL_SLICES`, default 4); dependent slices wait for later waves. Within a slice the coder writes code, the tester writes and adversarially runs regression tests, and the documenter updates docs, while code, contract, security, and concurrency reviewers provide line-level feedback and can block consensus on a NACK. +4. **Implement.** The plan's slices are scheduled as a **DAG**: each slice runs as its own agent team on its own integration branch, with its own BRC consensus and its own stacked PR. Slices whose dependencies are satisfied run concurrently (per-pipeline cap `PipelineConfig.max_parallel_slices` at pipeline creation, falling back to `EGG_ORCH_MAX_PARALLEL_SLICES`, default 1 — raise on hosts with capacity; process-wide cap `EGG_ORCH_GLOBAL_MAX_PARALLEL_SLICES`, default 4); dependent slices wait for later waves. Within a slice the coder writes code and its own tests, the tester reviews-and-hardens the coder's tests (adding missing coverage and adversarially probing for bugs), and the documenter updates docs, while code, contract, security, and concurrency reviewers provide line-level feedback and can block consensus on a NACK. There is **no separate "PR" phase**. The pipeline's context PR (`egg//work` into `main`) is opened up-front at the plan-to-implement boundary; slice PRs stack onto it and are created automatically by the orchestrator as each slice reaches consensus. Only a human can merge, via the GitHub UI. See the [SDLC Pipeline Guide](docs/guides/sdlc-pipeline.md) and [Slice-DAG Implement Phase](docs/architecture/slice-dag.md). diff --git a/docs/guides/agent-teams.md b/docs/guides/agent-teams.md index 3a9638e1da..748402a061 100644 --- a/docs/guides/agent-teams.md +++ b/docs/guides/agent-teams.md @@ -69,7 +69,7 @@ This eliminates circular ACK problems. A coder doesn't ACK a reviewer's review o | reviewer_contract | coder | | reviewer_security | coder, tester | | reviewer_concurrency | coder, tester | -| tester | coder (implicitly — writes regression tests AND adversarially probes the implementation for bugs; NACKs with a failing test as the bug report when a coder-side bug is found) | +| tester | coder (implicitly — reviews-and-hardens the coder's tests, adds missing regression coverage AND adversarially probes the implementation for bugs; NACKs with a failing test as the bug report when a coder-side bug is found) | The tester has a **dual role**: it is both a producer (proposes test artifacts) and a reviewer (evaluates coder's work by running tests, adversarially probing for bugs and edge cases, and running lint/type-checks). From 7f9b1ef29bf129f05f153776c7b8d1b5c13015c0 Mon Sep 17 00:00:00 2001 From: "egg-reviewer[bot]" <261018737+egg-reviewer[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:46:32 +0000 Subject: [PATCH 2/2] docs: update Agent Roles table in sdlc-pipeline.md for coder-owns-tests The Agent Roles table in docs/guides/sdlc-pipeline.md still described the pre-f8d320a50 model. Update both stale rows: - Coder File Access: remove "tests" from the except-list (tests are coder-writable per shared/egg_restrictions/patterns.py); note the intentional overlap with the tester. - Tester Purpose: replace the from-scratch-author framing with the reviews-and-hardens model, mirroring the README.md update. --- docs/guides/sdlc-pipeline.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guides/sdlc-pipeline.md b/docs/guides/sdlc-pipeline.md index a0d8324e94..094cc8e7f7 100644 --- a/docs/guides/sdlc-pipeline.md +++ b/docs/guides/sdlc-pipeline.md @@ -604,8 +604,8 @@ Agents are organized into five categories (execution, analysis, review, utility, | Role | Category | Purpose | File Access | |------|----------|---------|-------------| -| **Coder** | Execution | Implements code changes | All files except docs, tests, `.egg-state/`, `.github/` (blocklist-complement; see [Agent Roles Reference](../reference/agent-roles.md#coder)) | -| **Tester** | Execution | Finds gaps, writes tests, runs linters and reports issues to coder | Test files and infrastructure only: `tests/`, `test/`, `**/test_*.py`, `**/*_test.go`, `**/*.test.{ts,tsx,js,jsx}`, `**/*.spec.{ts,tsx,js,jsx}`, `**/conftest.py` (see [Agent Roles Reference](../reference/agent-roles.md#tester)) | +| **Coder** | Execution | Implements code changes and authors its own tests | All files except docs, `.egg-state/`, `.github/` (blocklist-complement; tests are coder-writable and overlap the tester — see [Agent Roles Reference](../reference/agent-roles.md#coder)) | +| **Tester** | Execution | Reviews-and-hardens the coder's tests, adds missing regression and adversarial coverage, runs linters, NACKs with a failing test when a bug is found | Test files and infrastructure only: `tests/`, `test/`, `**/test_*.py`, `**/*_test.go`, `**/*.test.{ts,tsx,js,jsx}`, `**/*.spec.{ts,tsx,js,jsx}`, `**/conftest.py` (see [Agent Roles Reference](../reference/agent-roles.md#tester)) | | **Documenter** | Execution | Updates documentation | Documentation and markdown only: `docs/`, `**/*.md`, `**/README.md` (see [Agent Roles Reference](../reference/agent-roles.md#documenter)) | | **Autofixer** | Utility | Auto-fixes lint/format/type-check issues | Source and config files (no docs or contracts) | | **Conflict Resolver** | Utility | Resolves merge and inter-agent conflicts | Source, test, doc, and config files (no `.egg-state/`) |