Skip to content

docs(audit): frontier architecture red-team of SPARK (2026-08-25) - #288

Open
adrianwedd wants to merge 3 commits into
masterfrom
audit/architecture-redteam-2026-08-25
Open

docs(audit): frontier architecture red-team of SPARK (2026-08-25)#288
adrianwedd wants to merge 3 commits into
masterfrom
audit/architecture-redteam-2026-08-25

Conversation

@adrianwedd

Copy link
Copy Markdown
Owner

Adversarial architectural review of SPARK as a deployed persistent embodied agent, answering five commissioned questions (does the architecture deserve to exist; where SPARK cosplays agency; what failures are hard to see; where authority boundaries are fake; what SPARK should become next).

Method: four independent read-only spark-investigator tracks (architecture/SPOFs, agency-vs-theatre, observability, authority boundaries) + direct live-state reading + open-issue review. All top-ten findings independently re-verified at file:line before inclusion. Read-only — this document is the only write; no robot state changed.

Top verified findings

  • B1 Brain reply channel is unauthenticated — collect_reply (brain.py:775-798) reads a world-writable 1777 outbox with no writer check; any pi process can forge a reply into speech/memory/public-blog. The multi-uid rationale for 1777 is obsolete post-Stage 2: remove spark-io, collapse to one resident Claude session #242.
  • B2 Reflection routing is contradicted across three files; mind.call_claude/call_brain_reflection are dead code (zero callers; call_llm goes straight to ask_m5).
  • B3 Consolidated memory is plumbed only into the 5-min reflection nobody hears (retrieve_memories sole caller is mind.py:2570); every channel Obi uses is amnesiac past 10 turns.
  • B4 Durable memory is a diary about SPARK; its one perception-grade writer (wander → notes.jsonl) is stranded from spark-persona reads (notes-spark.jsonl).
  • B6 confirm_motion_allowed is a bare bool with no provenance — motion authority on the exact pre-state(quiet): make quiet mode attributable, bounded and explainable #209 footing quiet-mode was fixed off.

Full report: docs/audits/2026-08-25-spark-architecture-redteam.md (verdict, ten findings, complexity to delete/defend, five falsification experiments, next-capability roadmap, an "if I inherited this robot" plan, and a one-page adversarial review for another frontier model to critique).

🤖 Generated with Claude Code

adrianwedd and others added 2 commits August 25, 2026 00:56
Adversarial review answering five questions: does the architecture deserve
to exist; where SPARK cosplays agency; what failures are still hard to see;
where authority boundaries are still fake; what SPARK should become next.

Four read-only spark-investigator tracks + direct live-state reading +
open-issue review; top-ten findings independently re-verified at file:line.

Key verified findings: the brain reply channel is unauthenticated
(collect_reply reads a world-writable outbox with no writer check,
brain.py:775-798 / _DIR_MODE 1777); reflection routing is contradicted
across three files with two dead functions (mind.py call_claude has zero
callers; call_llm goes straight to ask_m5); consolidated memory is plumbed
only into the reflection nobody hears (retrieve_memories sole caller is
mind.py:2570); confirm_motion_allowed is a bare bool on the pre-#209
footing. No robot state changed; this document is the only write.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThqC6Gq4mZyXWnnvGC2a57
…ed-team

Independent frontier-model review commissioned to attack the red-team report,
not polish it. Re-traces every top-ten finding to file:line (crown jewels read
first-hand) and against live production state.

Core disagreement: the report's ranking is one-directionally biased. It dresses
same-uid trust assumptions as security bypasses (B1 demoted to a P1 nonce) and
test-pinned/documented dead code as latent chaos (B2), while under-stating the
memory/learning findings and getting its flagship agency line wrong on its own
cited line (B9: memory.py:299-307 reads outcomes back into the prompt).

Adds findings the report missed, incl. a real privacy bug: the message_obi
redaction is bypassed through session history into the jailbroken personas'
prompts and the public thoughts feed (P0), consolidation failing live since
Aug-23, evolve advertised-but-dead with a falsified audit trail, single-flight
voice starvation up to 15 min, and night-silence/announce bounds sitting in the
evolve-whitelisted file. Re-ranks P0s and gives a 3-month preserve/delete/build
verdict.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThqC6Gq4mZyXWnnvGC2a57
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 24, 2026

Copy link
Copy Markdown

Deploying spark with  Cloudflare Pages  Cloudflare Pages

Latest commit: e752e5a
Status: ✅  Deploy successful!
Preview URL: https://17658ec7.spark-e11.pages.dev
Branch Preview URL: https://audit-architecture-redteam-2.spark-e11.pages.dev

View logs

Grounds §4 of the peer review in real symbols. The minimal change is three
pieces of plumbing over primitives SPARK already has, not a memory platform:

1. deterministic report-kind extraction of explicit first-person assertions
   from existing conversation events (obi_chat.jsonl, voice user turns) — no
   LLM, so no model-guessed facts by construction;
2. a physically separate state/people-{persona}.jsonl store that reflection
   never reads — the contamination firewall that keeps person facts out of the
   public thoughts/blog/social path;
3. relevance-mode retrieval injected into the two SPARK-identity channels
   (voice-as-spark, obi-chat) with "Obi told me" provenance framing.

Reuses pxh.provenance (report ceiling, supersession), pxh.memory (scorer,
non-padding retrieval), pxh.health. Gated behind fixing the message_obi
redaction leak first (display_text is a local at mind.py:2897, re-read raw at
mind.py:3173). Couples to a new px-mind-consolidation health component so the
currently-dead nightly consolidation stops failing silently. Includes a
Day1/Day3 lived acceptance test, falsification tests, and an explicit
what-NOT-to-build list (no embeddings/episodic/platform until keyword
retrieval is measured insufficient).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThqC6Gq4mZyXWnnvGC2a57
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