Adversarial hardening + starter-kit harness (reconciled with Gemini) - #3
Open
soyerno wants to merge 4 commits into
Open
Adversarial hardening + starter-kit harness (reconciled with Gemini)#3soyerno wants to merge 4 commits into
soyerno wants to merge 4 commits into
Conversation
Devil's-advocate loop (10 lenses → 3-skeptic majority verify → fix → re-analyze). Confirmed fixes applied: Engine (atlantis.mjs): - Judges are now independent agents (config-driven judge pool, accuser excluded but kept as last-resort domain judge); distinct agentType per lens. - Quorum: a crashed Judge counts as non-confirmation, never raises the bar; <2 valid votes ⇒ blocker is UNJUDGED (surfaced, never silently refuted). - always-on Guardians never deduped (independent safety net even when their profile was a lane); errored Guardian ≠ all-clear (re-associated by index). - Truncation only when a real branch/worktree backup exists; else full report. - New return-shape guard for a failed Oracle; structs documented in both READMEs. Slack bridge: - Fail-closed allowlist (users/channels); default --permission-mode plan (read-only). - Untrusted petition wrapped as DATA (anti prompt-injection) on new + resume. - Thread→session map: owner-gated + TTL + LRU; in-flight (pending) guard. - Bot-loop + double-fire guards; errors logged locally, never leaked to Slack. - daily-report no longer dumps raw git log on summary failure. Docs: synced README.es/en (struct + return shapes + sample Decree + troubleshooting), English architecture diagram, engines:node>=18. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ation Combines both lines of work off the shared rebrand base: - KEPT (Gemini): per-lane model scoring, interactive confirmLanes()/confirmGuards(), Antigravity integration + skill, README.md/es restructure. - KEPT (hardening): independent Judges + quorum (a crashed Judge never raises the bar; <2 votes ⇒ unjudged, never silently refuted), always-on Guardians never deduped, errored Guardian ≠ all-clear, oracle-failed guard, diff-backed clamp, Slack bridge security (allowlist, plan mode, prompt-injection wrapping, owner+TTL, bot-loop guard), daily-report no raw-log dump. - FIXED: committed merge-conflict markers left in README.md (EN side kept; ES lives in README.es.md); engine single-file honesty.
So a newcomer can run Atlantis out of the box and adopt the surrounding harness: - examples/agents/: the Artisans (front, back, docs, security) + a Guardian role + a Herald (kickoff) as Claude Code subagent files. The engine's default CONFIG routes to these, so copying them into .claude/agents/ makes it runnable as-is. - examples/memory/: an abstract memory harness — a durable, versioned project memory the agents read at session start and distill learnings into at close (lightweight always-loaded index + one fact per file + prune-to-archive). - examples/README.md: starter-kit index tying agents + memory + config together. All project-agnostic; references only Atlantis.
…he antigravity harness
The Gemini integration added a top-level `import readline`, which crashes the
sandboxed `Workflow({scriptPath})` path at load (Workflow scripts get no Node API).
Move readline to a lazy dynamic import inside confirmLanes/confirmGuards and guard
`process` access: under the Workflow sandbox both functions auto-proceed (no import
evaluated); under the antigravity Node harness with a TTY they stay interactive.
Both paths now coexist.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Reconciles two lines of work off the shared rebrand base, preserving the Gemini/Antigravity integration already on
mainand adding:1. Adversarial hardening (5-round devil's-advocate pass)
10 critic lenses → 3-skeptic majority verification → fix → re-analyze. Confirmed fixes:
Engine (
atlantis.mjs)CONFIG.judgespool), with the accuser excluded but kept as a last-resort domain judge. A crashed Judge counts as non-confirmation and never raises the bar;<2valid votes ⇒ blocker is unjudged (surfaced, never silently refuted).oracle-failedreturn shape (a crashed router no longer collapses into the legitimate "no lanes" case).Slack bridge (
slack/)--permission-mode plan(read-only) instead ofacceptEdits.pending) guard.daily-reportno longer dumps the raw git log if summarization fails.2. Fixed broken
mainREADME.mdonmainshipped with committed merge-conflict markers (<<<<<<< / >>>>>>>) from a prior PR merge — they render literally on GitHub. Resolved (kept the English side; Spanish lives inREADME.es.md).3. Starter-kit harness (
examples/)So a newcomer can run Atlantis out of the box and adopt the surrounding harness:
examples/agents/— the Artisans (front/back/docs/security) + a Guardian role + a Herald (kickoff) as Claude Code subagent files. The engine's defaultCONFIGroutes to these.examples/memory/— an abstract, durable memory harness the agents read at session start and distill learnings into at close.engines: node>=18, single-file honesty in the README.Heads-up (not changed here)
atlantis.mjsonmainnow starts withimport readline from 'readline'(from the interactiveconfirmLanes/confirmGuards). That makes it a Node module run via the Antigravity harness — but the sandboxedWorkflow({scriptPath})path can'timport(no Node API in that sandbox). If you want the Claude Code Workflow path to keep working, the interactive bits need to be gated behind a runtime check or moved into the harness. Flagging, not touching — it's your Gemini direction.🤖 Generated with Claude Code