<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Architecture &#8211; Derek.net.au</title>
	<atom:link href="https://www.derek.net.au/lab-section/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.derek.net.au</link>
	<description></description>
	<lastBuildDate>Mon, 17 Aug 2026 05:53:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Theoretical Agonists</title>
		<link>https://www.derek.net.au/lab/theoretical-agonists/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Sun, 16 Aug 2026 06:56:42 +0000</pubDate>
				<guid isPermaLink="false">https://www.derek.net.au/lab/theoretical-agonists/</guid>

					<description><![CDATA[Omega ACA — companion to Architecture Specification v0.2 specs.md synthesizes four theories — Global Workspace, ACT‑R, SOAR, and predictive processing — into one pipeline. The fifteen frameworks below are agonists to that synthesis: not refutations, but alternative accounts of the same cognitive phenomena, each pressed against what the engine actually does today, file and line,...  <a class="excerpt-read-more" href="https://www.derek.net.au/lab/theoretical-agonists/" title="Read Theoretical Agonists">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[<p><em>Omega ACA — companion to Architecture Specification v0.2</em></p>
<p><code>specs.md</code> synthesizes four theories — Global Workspace, ACT‑R, SOAR, and predictive processing — into one pipeline. The fifteen frameworks below are agonists to that synthesis: not refutations, but alternative accounts of the same cognitive phenomena, each pressed against what the engine actually does today, file and line, to find where the current mechanism is thin, one‑directional, or silently assuming an answer the agonist theory would contest.</p>
<p>Each entry is split into what&#039;s <strong>already grounded in the code</strong> and a <strong>concrete addition</strong> the agonist theory suggests.</p>
<h2>Start here</h2>
<p><em>(Updated 2026-08-16 — two of the original three &quot;start here&quot; items turned out to already be built. Left visible below with what actually happened, because that&#039;s a more honest record than deleting them.)</em></p>
<ul>
<li><strong>Affordances over keywords</strong> — proposed replacing <code>propose_operators</code>&#039;s tool-name string matching with cosine similarity against tool description embeddings (Ecological psychology). <strong>Tried and reverted.</strong> The code&#039;s own comment on the attempt: cosine distance to a tool&#039;s description measures topical relatedness, not request intent — a genuine status-check paraphrase scored within noise of an unrelated but topically-similar request. The actual current mechanism, not covered in the original draft, is Tier‑1 semantic voting (<code>propose_tool_intent</code>) rather than either keyword matching or embedding similarity alone.</li>
<li><strong>Co-broadcast reinforcement</strong> — proposed Hebbian-linking every pair of objects admitted to Working Memory together (Global workspace). <strong>Already shipped.</strong> <code>broadcast()</code> now calls <code>reinforce_coalescence</code> every tick, and it&#039;s tested (<code>co_broadcast_objects_get_a_symmetric_associative_edge</code>, <code>three_way_co_broadcast_links_every_pair_not_just_adjacent_ones</code>).</li>
<li><strong>A second reward channel</strong> — proposed separating goal‑progress reward from prediction‑accuracy reward before either reaches <code>AffectTracker</code> (Agency/normativity). <strong>Already shipped.</strong> <code>AffectTracker::update</code> now takes and blends both channels, and there&#039;s a regression test proving the exact bug this was meant to fix no longer happens: <code>a_goal_thwarting_tick_reads_as_bad_even_when_well_predicted</code>.</li>
</ul>
<h2>Fifteen agonists</h2>
<p>Active inference · Predictive processing · Ecological psychology · Radical embodiment · Interactivism · Semantic pointers · Neural reuse · Dynamical systems · Global workspace · Metacognition · Computational psychiatry · Developmental cognition · Agency / normativity · Self‑maintenance / autopoiesis · Social cognition · Perception &amp; action</p>
<hr>
<h3>Active inference</h3>
<p><strong>Is cognition fundamentally inference + action rather than information processing?</strong></p>
<p><strong>Grounded</strong> — Epistemic value already exists as a real, computed quantity — <code>ComparisonResult.epistemic_value</code> in <code>compare.rs</code> (the inverse of a channel&#039;s precision), explicitly framed in its own doc comment as active inference&#039;s curiosity term.</p>
<p><strong>Addition</strong> — Partially closed already: <code>executive.rs</code> has a real <code>expected_free_energy(pragmatic_value, epistemic_value)</code> function, and <code>ConsultKnowledgeLibrary</code>&#039;s preference is computed from it (using <code>1.0 - confidence</code> as its epistemic-value proxy, not literally <code>compare::ComparisonResult::epistemic_value</code>). Speak, Ask, and Act still use hand-set constants (0.8 / 0.4 / 0.85) rather than expected free energy. The loop is closed for one operator, not all of them — extending the same function to the other three is what would make operator selection genuine expected‑free‑energy minimization across the board rather than for a single case.</p>
<h3>Predictive processing</h3>
<p><strong>Is perception fundamentally controlled hallucination constrained by prediction error?</strong></p>
<p><strong>Grounded</strong> — The core mechanism already runs: <code>predict::predict_expected_embedding</code> blends three sources, <code>compare::compare</code> scores the gap. A missing expectation is maximally surprising by convention (<code>compare.rs:158–177</code>) — deliberate, documented, and correct as a comparison rule.</p>
<p><strong>Addition</strong> — Prediction only ever judges; it never constructs. The stronger Clark/Hohwy reading lets a confident prior partially fill in degraded input. When an observation&#039;s own embedding is partial — a low‑confidence ASR transcript, a truncated tool result — blend it toward the predicted embedding in proportion to precision, rather than only ever comparing the two. That&#039;s literal perceptual inference, not just error scoring.</p>
<h3>Ecological psychology</h3>
<p><strong>Does the environment itself contain actionable structure that cognition exploits directly?</strong></p>
<p><strong>Grounded</strong> — Tools are already enumerated as a fixed, named list passed into <code>propose_operators</code> and <code>boredom::generate</code> — a real affordance set, at least in shape.</p>
<p><strong>Addition, revised</strong> — The original proposal here was keyword matching is brittle, so replace it with cosine similarity against tool description embeddings. That was tried. It was reverted, for a specific, documented reason: cosine distance to a tool&#039;s description measures topical relatedness, not request intent — a genuine status-check paraphrase scored within noise of an unrelated but topically-similar request. Keyword matching (<code>propose_operators_proposes_act_for_text_matching_a_known_tool_intent</code>) still exists as a fallback, but the primary mechanism today is Tier‑1 semantic voting (<code>propose_tool_intent</code>) — multiple small models voting on intent rather than either a keyword match or a single embedding-similarity score. This is itself a small, real result worth keeping on record: for this task, embedding similarity and keyword matching turned out to fail in similar ways, for different reasons, and neither substitutes for something closer to judgment.</p>
<h3>Radical embodiment</h3>
<p><strong>Is cognition actually distributed across brain, body and environment?</strong></p>
<p><strong>Grounded</strong> — <code>affect.rs</code>&#039;s <code>AffectTracker</code> is a genuine interoceptive channel — an EMA‑smoothed valence fed by <code>reward_from_comparison</code>, itself feeding back into <code>precision_gain</code>. This is embodiment done honestly: a body‑like signal actually closing a loop back into cognition, not a metaphor.</p>
<p><strong>Addition</strong> — It&#039;s a single channel, and it&#039;s entirely about prediction accuracy — nothing about the &quot;body&quot; itself (tool calls, the actual <code>Act</code> operator in <code>act.rs</code>) reports back on its own condition. Add a second, parallel tracker fed by tool‑call success/failure rate. &quot;How well is my model predicting&quot; and &quot;how well is my body executing&quot; are different signals in every embodied account; right now Omega only has the first.</p>
<hr>
<h2>Representation &amp; structure</h2>
<h3>Interactivism</h3>
<p><strong>Does representation emerge from interaction rather than being encoded internally?</strong></p>
<p><strong>Grounded</strong> — Every Mental Object already carries a <code>confidence</code> field distinct from its text/embedding — the scaffolding for something other than pure encoding exists.</p>
<p><strong>Addition</strong> — Set at creation (<code>cognitive_core.rs</code>: <code>reflection.confidence = response.confidence</code>), then adjusted exactly once more, right after, by <code>calibrate_and_register_reflection</code> — which overwrites it using <code>CalibrationTracker</code>&#039;s <em>tier-level</em> bias, not a per-object history. So &quot;never revisited&quot; overstates it slightly; what&#039;s actually missing is any <em>ongoing</em> drift based on the object&#039;s own track record after that single post-hoc adjustment. Apply the same Rescorla‑Wagner update rule per‑object instead of per‑tier — a Belief&#039;s confidence should keep drifting based on whether it kept predicting well across later interactions, not settle permanently after one early correction.</p>
<h3>Semantic pointers</h3>
<p><strong>Can symbolic cognition emerge from biologically realistic distributed representations?</strong></p>
<p><strong>Grounded</strong> — Already a working hybrid: every object carries both a symbolic <code>MentalObjectKind</code>/<code>Operator</code> tag and a distributed <code>embedding: Vec&lt;f32&gt;</code> side by side.</p>
<p><strong>Addition</strong> — The two channels never combine — nothing binds them into a composite. Mint one: elementwise‑multiply (or circular‑convolve) an interlocutor&#039;s embedding (<code>interlocutor.rs</code>) with an utterance&#039;s embedding to get an &quot;attributed‑utterance&quot; vector, usable for spreading‑activation cues without inventing a new discrete edge kind. A small, cheap step toward compositional structure riding on vectors instead of only on graph topology.</p>
<h3>Neural reuse</h3>
<p><strong>Is the brain fundamentally a dynamic coalition system rather than a collection of modules?</strong></p>
<p><strong>Grounded, corrected</strong> — <code>resolve_via_tier_ladder</code> and <code>try_tier_via_agreement</code> (<code>cognitive_core.rs</code>) are real and genuinely redeployed by reflection (<code>reflect()</code>) and pattern synthesis (<code>synthesize()</code>). Idle self‑stimulus does <em>not</em> route through them, contrary to the original claim: <code>boredom::generate</code> calls a Tier‑1 pool directly and picks the sample with the highest self-reported confidence — exactly the self-report-trusting pattern the tier ladder&#039;s own code comments say was tried and rejected elsewhere in the system. So the reuse is real but narrower than described, and <code>boredom::generate</code> is itself a second gap, not an example of the pattern.</p>
<p><strong>Addition</strong> — Reuse stops at the tier ladder in three places, not two: <code>ConsultKnowledgeLibrary</code> and <code>Act</code> in <code>executive.rs</code>/<code>act.rs</code> still carry bespoke, non‑ladder logic, and now add <code>boredom::generate</code> to that list. Route all three through <code>resolve_via_tier_ladder</code> — not a new theory, just finishing the pattern the codebase already committed to, and closing the one place it quietly backslid into the self-report trust it elsewhere rejected.</p>
<h3>Dynamical systems</h3>
<p><strong>Is cognition better described as trajectories through state-space than as computation?</strong></p>
<p><strong>Grounded</strong> — ACT‑R&#039;s power‑law decay already gives activation real continuity across ticks — the one place the architecture is genuinely closer to a trajectory than a discrete computation.</p>
<p><strong>Addition</strong> — Working Memory membership isn&#039;t: <code>broadcast::admit_top_n</code> re‑ranks from scratch every tick, so an object can be admitted, released, and re‑admitted purely from noise near the cutoff — no hysteresis, no attractor‑like stability. Give objects already in <code>previous_working_memory</code> (already a parameter of <code>broadcast()</code>) a small stay‑bonus before ranking. Minimal, literally implementable, and it&#039;s the one addition here that doesn&#039;t require inventing continuous‑time computation to get a dynamical‑systems benefit.</p>
<hr>
<h2>Arbitration &amp; learning</h2>
<h3>Global workspace</h3>
<p><strong>What does information become when it becomes globally available?</strong></p>
<p><strong>Grounded</strong> — Real functional transformation, not just a flag: <code>broadcast()</code> is the sole gate to memory formation and Executive proposals, and it tracks <code>broadcast_count</code> / <code>last_broadcast_at</code> on the object itself.</p>
<p><strong>Addition — already built.</strong> Dehaene&#039;s stronger claim is that global availability itself forges new associations between whatever&#039;s broadcast together, not just that broadcast content becomes eligible for later, separate association‑building steps. This is now literal: <code>broadcast()</code> calls <code>reinforce_coalescence</code> every tick, pairwise-reinforcing every object admitted to Working Memory together — broader than the original proposal, which only suggested covering <code>newly_admitted</code>. Tested directly (<code>co_broadcast_objects_get_a_symmetric_associative_edge</code>, <code>three_way_co_broadcast_links_every_pair_not_just_adjacent_ones</code>). Co‑occurrence in the workspace is now the association mechanism, not just a precondition for one — this agonist&#039;s addition is resolved.</p>
<h3>Metacognition</h3>
<p><strong>How does a system represent the reliability of its own representations?</strong></p>
<p><strong>Grounded</strong> — Already asked and answered at one granularity: <code>CalibrationTracker</code> (<code>metacognition.rs</code>) tracks per‑tier overconfidence bias and discounts/boosts self‑reported confidence accordingly — a real, tested, working answer to this exact question.</p>
<p><strong>Addition</strong> — Only at tier granularity. Two Beliefs formed at the same tier can have wildly different track records and are trusted identically today. This is the same fix as Interactivism above, from the other direction: extend calibration below the tier, to the object.</p>
<h3>Computational psychiatry</h3>
<p><strong>Can pathological cognition reveal the architecture of ordinary cognition?</strong></p>
<p><strong>Grounded</strong> — Explicitly invoked already — <code>affect.rs</code>&#039;s own doc comment cites the predictive‑processing account of anxiety (sustained negative valence raising <code>precision_gain</code>, i.e. vigilance) as the literal design rationale for <code>precision_gain</code>.</p>
<p><strong>Addition</strong> — It&#039;s a narrative label on one mechanism, not yet a verification tool. Add an integration test that sustains extreme negative valence and asserts the &quot;anxiety‑shaped&quot; failure mode the theory predicts — hypervigilant over‑admission of low‑value candidates into Working Memory. That turns the citation into a falsifiable regression test: either the architecture degrades the way the theory says it should, or it reveals the metaphor doesn&#039;t actually hold end‑to‑end.</p>
<h3>Developmental cognition</h3>
<p><strong>How does an agent construct its own cognitive machinery rather than simply execute it?</strong></p>
<p><strong>Grounded</strong> — Two real, working instances already: chunk utility (<code>learn.rs</code>, Rescorla‑Wagner update via <code>UTILITY_LEARNING_RATE</code>) and tier calibration bias (<code>metacognition.rs</code>) both let Omega&#039;s own future behavior be shaped by its own past experience, not just fixed at design time.</p>
<p><strong>Addition</strong> — Everything else is a constant for Omega&#039;s entire lifetime — <code>DEFAULT_WORKING_MEMORY_CAPACITY</code> (<code>broadcast.rs</code>), the attention threshold, <code>decay_d</code> (<code>config.rs</code>). Extend the identical <code>OutcomeRegistry</code>‑fed pattern to the attention threshold itself: track the rate of broadcast winners that end up <code>Ignored</code> or <code>Discarded</code> (over‑admission), and nudge the threshold the same way chunk utility already nudges its own bias. The learning mechanism doesn&#039;t need to be invented — it needs to be pointed at one more constant.</p>
<hr>
<h2>Self &amp; others</h2>
<h3>Agency / normativity</h3>
<p><strong>Where do goals, values and &quot;error&quot; come from in a physical system?</strong></p>
<p><strong>Grounded, corrected</strong> — Goals are real, persistent structure — <code>GoalStackMembership</code>, not a bolted‑on task queue. Status enum is <code>Active/Suspended/Satisfied/Abandoned/Impassed</code>, not <code>Active/Completed</code> as originally stated (closest match is <code>Satisfied</code>).</p>
<p><strong>Addition — already built.</strong> The original claim was that the only reward signal anywhere was purely epistemic, conflating &quot;surprising&quot; with &quot;bad&quot; — a perfectly‑predicted but goal‑thwarting tick reading as affectively good. That gap is closed: <code>metacognition.rs</code> now has <code>goal_progress_reward</code>, and <code>AffectTracker::update</code> takes and blends it with epistemic reward rather than using epistemic reward alone. There&#039;s a regression test proving the specific failure mode this was meant to fix no longer happens: <code>a_goal_thwarting_tick_reads_as_bad_even_when_well_predicted</code>. What had been flagged as the one item on this list that was a real conceptual bug, not just thin theory coverage, turned out to already be fixed by the time this was checked.</p>
<h3>Self‑maintenance / autopoiesis</h3>
<p><strong>Is cognition fundamentally a property of systems trying to remain viable?</strong></p>
<p><strong>Grounded</strong> — <code>SelfStatusTool</code> plus <code>boredom.rs</code>&#039;s <code>self_status_interval_ms</code> duty is a real, standing self‑check — the one existing self‑regulatory behavior in the engine.</p>
<p><strong>Addition, partially already built.</strong> The general shape of this proposal — a Tier 0 scan of standing pressures that synthesizes a real Goal object when one crosses a threshold, re-entering ordinary Coalition competition — already exists via <code>steps/drives.rs</code> and <code>steps/agenda.rs</code>: <code>DriveState</code> continuously tracks pressures (<code>uncertainty</code>, <code>curiosity</code>, <code>competence</code>, <code>social_connection</code>, <code>resource_pressure</code>), and <code>revise_agenda</code> spawns a real <code>Intention</code>/<code>GoalStackMembership</code> the moment the strongest one clears a threshold. What&#039;s still missing is narrower than originally described: the specific structural-health metrics named here (graph growth, fraction of Self Memory above the retrieval threshold, tier‑error rate) aren&#039;t among the tracked drives — <code>competence</code> and <code>resource_pressure</code> are adjacent but not the same signals. The mechanism for turning a crossed threshold into a real, competing Goal is built; it just isn&#039;t yet watching the system&#039;s own structural health specifically.</p>
<h3>Social cognition</h3>
<p><strong>Is part of an individual mind actually constituted by other minds?</strong></p>
<p><strong>Grounded</strong> — Real progress already: <code>interlocutor.rs</code> gives each recognized speaker a persistent graph node, its own precision window (<code>compare::interlocutor_windows</code>), and Hebbian reinforcement on every turn — other minds genuinely have structure in this graph, not just a name string.</p>
<p><strong>Addition</strong> — That node is only an anchor for reinforcement and precision — it holds no content about what the person believes or wants, no counterpart to Omega&#039;s own Self Memory for anyone else. Let an interlocutor node accumulate a small set of Belief objects <code>DerivedFrom</code> it (inferred preferences/goals), and add a fourth source to <code>predict::PredictionInputs</code> — &quot;what I think this interlocutor expects next&quot; — blended in exactly like <code>previous_observation</code>/<code>working_memory</code>/<code>due_goal</code> are today. Literal social predictive processing, reusing the existing blend instead of building a parallel one.</p>
<hr>
<p><em>Note: &quot;Perception &amp; action&quot; is listed among the fifteen agonists above but has no written section in the source material this file was built from — left as-is rather than inventing content for it.</em></p>
<hr>
<h2>Verification note (2026-08-16)</h2>
<p>This document was checked, entry by entry, against the actual crate source in <code>E:\AI\omega-aca\crates</code>. Of the 15 written entries: 8 were confirmed as originally written, 4 were directionally right but imprecise (corrected in place above), and 3 described gaps that had already been closed since this was written — including both flagship &quot;Start here&quot; recommendations. All three are updated in place rather than removed, because the fact that they got built and tested is itself part of the project&#039;s record. One reverted experiment (embedding-similarity tool matching, under Ecological psychology) turned out to be a real negative result worth keeping on its own terms, independent of this document.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
