You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Phase 6 of the self-evolving verifier (first phase derived from
external public systems rather than from CE's own register, though
internally aligned with r-bd1386df + r-c2ee5c80).
When a high-novelty cross-reference is promoted to an Insight, the
synthesize step now generates N divergent candidate insights instead
of a single one. Each candidate is canonicalized (Stage 1), scored by
alias-gap to the existing register, and the candidate with the largest
gap wins (ties within ±0.02 broken by self-reported confidence). Pushes
the generator toward structurally distinct candidates instead of
converging on the local attractor — directly addresses the failure
mode the recent reverify exposed (17/18 dark entries downgrading to
extension because the journal converged on a narrow architectural
cluster).
Implementation:
- New SYNTHESIZE_VARIANTS_PROMPT asks for {N} candidates, each with an
explicit divergence_axis. Single LLM call, batch output.
- New _select_synthesis_candidate() canonicalizes each candidate using
the existing _canonicalize_central_move (cross-mixin call resolves
via engine MRO) and computes alias-gap via existing _alias_gap.
- New _build_and_persist_insight() factors out the common Insight
construction so single-candidate (pre-Phase-6, count==1) and
Best-of-N paths share construction code.
- New synthesis_candidate_count config knob (default 3, range 1-10).
Setting to 1 disables Phase 6 entirely (single-candidate behavior).
- Settings UI knob; CLI honors via engine.toml.
Cost: synthesis_candidate_count × synthesis call per qualifying xref.
Default 3× synthesis cost. Bounded — only fires above novelty_threshold.
Borrows tournament-ranking pattern from Google's AI Co-Scientist
(Generation / Reflection / Ranking / Evolution agents) + standard
agentic best-of-N selection.
README:
- Add "Inspirations and prior work" section. Distinguishes Phases 1-5
(derived from CE's own validated register, the literal self-evolution
claim) from Phases 6+ (borrowed from public research-agent systems
where the borrow fits cleanly). Each Phase 6+ borrow names its
source: Co-Scientist, Sakana AI Scientist, Stanford STORM, Tree of
Thoughts. Acknowledges general agentic patterns (Claude Code,
cross-family verification, RAG) and academic lineage (Popperian
epistemology, Pareto theory, prediction markets). Lists the specific
combinations that appear genuinely novel (canonical-form alias-gap,
literature-watch leakage check, freshness probe, append-only
reverification audit, self-evolving-from-own-register).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two distinct sources have shaped CE's architecture, and they're worth distinguishing.
226
+
227
+
### Phases 1-5 came from CE's own validated register
228
+
229
+
The five phases of self-evolution we shipped are not borrowed from external systems — they were derived from validated insights *in the engine's own ideation_on_ideation journal*. Each phase has a source register entry:
-**Phase 5** (explore/verify space split) ← `r-9a35e387` (conf 0.77)
236
+
237
+
That is the literal self-evolution claim: the engine identified architectural patterns its own verifier should adopt, and we applied those patterns to the verifier.
238
+
239
+
### Phases 6+ borrow from comparable public systems
240
+
241
+
Once the verifier side stabilized, we audited public research-agent systems for ideas the engine could borrow on the *generator* side. Each subsequent phase credits its inspiration:
242
+
243
+
-**Phase 6** (Best-of-N synthesis with alias-gap ranking) — borrows the **tournament-ranking** pattern from **[Google's AI Co-Scientist](https://research.google/blog/accelerating-scientific-breakthroughs-with-an-ai-co-scientist/)** (Generation / Reflection / Ranking / Evolution agents) plus standard agentic best-of-N selection. Internally aligns with `r-bd1386df` ("cascading structured pairwise tournaments") and `r-c2ee5c80` ("two-player adversarial game over a library") from CE's own register.
244
+
-**Phase 7** (persona-conditioned introspection, planned) — borrows multi-perspective question generation from **[Stanford STORM / Co-STORM](https://github.com/stanford-oval/storm)**. Each persona (skeptic / outsider / historian / contrarian / practitioner) surfaces blind spots the single-voice introspection misses.
245
+
-**Phase 8** (idea evolution from downgraded extensions, planned) — borrows the mutation loop from **[Sakana AI's "AI Scientist"](https://github.com/SakanaAI/AI-Scientist)** and the Evolution agent from Co-Scientist. Internally aligns with `r-3c792e21` ("typed supervision from false positives via retrospective unification") — we treat verifier downgrades as typed supervision signal for generator-side mutation.
246
+
-**Phase 9** (hypothesis variants in investigation, planned) — borrows branching exploration from **[Tree of Thoughts](https://arxiv.org/abs/2305.10601)**. The explorer persona generates N divergent priors; the most-distant-from-majority-literature variant drives the investigation.
247
+
248
+
### General agentic patterns CE builds on
249
+
250
+
-**[Claude Code](https://claude.com/claude-code) and the Claude API** — the directive's `Agentic Prompt` block is structured to be pasted directly into Claude Code, MCP orchestrators, or similar LLM-driven agents. The grounding allowlists + tool-call discipline borrow from established agentic patterns.
251
+
-**Cross-family adversarial verification** — the principle that a model evaluating its own output produces no signal is broadly understood; using a different-family model as verifier is standard practice in multi-agent systems. CE's contribution is the *append-only audit trail* + *mechanical guards* on top of cross-family verification, not the cross-family idea itself.
252
+
-**Retrieval-augmented generation patterns** — `academic_search` + `web_fetch` + `archive_access` are standard RAG plumbing.
253
+
254
+
### Academic / methodological lineage
255
+
256
+
-**Hypothesis-first investigation** is broadly Popperian / falsificationist epistemology applied to LLM tool use. The mechanical surprise comparison is standard Bayesian-update structure.
257
+
-**Pareto-dominance admission** (Phase 4) is multi-objective optimization theory applied to a register-admission gate.
258
+
-**Negative-space mapping** (the `(method × problem)` matrix) is a long-standing literature-review discipline; CE just instruments it.
259
+
-**Falsifiable predictions with target dates** is descended from prediction-market and forecasting-literature practice (Tetlock, Good Judgement Project, Metaculus).
260
+
261
+
### Where CE is genuinely novel
262
+
263
+
Some specific combinations don't appear (to my knowledge) in any public system:
264
+
265
+
-**Append-only audit trails** with `reverification_log` — most systems mutate state on re-evaluation.
266
+
-**Self-evolving verifier where the engine's own validated insights have been applied to its own architecture** — Phases 1-5 above.
267
+
-**Canonical-form alias-gap detection over a research register** — Phase 1's structural similarity check on `(predicate, substrate, mechanism, target_domain, key_constraints)` tuples is not a pattern I've seen in published agentic systems.
268
+
-**Pareto admission gate over multi-axis register entries** — Phase 4's tournament between *existing* register entries and incoming candidates.
269
+
-**Literature-watch leakage check on directive verification criteria** — preventing the directive from outsourcing its evidence to "by date X a paper appears."
270
+
-**Freshness probe at prediction creation time** — closing the dead-on-arrival case where a "prediction" was already true at creation.
271
+
272
+
If you're aware of a system that does any of those, please open an issue — I'd want to learn from how they handled it.
Copy file name to clipboardExpand all lines: prompts.py
+33Lines changed: 33 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -632,6 +632,39 @@
632
632
}}"""
633
633
634
634
635
+
SYNTHESIZE_VARIANTS_PROMPT="""You are a research engine synthesizing {candidate_count} structurally DIVERGENT candidate insights from the same cross-referenced findings. The system will pick the candidate that is most structurally distant from the existing register — your job is to ensure all candidates are real, defensible, and meaningfully different from each other on a specific architectural axis.
636
+
637
+
{focus_block}CROSS-REFERENCE:
638
+
{xref_json}
639
+
640
+
SUPPORTING JOURNAL ENTRIES:
641
+
{supporting_entries_json}
642
+
643
+
Rules:
644
+
- Each candidate is a standalone insight (title + description + novelty_assessment + ...) AND names its `divergence_axis` — the specific architectural axis on which it differs from the others. Examples of axis shape (NOT for copy-paste): "mechanism: uses X instead of Y", "substrate: acts on A rather than B", "scale: large-N regime vs small-N", "constraint: relaxes assumption Z".
645
+
- Candidates must GENUINELY diverge. If candidate A says "use mechanism X" and candidate B says "use mechanism X with refinement Y", that's NOT divergence — they share the architectural move. They should differ at the architectural level, not at the refinement level.
646
+
- Each candidate honestly reports its `prior_art_check`. Don't pretend a candidate is novel just because the prompt asked for variants — if it's a restatement, say so and lower confidence. The downstream verifier filters for quality; your job is to maximize structural diversity, not to pass verification.
647
+
- No padding. If you cannot produce {candidate_count} genuinely divergent candidates from the source material, return fewer. A list of 2 real divergent candidates beats 3 with one padding entry.
648
+
- Same critical-self-check as single-candidate synthesis: a "novel" insight that merely restates common knowledge poisons the signal — be honest in `prior_art_check` and lower `confidence` accordingly.
649
+
650
+
Respond with EXACTLY this JSON structure (no other text):
651
+
{{
652
+
"candidates": [
653
+
{{
654
+
"title": "concise statement of the insight (one sentence)",
655
+
"description": "full articulation of the insight (2-3 paragraphs)",
656
+
"novelty_assessment": "why you believe this is genuinely novel",
657
+
"prior_art_check": "honest assessment: is the core claim already well-established?",
"open_questions": ["what would need to be investigated"],
661
+
"counter_arguments": ["why this might be wrong"],
662
+
"divergence_axis": "the specific architectural axis on which this candidate differs from the others"
663
+
}}
664
+
]
665
+
}}"""
666
+
667
+
635
668
DIRECTIVE_HYPOTHESIS_PROMPT="""You are composing one section of a RESEARCH DIRECTIVE.
636
669
637
670
A research directive is a plan a research team executes to take a verified concept from idea to a publishable result. The team runs experiments, gathers data, and produces measurements. The directive is NOT a literature-watch list waiting on other researchers to publish.
0 commit comments