Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
173f483
docs: add claude-code substrate to index and structure docs [doc-upda…
james-in-a-box[bot] May 19, 2026
4d9c3bb
docs: update deployment guide for Cilium portmap CNI changes [doc-upd…
james-in-a-box[bot] May 19, 2026
5b0d8d2
docs: add reconcile_autostash_pop_conflict to push diagnostic list (#…
james-in-a-box[bot] May 19, 2026
8297c16
Merge remote-tracking branch 'origin/egg/issue-2717/slice-1' into egg…
May 19, 2026
4bfd9ef
Merge remote-tracking branch 'origin/egg/issue-2717/slice-1' into egg…
May 19, 2026
fddeb82
slice-1 coder: bridge driver + R2 nested-dispatch fake + loader expan…
May 19, 2026
473b109
docs(#2717 slice-1): refine-team rubrics + flattened-bridge docs + AD…
May 19, 2026
67bfcfd
Merge remote-tracking branch 'origin/egg/issue-2717/slice-1' into egg…
May 19, 2026
71022b7
Merge remote-tracking branch 'origin/egg/issue-2717/slice-1' into egg…
May 19, 2026
831239d
slice-1 tester: rubric loader + bridge round-trip + R2 nested-dispatc…
May 19, 2026
63a2aaa
Merge remote-tracking branch 'origin/egg/issue-2717/slice-1' into egg…
May 19, 2026
cf8f71a
docs(#2717 slice-1): address reviewer_code v1 NACK on SKILL.md envelo…
May 19, 2026
2fca7e7
test_bridge_flattened_round_trip: fix subprocess PYTHONPATH
May 19, 2026
9ec45dd
Merge remote-tracking branch 'origin/egg/issue-2717/slice-1' into egg…
May 19, 2026
601df90
slice-1 tester v2: fix subprocess PYTHONPATH + non-blocking improvements
May 19, 2026
9f29ee8
Persist BRC history for slice-1 (#2548)
May 19, 2026
a49dcfe
Address slice-1 review: fix install path, bridge answer-write, silent…
egg-reviewer[bot] May 19, 2026
a23fd64
Move skill-loop python3 -c calls into bin/ helpers
egg-reviewer[bot] May 19, 2026
eaf788e
Address non-blocking review notes on PR #2724
egg-reviewer[bot] May 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7,022 changes: 7,022 additions & 0 deletions .egg-state/brc-history/2717-implement-slice-1.json

Large diffs are not rendered by default.

8,071 changes: 8,071 additions & 0 deletions .egg-state/brc-history/2717-implement-slice-1.md

Large diffs are not rendered by default.

133 changes: 68 additions & 65 deletions docs/architecture/claude-code-substrate.md

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions docs/development/STRUCTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,21 @@ orchestrator/
├── status_reporter.py # Real-time status reporter for collaborators
├── unified_sse.py # Unified SSE stream for all pipelines
├── webhooks.py # GitHub webhook handlers
├── substrate/ # Substrate-swap abstraction layer (walking-skeleton #2623): four Protocol interfaces + env-var-selected factory
│ ├── __init__.py # `select_substrate(env)` factory; reads `EGG_SUBSTRATE` (`k3s` or `claude-code`)
│ ├── spawner.py # `AgentSpawner` protocol + `AgentResult` dataclass
│ ├── message_bus.py # `MessageBus` protocol
│ ├── policy.py # `PolicyEnforcer` protocol
│ ├── worktree.py # `WorktreeManager` protocol
│ ├── k3s_adapter.py # `K3sSpawnerAdapter` shim wrapping `KubernetesSpawner.create_concurrent_spawn_fn`
│ ├── in_process.py # `run_pipeline_in_process()` generator entry point (claude-code substrate only)
│ └── claude_code/ # Claude-Code-native implementations
│ ├── spawner.py # `ClaudeCodeSpawner` — runs `egg_harness.run_agent` in-process (Agent-tool dispatch is a follow-up; see ADR "Open work")
│ ├── hook_entry.py # Standalone `python3 -m` PreToolUse hook script invoked by Claude Code (Bash/Write/Edit parser; fail-closed on ambiguous shapes)
│ ├── message_bus.py # `InProcessMessageBus` — subclasses `MessageStore` (in-memory)
│ ├── policy.py # `PolicyEnforcer` adapter (`check_write` + `install`) wrapping the `hook_entry.py` script
│ ├── settings.template.json # Claude Code settings template registering `hook_entry.py` as the PreToolUse hook
│ └── worktree.py # `LocalWorktreeManager` — per-agent worktrees under `~/.egg-worktrees/`
├── overseer/ # Overseer agent package (LLM-powered tier of pipeline health monitoring)
│ ├── classifier.py # Haiku-tier classifiers (stall, loop, error triage, off-track detection)
│ ├── decision_maker.py # Sonnet/Opus-tier decision-maker (corrective actions, redirect messages)
Expand Down
4 changes: 4 additions & 0 deletions docs/guides/deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ scripts/install-cilium.sh # downloads cilium-cli and runs `cilium install`
> **Why `--disable=metrics-server`?** Under Cilium, the metrics-server pod cannot reach the kubelet on the node IP, so it never becomes Ready. The resulting perpetually-unavailable `v1beta1.metrics.k8s.io` APIService causes the namespace controller's discovery step to fail, which wedges all namespace deletion (namespaces become stuck in `Terminating` indefinitely). egg does not use metrics-server; disabling it avoids this hang with no functional loss.
>
> **Migrating from a pre-#2703 install:** in-place CNI swap on a live k3s cluster is not supported (host CNI binaries, conflists, CRDs, `tunl0`, and per-pod veth pairs persist after deleting the calico-node DaemonSet). Run `make k3s-teardown && make k3s-setup` for a clean install. `install-cilium.sh` will refuse if it detects leftover Calico state.
>
> **Migrating from a pre-#2713 install:** `install-cilium.sh` chains the portmap CNI plugin (`cni.chainingMode=portmap`) for hostPort support and installs a pod-egress MASQUERADE iptables rule that Cilium omits in chained mode. If the running cluster predates #2713, `install-cilium.sh` will exit with a `cni-chaining-mode` mismatch error and instruct you to run `make k3s-teardown && make k3s-setup` — the chainingMode cannot be changed on a live cluster.
>
> **After a host reboot:** re-run `scripts/install-cilium.sh` (or `make k3s-setup`) to restore the pod-egress MASQUERADE iptables rule. This rule is not persisted across reboots. Without it, pod-to-external traffic (gateway → GitHub, sandbox agents → Anthropic API) silently fails while intra-cluster traffic continues working. On long-running hosts where re-running after every reboot is painful, wire the rule into `netfilter-persistent`/`iptables-restore` at the system level instead.

#### Image Management

Expand Down
7 changes: 4 additions & 3 deletions docs/guides/sdlc-pipeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -1634,9 +1634,10 @@ If the commit logs show success but files are missing/present in the PR diff, th

1. `PR-phase push succeeded` — Push completed. Includes `commits_ahead` showing how many local commits were ahead of remote before the push.
2. `Push attempt failed — caller may retry via reconcile` (INFO) followed by `Push rejected — attempting fetch+rebase+retry to reconcile divergence` (WARNING) — Initial push was rejected; `GatewayClient` is attempting a fetch+rebase reconcile and a second push automatically.
3. `PR-phase push failed after reconcile — falling back to PR against remote HEAD; orchestrator housekeeping commits dropped` (WARNING) — The reconcile+retry also failed. The PR is still created against the current remote HEAD — agent commits are preserved, but orchestrator housekeeping commits (BRC history rewrite, cleanup) are not included. This is preferable to failing the whole pipeline.
4. `PR-phase push skipped` — The push was not attempted. The `reason` field explains why: `"worktree_repo_path == repo_path"` (no separate worktree to push from) or `"no branch set"` (pipeline has no branch configured).
5. Check the gateway health: `curl http://egg-gateway:9848/api/v1/health`.
3. `Push reconcile: rebase succeeded but autostash pop produced conflicts` (ERROR) — The rebase itself succeeded, but the post-rebase autostash pop hit a merge conflict (`reconcile_autostash_pop_conflict`). The autostash entry is preserved in `git stash list` on the orchestrator worktree for manual recovery. The conflicting paths are listed in the log's `conflicting_paths` field.
4. `PR-phase push failed after reconcile — falling back to PR against remote HEAD; orchestrator housekeeping commits dropped` (WARNING) — The reconcile+retry also failed. The PR is still created against the current remote HEAD — agent commits are preserved, but orchestrator housekeeping commits (BRC history rewrite, cleanup) are not included. This is preferable to failing the whole pipeline.
5. `PR-phase push skipped` — The push was not attempted. The `reason` field explains why: `"worktree_repo_path == repo_path"` (no separate worktree to push from) or `"no branch set"` (pipeline has no branch configured).
6. Check the gateway health: `curl http://egg-gateway:9848/api/v1/health`.

**Quick diagnostic checklist**:

Expand Down
1 change: 1 addition & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ This index helps both humans and LLMs navigate the documentation efficiently.
| [The Agentic Feedback Loop](architecture/agentic-feedback-loop.md) | The foundational work-review-feedback cycle that drives quality |
| [Why egg Works](architecture/collaboration-effectiveness.md) | How the public, sandboxed, async model delivers safety and collaboration |
| [Integration-Test Trust Boundary](architecture/integration-test-trust-boundary.md) | Test execution contexts (in-sandbox-agent / trusted-CI-runner / human-operator) and fixture tiers; authoritative reference for plan-phase Trust-Boundary Audit (#2594) |
| [Claude Code Substrate](architecture/claude-code-substrate.md) | Substrate-swap walking-skeleton (#2623): four `Protocol`s (`AgentSpawner` / `MessageBus` / `PolicyEnforcer` / `WorktreeManager`) under `orchestrator/substrate/`, env-var-selected via `EGG_SUBSTRATE`, with Claude-Code-native implementations and an in-process orchestrator generator (`run_pipeline_in_process`) |

### Development

Expand Down
Loading
Loading