Skip to content

fix(dream): abstractions from related members with a concrete shared mechanism, at salience 0.5 (1.12.0) - #148

Merged
idapixl merged 3 commits into
masterfrom
fix/abstract-related-members-147
Oct 25, 2026
Merged

idapixl merged 3 commits into
masterfrom
fix/abstract-related-members-147

Conversation

@idapixl

@idapixl idapixl commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator

Why

#147. Abstract handed the model one memory from each of 3–4 random categories and asked what connects them. The model always found something by climbing to a theme ("friction and identity", "subtraction over addition", "agency and constraint"). One live run linked a failed MCP integration to a person's family history, and each result was stored at salience 0.8, above most organic memories.

What

  • Related members. Each attempt seeds on a recent memory. Its members are the seed's graph neighbours (any relation except exemplifies) plus near neighbours at cosine ≥ abstraction_relate_floor (default 0.50), preferring categories the group doesn't have yet. When fewer than two related members exist, the model isn't asked. Existing abstractions are never members.
    • Measured on one store (qwen3-embedding): random pairs p90 0.43, edge-linked pairs median 0.37–0.42. The graph carries the signal; 0.50 admits only near neighbours.
  • A concrete shared mechanism. abstract-synthesis v3 asks for JSON (mechanism, members, name, abstraction), with "none" as the expected answer and a rule against linking a person's private life to a technical system through a theme. The new checkMechanism (engines/abstraction-check.ts) requires the mechanism to contain a term that at least two distinct cited members' own text uses:
    • not an abstract noun;
    • in pools of 20 or more, in no more than 25% of memories;
    • members that restate one fact (term Jaccard ≥ 0.25; edge pairs p99 0.294, the Muzak restatement pair 0.308) count once.
  • Salience 0.5 (ABSTRACTION_SALIENCE), down from 0.8. exemplifies edges go only to cited members, and each edge's evidence names the shared terms. phases.abstract.rejected is reported.

Measurement (copies of one 694-memory store, packed build of this branch)

  • Copy dream, first build: 1 abstraction written, a restatement of two Muzak memories. That led to the distinct-members rule.
  • Copy dream, final build: 0 damaged, 0 regressions; abstract wrote 0 and rejected 1.
  • 20-attempt probe of the phase alone: 18 "none", 1 restatement rejected, 0 written.
  • Same probe without the "most groups have none" priming line: 8 written, 9 rejected. About half of the 8 were theme-glue under concrete-sounding names, including one tying code optimisation to a memory about money.

I kept the conservative prompt: a phase that will run unattended should be quiet, not wrong. See the CHANGELOG entry.

471/471 tests. 4 of the new phase tests fail on master, and the rest pass there only because master never calls generateJSON.

Closes #147

🤖 Generated with Claude Code

idapixl and others added 3 commits October 25, 2026 04:19
…mechanism, at salience 0.5 (1.12.0)

Abstract handed the model one memory from each of 3-4 random categories
and asked what connects them; it always found a theme ("friction and
identity", "subtraction over addition") and one live run linked a failed
MCP integration to a person's family history (#147). Each was stored at
salience 0.8, above most organic memories.

Members are now the seed's graph neighbours plus near neighbours at cosine
>= 0.50 (random pairs p90 0.43 on one store; the graph carries the signal),
never existing abstractions. The prompt asks for JSON with the mechanism
and the members it spans, "none" as the expected answer, and checkMechanism
keeps a synthesis only when the mechanism holds a distinctive, non-abstract
term two cited members' own text uses. Abstractions start at 0.5 and link
only to the members they cite.

Closes #147

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… check

The first copy run on this branch wrote one abstraction: a third retelling
of two memories about Muzak's "Stimulus Progression". Concrete terms, so it
passed; but two retellings are one member. Cited members whose term sets
overlap at Jaccard >= 0.25 now count once (edge-linked pairs on the same
store: p95 0.094, p99 0.294; the Muzak pair 0.308). "stimulus", "analysis"
and "-ss" words keep their final s.

Phase tests drew a random seed with one attempt, and one of the four seeds
has no related members by design; they now take enough attempts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hase stays quiet

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@idapixl
idapixl merged commit 4fe626e into master Oct 25, 2026
8 checks passed
@idapixl
idapixl deleted the fix/abstract-related-members-147 branch October 25, 2026 11:41
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.

Abstract: cross-domain syntheses glue unrelated memories through one generic theme

1 participant