Conference version. Paper frozen at 36d156218; margin notes record later implementation reflections without changing the accepted text.

Patterns for a New Generation: AIF and EmbeddingsDOI: 10.XXXX/XXXXXXX.XXXXXXXConference: 32nd Conference on Pattern Languages of Programs, People, and Practices; October 12–15, 2025; Skamania Lodge, Columbia River Gorge, Washington, USA.ISBN: 978-1-941652-22-0DOI: 10.64346/PLoP2025p24CCS: Software and its engineering Software creation and management Software development process management Software development methods Design patternsCCS: Computing methodologies Artificial intelligence Distributed artificial intelligence Intelligent agentsCCS: Applied computing Operations researchCCS: Computing methodologies Modeling and simulation

Joseph Corneli Note: Corresponding author, jcorneli@brookes.ac.uk. email: jcorneli@brookes.ac.uk OrcID: 1234-5678-9012 Affiliation: Oxford Brookes University , Gipsy Lane , Oxford , UK , OX3 0BP Affiliation: Hyperreal Enterprises Ltd , 272 Bath Street , Glasgow , UK , G2 4JR
2026; © rightsretained
Abstract.

This paper describes a supplementary harness for existing agentic coding systems that uses design patterns as inspectable units of action in an active-inference control loop. The harness reads a live research stack, maintains beliefs about the work, scores candidate next actions by Expected Free Energy, selects a task for the underlying coding agents to pursue, and, when armed, attempts to act by writing a typed witness to an external substrate and re-observing the result.

1. Introduction

If design patterns are written down in a textual format—which they typical are—then a collection of them can be pushed into a high-dimensional vector space embedding. This means we can ascertain when two patterns are nearby or related. Other text-based documents, e.g., project management material that cites the patterns, can be embedded in the same space, forming a kind of virtual landscape. Just as simulated ants can governed by an active-inference loop to gather “food” from their landscape, coding agents could be governed to move around the landscape of a software project, making fixes and other improvements (Figure 1).

Refer to caption
Refer to caption
Figure 1. Ants as a motivating example; beside a metric field embedding of missions and patterns.

This is a non-technical explainer for active inference as practised

Active inference is normally introduced as mathematics, and the mathematics is not hard to find. What is hard to find is an account of what the framework actually asks you to build — which decisions it makes for you, which it leaves open, where it stops being a theory and starts being a set of engineering choices someone had to make on a Tuesday. This paper is an attempt at that account, written for readers who want to understand the shape of the thing without first working through the formalism. There is no mathematics in the sections that follow. Where a quantity matters, it is named and described in words.

What distinguishes this from a tutorial is that it describes a system that exists. The implemented patterns in the catalogue describe running code, not sketches presented as completed designs. The patterns were written and revised as the system was built and broken and repaired, and several carry the scar of the specific failure that forced them. Entries chartered but not yet built are explicitly marked as staged rather than allowed to borrow the standing of the implemented patterns. Where a measurement came out against us, the number is reported anyway. We take this to be the paper’s main contribution to the pattern community: not the individual moves, most of which will look familiar to anyone who has built a control system, but the fact that the catalogue is answerable to a reference implementation and can therefore be checked, contradicted, and reused rather than merely admired.

Who benefits, and how.

Three audiences, wanting different things:

  • •

    People building agent harnesses. The catalogue is usable as a checklist for making an agent system answerable: what to record, what to keep separate from what, where to refuse to let the system certify itself, and — stated explicitly for each pattern — the one invariant a different implementation would have to preserve. Most of these patterns are not specific to active inference, and several were learned the expensive way.

  • •

    The pattern community. This is a worked case of design patterns used operationally rather than descriptively: the same pattern text that a person reads is also the unit an agent selects, composes, and is held to. That dual use — readable warrant and machine-selectable action — is a live question for what pattern languages are for in an era of agentic tools, and this paper is a data point rather than an argument.

  • •

    Researchers in active inference and agentic software engineering. The formal treatment — the generative model, the scoring quantities, the structure-learning operator, the faithfulness audit of where our implementation departs from the theory, and the preregistered experiment with its negative result — is in the companion paper, which shares this paper’s system and specimen run.

What this paper does not claim.

It does not claim that governing coding agents this way makes them better. That comparison has not been run: it would need an arm in which the same agents work the same codebase without active-inference-governed selection, adjudicated by someone with no stake in the outcome, over enough attempts to mean something. What can be shown, and is shown here, is narrower and still worth having: that the loop closes, that its decisions carry reasons a person can inspect and disagree with, and that its claims about the world are backed by evidence it did not manufacture. A reader who finishes this paper believing we have demonstrated benefit has been misled, and we would rather say so at the start than be read that way.

2. Background

In “Patterns for a New Generation: AI and Agents” (2), we introduced the notion of guiding LLM-based coding agents with a simplified AIF-inspired wrapper. Those agents still required human guidance to point them at a problem, and the wrapper often gave them a set of hoops that distracted them from the task they had been given.

Motivated by the spatial appearance of the pattern landscape mentioned in Section 1, it seemed plausible to build a fuller AIF harness around coding agents that would overcome both failure modes. The surrounding system would need to select work, check the viability of proposed actions, and learn from outcomes while the coding agents continued to do the coding work. This is the topic we describe here: the paper is not a sequel but a reboot that treats the definition from the predecessor paper as a working method on several levels.

A design pattern is a learned generalization arising from a review process that describes how intentions, actions, and outcomes tend to relate across situations. A candidate pattern becomes a pattern only when it has survived repeated enactment-and-review cycles in which its failure modes are recorded and used to revise it (2).

Design patterns play three primary and explicit roles in this work. First, as Section 1 suggests, they organise the landscape of possible actions. Second, they organise the system and its development: the patterns in this paper were written and revised as operational design artifacts while the system was being constructed and tested. The aim has been to remain as faithful to the active-inference formalism as is realistically possible in this setting. Third, we express the informal enact–review cycle of the definition above within the active-inference model itself: candidate pattern authoring expands the available policy vocabulary, while witnessed enactment and review decide whether the proposed structure earns standing.

For readers new to active inference: the core idea is that an adaptive agent maintains a model of its world, acts to make the world match its preferred expectations, and updates its beliefs from what it then observes — in a continuous loop. What distinguishes active inference from a simple optimizer is that action, learning, uncertainty, and preference all live in one loop. A simple optimization picks the highest immediate payoff; active inference belongs to a more sophisticated class of algorithms that model the value of reducing uncertainty and improving the model itself. In this paper the framework serves as an operational guide to developing a supplementary harness that adds new perceive, believe, evaluate, select, act, and learn machinery around existing agentic coding systems. The technical vocabulary of active inference is explained here as it arises, in words rather than symbols; a reader who wants the formal definitions, the worked numerical examples, and the pointers into the implementation will find them in the companion paper. The patterns below are grounded in our implementation choices. To earn their status as “patterns,” these moves should generalise beyond the current system. Our first concern, however, has been to get the system running as described and only then investigate those generalisations (some are discussed in the companion paper).

The computational reading of pattern languages explored here predates contemporary LLM agents. Moran’s 1971 review of Alexander, Ishikawa, and Silverstein’s multi-service-centre pattern language read the pattern form as a production rule: if a condition is present, then apply an action, because of stated assumptions and evidence (3). He also noticed that the cascade of 64 patterns was not just a diagram of contents but a control problem. Many patterns may be applicable at once; one pattern can enable or invalidate another; and a static wall chart becomes illegible as the language grows. His proposed Architect’s Adviser therefore maintained a model of the evolving project, retrieved applicable patterns, warned about conflicts, asked for missing information, and displayed the because-clause on demand. This is a direct ancestor of the problem addressed here: pattern cascades need an active, state-aware interpreter whose recommendations remain inspectable.

There is also a bridge between this work and the theoretical side of design pattern research. Alexander’s account of living structure and Salingaros’s thermodynamic analogy for architectural “life” treat pattern formation as more than a catalogue of reusable forms: they ask how organised structure emerges, stabilises, and becomes coherent across scales (1; 4). Salingaros’s measure L=T⋅H combines a temperature-like factor T (detail, curvature, colour) with a harmony factor H (coherence and internal symmetry). The two vocabularies are related in spirit because both connect order, complexity, evidence, and adaptive structure formation; we do not, however, claim that L=T⋅H is already a free-energy functional. The analogy instead provides a route from pattern-language theory to the questions taken up here through active inference: when is adding structure worthwhile, and how can it make future action and perception better organised?

3. Overview

The system we describe is an active-inference harness around existing agentic coding systems. It reads a body of research work (a stack of missions, code, and open questions) and, each cycle, recommends what to work on next and, when armed, acts on it — committing the chosen work to a real substrate and re-observing the changed world. In everyday terms, it is something like a project manager combined with a cautious junior engineer, wrapped around the coding agents rather than replacing them: it does not just say “work on ticket X,” but records why X was chosen over the alternatives, checks whether it is actually allowed to act, writes a real artifact (a file, a test result, or a code change), and then looks back to see what changed in the world as a result.

There are three boundaries in that description. The existing coding agents are clients of the harness: they author and review work, but they do not carry the control model in their prompts. Around them, the harness maintains the belief state, constructs and scores the candidate actions, imposes the act-gates, and records why a choice was made. Outside both sits the shared substrate — the files, commits, job events, and typed graph records against which a claim can be checked. A claim of success closes the loop only when the substrate is changed and re-observed through a path that the author of the claim does not control.

Conceptually, one cycle has six stages. Perceive turns heterogeneous artifacts into a structured observation. Believe updates operational hypotheses and the trust placed in each evidence channel. Evaluate predicts the consequences of candidate moves and keeps the active-inference score separate from engineering augmentations. Select constructs a bounded action space, may abstain, and records which term governed the choice. Act is not a single model utterance: it includes construction, authoring, bounded repair, independent review, a grounded write, and re-observation. Learn uses the independently witnessed outcomes to recalibrate later choices and, between runs, to revise the structures from which future candidates are proposed. The six names describe the control cycle; the timestamped phases in Section 4 show how that cycle expands in a real execution.

Figure 2 is a control map rather than a deployment diagram. Its five columns give the main cycle room to read from left to right: perceive, believe, evaluate, select, act, and re-observe. The band below shows the assurance and learning apparatus that makes a decision independently checkable rather than a well-organised opinion. Prior preferences are labelled as the model’s C vector rather than given a pattern number.

Figure 2 now uses a single node treatment: every displayed node is teal because every one is run-evidenced — exercised by the harness with a recorded witness. The remaining visual code reports provenance, not maturity: a filled dot marks a theory-derived quantity, an open dot marks engineering apparatus, and both dots mark a deliberate mixture. A run-evidenced node therefore need not make a theoretical claim. The R-numbers align directly with the catalogue in Section 4; they no longer reproduce the older completeness contract’s drifted meanings.

R10’s hourly entrypoint already had an unattended, reviewed, grounded witness from 2026-07-14; its “turned off by default” annotation reports the subsequent operator choice, not a lower maturity grade. The other four formerly white nodes were the outstanding code-audit items. Table 3 records how Campaign S closed them. These are maturity claims about the named paths, not claims that their models are generally effective.

Box 1. Closure of the 2026-08-20 code-audit items by Campaign S (2026-08-21).
R-# Status Live evidence R12 Run-evidenced Both separately recorded layers passed on both ticks; independent review and grounded re-observation supplied Layer 2. R11 Run-evidenced Both ticks selected one item from each live field at feasible total cost 7; replay reproduced both portfolios. R17 Run-evidenced The inter-tick pass reduced a frozen 26-observation model in 20 ms, replayed exactly, and fed Tick B. R15 Run-evidenced Tick A’s witnessed success changed Beta(1,1) to Beta(2,1) and exploration to consolidation before Tick B.
Figure 2. The active-inference harness: control loop, assurance apparatus, and audited maturity.

4. One Attempt, and the Patterns Inside It

The patterns in this section are the recurring design moves that make up an active-inference control layer for a coding agent. Rather than list them, we walk through a single real run of the system and meet each pattern where it actually bites.

The run is attempt-061, on 2026-07-27. It begins at 10:46:43 and closes at 10:59:53 — thirteen minutes and ten seconds, three agent turns — and it ends in the outcome the system is built to produce: a reviewed code change, written into an external store, that moved a recorded dial. Every timestamp below is taken from the run’s own durable phase log, not reconstructed for the telling. The same attempt is tabulated step-by-step in the companion paper; a reader who wants the machine-readable version will find it there.

We chose a run that went well, and it is worth saying what that does and does not buy. A successful specimen shows what the machinery is for. It does not show that the machinery usually succeeds — it usually does not, and the failure ledger is in the companion paper — and it does not show that the system helps. What it does show, which is the claim this paper makes, is that each run-evidenced move below ran at a stated time and left a record someone else can check. The tested entries have concrete code and tests but are not credited with equivalent run evidence; staged entries are proposals forced by the record, not presented as completed machinery.

Each pattern is stated in the If / However / Then / Because form: a context (if), the tension that recurs (however), the move that resolves or ameliorates it (then), and its rationale (because). Most also carry an invariant to preserve — the one property a different implementation would have to keep for the pattern to have been applied at all, as opposed to merely cited. The parenthetical R-number keys each pattern to the control map in Figure 2.

Patterns marked † are apparatus: engineering discipline that makes the loop trustworthy, rather than active-inference constructs. They are kept in the story where they belong rather than quarantined at the end, because in practice they are what the inference rests on — but the distinction is real and worth marking.

A note on the R-numbers.

The R-numbers in Figure 2 now name the catalogue patterns directly. This is worth making explicit because earlier drafts reproduced an older completeness contract, in which R6, R9, and R12 had narrower or different meanings. The source audit retains that historical concordance, but the reader no longer has to perform it: an R-number in this paper is a direct join between the figure, the pattern map, and the pattern text. Prior preferences are consequently labelled as the C vector rather than as R19, and R20 is included as the catalogue’s interoceptive apparatus.

The catalogue is stated here without its mathematics. Every quantity named below — the belief state, the trust weights, the risk and ambiguity legs of the action score, the evidence threshold for merging concepts — has an exact formal definition, a worked numerical example, and a pointer into the reference implementation; all of that lives in the companion paper, and nothing in this section depends on having read it. The claim here is that the moves are recognisable and reusable as design moves, whatever formalism a later implementer chooses to express them in.

Pattern map

The chronological account deliberately introduces patterns in the order in which the attempt needed them, not in numerical or conceptual order. The map below is a reader’s index to that account, not a second catalogue. A dagger marks apparatus, and “staged” retains the status stated by the corresponding entry.

Category Pattern ID and name Brief role
Observation and belief R1 — Belief State as Operational Hypotheses Makes the state updateable and falsifiable.
R2 — Structured Observation Vector Normalises heterogeneous evidence.
R3 — Predictive-Coding Belief Update Moves beliefs by trusted prediction error.
R4 — Shared Kernel for the Predictive Forward Model Keeps predicted and live dynamics aligned.
R7 — Evidence Precision Registry Makes trust explicit per evidence channel.
R8 — Present-Fit Mismatch as a Per-Tick Scalar Exposes how well present belief fits observation.
Evaluation, selection, and planning R5 — Expected Free Energy Inside an Auditable Controller Separates the canonical score from engineering controls.
R6 — Candidate Pattern Action Space Constructs a bounded, reason-bearing choice set.
R11† — Hierarchical, Budget-Aware Action Selection Enforces shared budgets at each hierarchy level.
R13 — Temporal Depth Beyond the Greedy Step Scores cascades rather than only their first move.
R14 — Selection Gain as Commitment Temperature Makes exploration versus commitment an explicit dial.
R15 — Hierarchical and Temporal Depth Couples strategic and tactical loops without conflating them.
Actuation and assurance R9† — No Self-Certification Requires evidence its claimant did not manufacture.
R10† — Scheduled Observer Entrypoint Counts state change, not scheduler firing, as liveness.
R12 — Two-Layer Calibration Separates internal consistency from external value evidence.
R16 — Grounded Actuation, Not Re-Observation Closes the loop with an external typed witness.
R16 realised† — Semilattice-Rollout Execution Witness Independently checks that a cascade was constructed.
R20 — Interoceptive Tripwires Makes failures of the harness itself observable.
Learning and structural change R17 — Structure Learning by Bayesian Model Reduction Merges or prunes structure only when evidence warrants it.
R17′ — Posterior Spread as an Exploration Control Keeps a useful heuristic honestly outside canonical EFE.
R17′′ — Embedding-Nearness as Generator Proposes, but does not approve, candidate structural changes.
R17′′′ — Pattern Genesis from Evidence-Bearing Holes Enlarges the policy vocabulary under witnessed review.
R16 → R6 — Discharge-Trained Cascade Proposal Learns diverse proposals from realised outcomes.
Capability Zones (staged) Grounds preferences among as-yet-unenacted capabilities.
Native-Currency Discrimination (staged) Makes the canonical score discriminate without a bolt-on term.

10:46:43 — The click, and what kind of click it was

The attempt begins. The loop takes a single-flight lock so that two runs cannot race, and the attempt is accepted.

It matters a great deal what started it, and the trace says: this one was an on-demand click, not a scheduled tick. The record carries the trigger explicitly (:trigger :duree-click-on-demand), and it must, because the scheduled entrypoint the next pattern describes is at the time of writing operator-disabled — switched off on 2026-07-15 after a stop-line, with no cron installed. We flag this at the outset because it would be easy to read what follows as a portrait of an unattended system running overnight, and it is not. It is a portrait of the loop running end to end; a human asked it to start.

The distinction is one the catalogue itself insists on, and the disabling is the pattern working rather than failing: the rule below says that when a scheduled loop cannot change anything, you switch the schedule off rather than let it write green rows. That is exactly what the operator did. What the paper failed to do, until an independent review caught it, was notice that its own prose had gone on describing a schedule that had been correctly turned off.

Scheduled Observer Entrypoint (R10, the No-Op Trap).†

If you want the agent to run live — to observe, deliberate, and act on a schedule, accumulating trace and precision over real time without a human pressing the button. However a scheduler that fires ticks which cache or no-op (because nothing downstream can change) satisfies the letter of “live operation” while the organism is dead, and every firing writes a green “it ran” row that hides the inertia. Then install the scheduled entrypoint, but gate “live” on evidence that a tick changed observable state (a dial moved, a hole closed), not merely that it fired; when the loop can only no-op, disable the schedule rather than let it paint green. Because liveness is a property of state change, not of the scheduler firing — a cron over a sealed loop is a clock ticking in an empty room.

Operational witness (2026-07-14): the hourly entrypoint completed a production-shaped opportunity as a reviewed Git commit plus a Futon1b implementation/discharge, closed the cohort record as grounded-change, and queued an operator QA item. The scheduler firing alone is not counted as that witness; the external dial movement is. Current status (2026-07-31): the hourly schedule was operator-disabled the following day, after a stop-line, and no cron is installed; runs since then — including the specimen above — have been on-demand clicks. We report this rather than the more flattering present tense because the pattern’s own rule is that a schedule which cannot change anything should be switched off, and honouring that rule is not a result to be hidden. The claim this pattern supports is therefore that the loop can run unattended end to end and has, not that it is doing so today.

10:48:48 — Checking the instruments before trusting them

Three probes in seven seconds, and the third took thirteen: is the cast of agents actually invocable; what code is this loop running (revisions and dirty flags, recorded into provenance before anything else); and does the authoritative store answer, proved by escalating-patience probes rather than assumed. Only when the store answered did the loop claim attempt-061 as its own.

The ordering is the point. A system that believes first and checks later has already contaminated its evidence. The pattern that governs this phase is the hardest-won one in the catalogue, and it is the one we would keep if we could keep only one.

No Self-Certification (R9).†

If an instrument issues a verdict from evidence it also produces or stages (a calibrator over its own predictions, a gate over its own outputs). However on first contact with reality every layer tries to certify itself, and each attempt looks rigorous — the forward model scores its own constants (“prior = value”), the evidence reader eats its own staging files — and vigilance cannot catch these, because an instrument’s first catches are always about itself. Then require that a verdict move only on evidence its maker did not manufacture: tag every evidence record at birth with properties the apparatus cannot fake (:independent?, :measured vs :target-absent-fallback, :settled vs :transient) and count only records whose tags clear — untagged never counts. Because circularity is invisible from inside the loop (every internal reading is consistent with every other); only a referent the maker had no hand in breaks it, and structure (“the tag is absent, so it does not count”) survives where vigilance fails. Revised against the record: the rule reached one layer further than first written — :review-execution-evidence-missing, twice in the first cohort: a review is itself a verdict-producing act, and a reviewer’s claim that a review ran is exactly the kind of self-manufactured evidence the pattern bars. The landed revision corroborates review execution from the job-event stream the reviewer does not control, before any review counts.

10:49:10 — What the system believes, and how much it trusts it

Fourteen seconds, and the densest phase in the run: the system refreshed what it wants, reconciled the entities it knows about, ran its belief filter, and updated how far it trusts each of its evidence channels. Nothing external happened. This is the system forming an opinion about its own situation before committing to anything — and the patterns here are what make that opinion inspectable rather than a mood.

Belief State as Operational Hypotheses (R1).

If you want decisions to depend on tractable hypotheses (progress, blockers, pattern fit, uncertainty) rather than raw conversation history. However if the belief state is just the conversation, the agent cannot cleanly update, compare, or falsify its own assumptions. Then represent the belief state as a map of operational hypotheses

(:goal, :subgoals, :blockers, :pattern-fit, :expected-next-observation, :uncertainty)

updated each step using observation and outcomes. Because a compact belief state makes predict → observe → update implementable and testable.

Structured Observation Vector (R2).

If you want the agent’s observation to be comparable across steps so scoring and learning do not collapse into prose interpretation. However tool output and user feedback arrive as heterogeneous artifacts (JSON, logs, diffs, snippets, natural language) that are hard to compare or weight consistently. Then maintain an explicit observation record as a typed, normalized feature map derived from session state (test status, compile status, diff size, failing-spec count, user-stated constraints, time since last anchor, contradiction flags). Because a stable observation vector is the prerequisite for meaningful precision control and policy scoring.

Predictive-Coding Belief Update (R3).

If you want belief updates to be principled, tunable (one learning rate; a separate trust setting per evidence channel), and operationally robust. However without an explicit rule the agent either slams its beliefs to each new observation (over-trusts) or never moves them (over-anchors), and an uncertainty estimate with no floor under it decays toward false certainty. Then move each belief toward what was actually observed, but only as far as the learning rate and the trust placed in that channel allow; and track how uncertain the belief is by keeping a running average of the size of recent misses, measured against the freshly-updated belief, never letting that uncertainty fall below a floor. It is the size of a miss that counts, not its direction — an overshoot and an undershoot are equally informative about how well the channel is understood — and the floor is a standing admission that no channel is a perfect instrument. Because moving in proportion to trusted error is what predictive coding means, and the floor keeps uncertainty in a range where the ambiguity half of the action score still says something. Invariant to preserve: the belief must be able to move, and its uncertainty must not be able to reach zero.

Evidence Precision Registry (R7).

If you want the agent to discount low-trust evidence without discarding it, and to become stricter when outcomes are volatile. However without an explicit precision layer, evidence weighting becomes implicit prompt rhetoric and cannot be audited. Then keep a per-channel precision registry — one trust weight per kind of evidence — keyed to observation features, and apply it wherever prediction error, scoring, or gating occurs. Because making precision explicit turns trust into a tunable control surface rather than an undocumented bias.

Present-Fit Mismatch as a Per-Tick Scalar (R8).

If you want a single number, comparable across time, that says how badly the agent’s current belief explains what it just observed — for validation, diagnostics, and alarms. However without such a per-tick number the belief evolution is opaque (nothing to plot, no acceptance criterion, no alarm), and the action score is no substitute: action scores rank imagined futures, this one scores the fit of the present. Then compute it as a pure function of belief, observation, and precision — a trust-weighted average of how badly each channel missed — and emit it in the per-tick trace beside the belief state. It sits near zero when trusted channels match expectation and rises when trusted evidence disagrees with the model. Because this mismatch is the quantity active-inference agents work to minimise; making it observable every tick gives both a clean validation target (it should fall on average as the agent learns) and an operational signal (a sudden jump merits attention). Invariant to preserve: one number per tick, computed from nothing but belief, observation, and trust — so it cannot be quietly improved by anything else.

Shared Kernel for the Predictive Forward Model (R4).

If you want the forward model’s predictions to match what the live dynamics actually do, with one set of rules to maintain. However two implementations of the same dynamics is two places for bugs to hide and two surfaces where prediction can silently diverge from the live step. Then factor the live step into a pure deterministic kernel (state, action, seed, opts) → next-state plus a thin wrapper that threads defaults; the predictive forward model calls the same kernel and adds principled uncertainty. Because one implementation of the dynamics is the only place the rules live — any update is reflected in both live and predicted behaviour.

10:49:26 — Yesterday’s debt outranks today’s work

Four seconds. Before the system considered anything it might like to do, it read its own outstanding obligations and found one: repair-attempt-054, a failure from an earlier run that an independent reviewer had rejected and that had never been resolved. That obligation pre-empted ordinary selection entirely. The system did not get to choose today’s work until yesterday’s was discharged.

This is worth pausing on, because it is where the architecture’s attitude to failure is visible. A failed attempt does not roll back and does not vanish. It deposits a typed repair obligation into the field — into the same landscape the loop reads when it decides what to do next — so that a later attempt encounters its own debt as ordinary terrain, and a stop-line rule makes that debt jump the queue. The loop never reverses; it only ever meets what it previously broke. What follows in this run is therefore not new work at all. It is attempt-061 paying off attempt-054.

10:49:32 — One hundred and eleven seconds of deliberation

The longest phase in the run that did not involve waiting on another agent. The system proposed candidate actions, removed the ones the graph said were infeasible, scored what remained, and recorded — for each of the finalists — which term of the score governed the outcome and by how much. It could also have abstained here, and on many runs it does; on this one it did not.

The reason this phase takes nearly two minutes and produces a written justification is the whole argument of the paper. A system that merely picked well would be a better scheduler. A system that picks well and can be asked why is something a person can supervise.

Expected Free Energy Inside an Auditable Controller (R5).

If you want selection to balance canonical outcome risk and ambiguity with operational constraints. However calling every useful controller term “EFE” makes tuning indistinguishable from storytelling. Then compute and persist the canonical core separately — risk, how far the outcomes an action predicts sit from the outcomes the system prefers, plus ambiguity, how uninformative those outcomes are expected to be — and admit engineering terms only as a named augmentation, reported beside that core and never folded into it. Because the decomposition makes clear whether a recommendation moved because of active-inference quantities or because of an engineering control. Invariant to preserve: the two-term core is persisted apart from everything wrapped around it, so any reader can ask which one moved the pick.

Candidate Pattern Action Space (R6).

If you want pattern choice to be legible and comparable, and to avoid collapse into one habitual pattern. However if the action space is any pattern at any time, evaluation becomes unstructured and selection is dominated by recency. Then define the action set as a constructed candidate set of pattern IDs produced by retrieval plus gating rules, of bounded size, with explicit reasons for inclusion and exclusion. Because constraining the action space makes downstream scoring meaningful rather than performative.

selection gain as Commitment Temperature (R14).

If you want exploration versus exploitation to depend on operational pressure (deadlines, repeated failures, instability), not on randomness alone. However without an explicit dial the agent either thrashes or tunnels, and there is nothing to turn. Then maintain a commitment temperature governing how decisively the best-scoring candidate wins: turned down, the system commits to its front-runner; turned up, it keeps the field open — and couple that dial to diagnostic signals (recent regressions, uncertainty in the belief state, contradiction rate, time pressure). Because a single commitment dial allows systematic control of stochasticity without changing the scoring model at all. Invariant to preserve: exploration is a dial, not a random number generator buried in the selector.

Hierarchical, Budget-Aware Action Selection (R11).†

If you want collective action selection that respects budget constraints at every hierarchy level — never recommending allocations that exceed the aggregate per-tick budget, and factoring in downstream and coordination costs. However a naive union of independent selections leaves the budget invariant unenforced (over-subscription happens silently), while a single central coordinator throws away the value of local-agent factoring. Then resolve conflicts explicitly at each hierarchy level: local agents propose within their sub-budgets, and a coordinator arbitrates the shared consumable budget across them. Because budget is a shared consumable, and enforcing the invariant at every level is the only way to keep multi-agent selection both locally factored and globally feasible. This is the resource hierarchy — how a shared per-tick budget is split across competing selections — and it is orthogonal to the temporal / abstraction hierarchy of R13 (a strategic loop choosing the task, a tactical loop rolling out the pattern-cascade that enacts it); the two compose but are not the same pattern. Current evidence: the exact arbiter, mutually exclusive ranked-field adapter, over-subscription witnesses, and opt-in live selection boundary are tested together, including exact replay. In Campaign S it selected one proposal from each live ranked field on both ticks, using all 7 units of the shared budget without exceeding it; exact replay reproduced both selections.

Hierarchical and Temporal Depth (R15).

If a fast tactical loop acts inside a slower strategic loop. However merely giving both levels a scalar score does not create a hierarchy. Then make the coupling explicit: strategic selection fixes the tactical target; witnessed tactical outcomes update the next strategic calibration state; and longer policies use a named temporal discount of their own rather than overloading the commitment dial. Because hierarchy is a relationship between levels and timescales, not a second use of the same score. Invariant to preserve: each level has its own quantities, and no quantity does duty at two levels at once. Current evidence: the opt-in two-tick campaign records both levels separately, rejects unwitnessed learning, folds a grounded fast outcome into a Beta update of the slow state, and uses that state to parameterise the next fast rollout. Campaign S supplied the live positive branch: Tick A’s independently approved and grounded outcome advanced the relevant slow posterior from Beta(1,1) to Beta(2,1), changed the slow mode from exploration to consolidation, and parameterised Tick B under that new state. This is evidence for the explicit coupling, not for a general nested generative model.

10:51:25 — From a choice to a construction

Two seconds. Having chosen what to do, the system assembled how: a bounded cascade of patterns fitted to the selected target. A cascade is not a to-do list. It is a small construction — some patterns feeding others, many of them overlapping rather than sequential — that can be checked before anything runs, and that says which warrants are being combined and in what order.

Temporal Depth Beyond the Greedy Step (R13).

If you want the agent to plan — to score whole pattern cascades as policies, not single steps, and to prefer an action whose payoff is two or three ticks out over a greedy one-step win. However a rollout that looks one step ahead demonstrates the machinery but not depth; without a temporal hierarchy the horizon stays shallow. Then score the whole cascade over a horizon of more than one step, and introduce a two-timescale hierarchy: a slow (strategic) loop that updates priors and preferences, and a fast (tactical) loop that acts against them. Scoring a route means adding up the costs of its steps with the later ones discounted, so that a distant payoff can matter without swamping the immediate situation. Because active inference plans over a policy — here, the pattern cascade for the selected mission — not over the next action alone. Invariant to preserve: the thing being scored is the cascade, not its first move.

The Semilattice-Rollout Execution Witness (R16 realised, for cascades).†

If you want a mission’s build phase (instantiate) to close only when its selected pattern cascade has actually been constructed — “a live instance”, not a rich prose section describing one. However the honest-looking witness is a tautology in disguise: re-run the same fold that proposed the wiring and check it reproduced itself (a mirror, R16), or — the failure we hit — execute the cascade as a strict linear pipeline through a fixed rule table, which silently abstains on every mission whose patterns that table does not already encode, so a genuinely well-posed cascade reads as unbuildable. Then take seriously that a cascade is a semilattice, not a chain — patterns compose both by sequence (one enables the next) and by overlap (one pattern belonging to several sub-constructions at once), and in practice the overlaps outnumber the sequences — and execute it by an independent rollout over that structure — give each pattern a move interface whose consumes are the salient tokens of its If/However clause and whose produces are the tokens of its Then; admit a move only when it chains onto the frontier the earlier moves have built; and read discharge as the fraction of the mission’s want-signature the assembled construction covers.The want-coverage used here is a token-level proxy for true discharge; training the move-prior on a structural-quality label (which cascades historically went well) is its natural strengthening, and turns the same rollout into a first estimate of the policy value R13 asks for. The executor is futon3a/holes/labs/M-memes-arrows/rollout_execute.py (over the cascade_rollout move interface); the witness it earns is read by futon3c/src/futon3c/logic/mission_clean.clj (instantiate-witness?). Mint the typed witness (<mission>.executed.edn) only when the construction both assembles (at least one box was built) and discharges (it covers some part of what the mission wanted), recording how much it covered as the realised signal; otherwise the phase re-opens. Because the rollout reconstructs the wiring from the patterns’ own text — a different computation from the phylogeny-edge fold that predicted it — so realised ≠ expected by construction: the witness is external to the predictor and cannot be farmed, which is precisely what R16 demands of a closed loop and what the strict-pipeline and re-run-the-fold alternatives both fail to give.

10:51:29 — Handing the work to an agent that can fail

Here the harness stops deliberating and becomes a client. It dispatched the work to a coding agent (claude-7) and waited five minutes and ten seconds — by far the longest single phase — for a substantive commit.

Then the interesting part. The build gate examined what came back and flagged it. The system did not accept the result, and it did not throw the attempt away either: it spent one bounded cure turn dispatching the same author to fix its own build, which produced commit 6c537c6 eight seconds later. That single retry is the only backward motion permitted inside an attempt. It is bounded deliberately, because an unbounded repair loop is how an agent harness quietly converts a failure into an expensive failure.

Note what the harness is not doing. It is not writing the code, not reviewing its own build, and not deciding that the commit is good. Every load-bearing quantity sits around the coding agent rather than inside its prompt — which is the correction this architecture makes to its own predecessor, where asking the agents to perform the formalism in-band mostly got in their way.

10:57:06 — A different agent reviews

The system dispatched a reviewer — codex-1, a different agent, from a different model family than the author — and waited two minutes and eight seconds for a verdict. It came back approve, on first review.

The separation is not politeness. An author asked to assess its own work produces exactly the kind of evidence the whole apparatus exists to refuse, and the same applies one level up: a reviewer’s claim to have reviewed is itself self-manufactured, which is why review execution is corroborated from a job-event stream the reviewer does not control before any review is allowed to count. That refinement was not designed in advance. It was forced by two measured failures in the first cohort, and R9 above carries the revision.

This is also where the difference between two kinds of calibration becomes concrete.

Two-Layer Calibration (R12).

If predicted-versus-realised pairs are your evidence that the model is calibrated. However when the model’s own output composes the field it is scored against, the comparison is self-referential: it tests dynamics-consistency, not whether the model’s value is right — a model can pass forever while being worthless at predicting real outcomes. Then name and keep both layers explicitly: Layer 1 compares the model’s predictions against its own later scores — cheap, run every cycle, and permanently labelled never-value-evidence — while Layer 2 compares predictions against witnessed outcomes the model did not produce, which are scarce and therefore gated. Only Layer 2 clears value, and Layer 1’s cheap pass may never be reported as Layer 2 clearance. Because the only thing that escapes “prior = value” is a referent the model had no hand in; Layer 1’s referent is its own output, so it can establish internal consistency and nothing more, while Layer 2’s is external — the one layer that can be wrong about value, which is exactly why it is the gate. Invariant to preserve: the two layers are never allowed to share a label. Current evidence: a deterministic report preserves the two records and their provenance under distinct fields and fails closed for a missing, failed, author-controlled, or self-witnessed Layer 2. Campaign S produced two successful live records: on both ticks Layer 1 matched proposal to realised action, while Layer 2 was supplied by independent review and grounded re-observation; both combined gates cleared without substituting the cheap layer for the external one.

10:59:22 — The witness, and the dial that moved

Sixteen and a half seconds, and the only phase that changes the world outside the model. The approved commit was written into the external store as a typed implementation-and-discharge record, and the store was then re-read through an independent path to confirm the record was really there. The trace line that matters is dial-moved? true: a quantity the system does not author read differently after the act than before it.

Everything preceding this phase is, strictly, a well-organised opinion. This is the phase that makes the loop a loop.

Grounded Actuation, Not Re-Observation (R16).

If you want a genuinely closed action–perception loop: the agent acts, and the world it observes on the next tick is materially different because it acted. However this is seductively easy to fake — an enactor that re-runs its own construction and measures how faithfully it reproduced its own output produces a perfectly honest number over a quantity that cannot move (a mirror, not an act). Then close the loop only when the act writes a typed, ungameable witness to a substrate outside the model — an endpoint proven inhabited by a query derived from the authored bindings, not from builder claims — and that witness feeds the next belief. Because the point of a perception–action loop is that action changes the world and the changed world changes the next belief; if “realized” is coverage-over-reproduction, the world never changes and the belief never updates. Revised against the record: the witness demand has its own measured failure family — :artifact-binding-mismatch, four occurrences in the first cohort — in which an honest author has nothing bindable, either because the dispatched spec was too vague to act on or because the repair was data- or spec-shaped while the binding insisted on an in-attempt code commit; in the worst measured case the demand induced a fabricated code change that independent review then rejected. The revision is that the witness demand must be shape-aware (a deposit or a specification can be the typed, externally-checkable artifact), or the guard against fabrication becomes a generator of it.

10:59:53 — Closing at thirteen minutes and ten seconds

The rest is bookkeeping, and it is short: the repair obligation from attempt-054 was marked resolved (2.1s), that resolution was itself validated against the substrate rather than taken on the loop’s word (1.6s), an item was queued for a human to adjudicate the next morning (4.5s), and the attempt closed as grounded-change.

Thirteen minutes and ten seconds, three agent turns, one commit, one repaid debt, one item for a person to look at. That is a good run. Most are not, and the honest accounting of how many are not is in the companion paper — but this is the shape the system is trying to produce, and every pattern above exists because some earlier version of this run went wrong in the way that pattern describes.

Between runs: what the attempt left behind

Some of the system’s most consequential work cannot happen inside thirteen minutes. Attempt-061 deposited an adjudicated outcome, and that outcome joins an accumulating record which is periodically re-read offline, when nothing is being decided — to merge concepts that have turned out to be the same, to prune structure that was never load-bearing, to retrain which compositions get proposed in the first place, and occasionally to admit that no existing pattern covers what keeps happening.

The patterns in this section are the slow ones. They are also the ones where embeddings, absent from the entire story so far, finally become essential.

Structure Learning by Bayesian Model Reduction (R17).

If you want the agent to form concepts and reorganise its generative model --- merge look-alike states, prune redundant connections, generalise across contexts --- from accumulated experience but no new data, offline.The payoff is not merely fewer patterns; it is better search. If the system knows that several patterns form a useful constellation, it can propose richer candidate moves than a greedy one-pattern-at-a-time chooser. However simply accumulating experience cannot do this: piling up counts only sharpens the mappings that already exist, and never removes a connection or ties two states together. Then run Bayesian Model Reduction over the accumulated counts — ask whether the evidence already gathered is better accounted for under a simpler model’s assumptions, and accept the simplification only when the evidence favours it by roughly twenty to one. No new data is collected: the same counts are re-read under the simpler assumption, which is what makes the operation cheap enough to run offline over the whole catalogue. Because model evidence — not more data — is what reorganises concepts, and this is the closed-form, biologically-plausible (synaptic pruning during sleep) operator that scores a reduced model against its parent. Invariant to preserve: merging requires a stated evidence threshold, and looking alike is never sufficient. Current evidence: the offline envelope records the frozen parent, every proposed merge, the authoritative Δ⁢F threshold and decision, the reduced posterior, and either a structural change or a principled non-change; its canonical input replays to exact equality. Campaign S’s live inter-tick phase froze 26 capability–mission observations, evaluated all 21 pairwise proposals among seven capability concepts in 20 milliseconds, replayed exactly, and carried its result into Tick B’s proposal field. Its accepted reductions collapsed all seven concepts into one, so the mechanism is run-evidenced while the usefulness of this particular reduction remains an operator-facing question rather than an automatic deployment claim.

Posterior Spread as an Exploration Control (R17 ′).

If you want unresolved structural hypotheses to remain eligible for exploration. However posterior standard deviation is uncertainty, not expected information gain: it contains no expectation over the observation and posterior update that a policy would induce. Then expose the spread under the honest name model-uncertainty bonus, keep it outside the risk-plus-ambiguity core, and reserve the words “information gain” for a calculation that actually earns them. Because an honest exploration heuristic is useful, while a falsely canonical one makes the controller impossible to audit. Invariant to preserve: a quantity is named for what it computes, not for the role you wish it played.

Embedding-Nearness as the Structure-Learning Generator (R17 ′′).

If you want to run structure learning (R17) — merging look-alike states, pruning redundant connections — but need a tractable set of candidate reductions to test, because the space of possible merges is far too large to enumerate. However the control loop (R1–R16) is no help here: it never needed to know which patterns are alike, and hand-picking the candidates by fiat smuggles in the very structure you are trying to learn. Then exploit the fact that design patterns are written as text — push the collection into a high-dimensional vector-space embedding and read off nearness, so that patterns sitting close become candidate merges; hand those to R17, which accepts only the mergers its evidence threshold clears, and let R17′’s posterior spread rank which neighbourhoods to resolve first. Because the embedding is a cheap, model-free generator of structural hypotheses while the evidence test is the disposer: embeddings are inessential to the control loop but fundamental here, as its generator. Embedding proposes; free energy disposes. Invariant to preserve: whatever proposes the merges must not also be what accepts them.

Pattern Genesis from Evidence-Bearing Holes (R17 ′′′).

If repeated, independently recorded episodes, failed retrievals, or fold policy-holes show that no existing pattern adequately expresses a recurring way of acting. However R6 can retrieve only the patterns already written down, R13 can compose only the moves already in the vocabulary, embedding nearness proposes similarity rather than a new action, and structure learning can reduce or compare the structures it has but cannot author a missing one. Then treat the gap as a proposal to enlarge the vocabulary: bundle the triggering circumstances and policy-hole, supporting and challenging memories, rejected near-matches, and a falsifiable predicted outcome into a candidate IF/HOWEVER/THEN/BECAUSE pattern; mint it as a new move at an explicitly unearned prior; make concrete, through a fold, what enacting it is expected to change; and admit cascades containing it to witnessed enactment. Only repeated R16-grounded outcomes and review can promote it; failures revise, merge, or prune it through the rest of R17. Because structure learning must sometimes enlarge the vocabulary in which policies can be expressed, not only rearrange or simplify an inherited vocabulary. Smith et al.’s active-inference model supplies the close theoretical precedent: insufficient state–outcome mappings motivate state-space expansion, after which reduction removes unnecessary structure (5). Our control-space move is an explicit extension of that precedent, not a claim that their model authors design patterns.

Discharge-Trained Cascade Proposal (closing R16 → R6).

If you want the candidate cascades the agent proposes (R6) to improve with experience — to reach for the compositions that have actually gone well, not a retrieval ranking frozen at authoring time. However embedding-similarity retrieval is a prior, not a value: it ranks patterns that look relevant to the problem text, and on the historical corpus the patterns a successful mission actually used sit hundreds of places down that cosine ranking — similarity commits to nothing, so a proposal built from it alone cannot learn. Then train the proposal distribution from realised outcome: score a completed mission’s pattern-composition by the structural aliveness of what R16 witnessed was really built — Salingaros’s measure of a structure’s life, the product of its intensity and its internal coherence — credit that aliveness back to the patterns the mission used, and fit a sampler that generates compositions in proportion to that reward — a generative flow network over the cascade-construction semilattice, which samples the diversity of alive compositions rather than collapsing to the single modal one a greedy prior returns. Because the outcome of using the catalogue is the only signal that separates relevance-that-commits from relevance-that-merely-retrieves; feeding the realised aliveness of built cascades back into how they are proposed is what makes the catalogue a policy that learns which of its own compositions to reach for, not a static menu selected from by a fixed rule.This pattern is the one with the most measured history behind it, and the history is mixed. Credit trained on aliveness does separate the compositions that went well from those that did not, and survives a shuffled-label control. But in a preregistered head-to-head over forty externally adjudicated builds, the trained proposer did not beat the retrieval-prior incumbent on success rate, and a mission-conditioned variant made transfer to unseen missions worse rather than better. What it did win on decisively was diversity of proposals. The disposition we adopted is therefore the honest one: keep it as a diversity supplier, not as a better chooser, until the supply of adjudicated labels is wide enough to settle the question. The full protocol, metrics, and negative results are reported in the companion paper.

Capability Zones over the Embedded Landscape (staged; the self-model’s second use of the metric).

If the agent must choose among its own capability gaps — the proposer surfaces one “learn this action-class” candidate per class it cannot yet enact, and the loop must rank them. However gap classes carry no outcome statistics by definition: nothing about them has ever been enacted, so every honest posterior sits at its prior. This is measured, not hypothetical: on 2026-07-19, after a night of four consecutive externally-witnessed groundings, the leading five candidates were all learn-action-class entries at bit-identical scores (fourteen such candidates, every per-class posterior still sitting untouched at its prior, zero recorded updates), and the non-discrimination tripwire refused the pick — correctly, since preferring one never-observed option over another would be invented, not inferred. Then give the choice ground the agent already stands on: partition the same embedded landscape the stack renders as its mission field into action-class zones — a Voronoi tessellation over class seeds embedded in the same space — and value each gap by what its zone carries: structural load (enacted magnitude and summed turn-attestation of the features inside it), live demand (agent dwell-time in the zone, read from the running map), and posterior variance once months of repository history are described in capability terms and replayed into the per-class posteriors. Because capability in this stack is stigmergic — it lives in the built structure, not in agent biographies — the structure’s own load map is the only non-invented ground for preferences over learning; here the embedding stops being a generator of merge hypotheses and becomes the coordinate system in which the self-model has ground truth. The scope claim of R17′′ therefore sharpens: embeddings remain inessential to acting (R1–R16) and are fundamental twice at the learning frontier --- learning what the model’s concepts are (R17), and learning what the agent’s capabilities are not (this pattern).Chartered, not yet built: futon0/holes/missions/M-capability-zones.md (2026-07-19), discharging the two stop-the-line obligations the measured refusal opened. Mechanism files: futon2/src/futon2/aif/action_proposer.clj (gap-actions), futon2/src/futon2/aif/intrinsic_values.clj (per-class Beta posteriors), futon3c/src/futon3c/live_efe_map.clj (the live coordinate field). A dimensional note with a principled core: the operative partition should live in a 3-D reduction of the embedding — not the print-flat 2-D projection (whose adjacency distortions would silently misfile boundary features) and not the raw high-dimensional space (where distance concentration leaves every nearest-seed margin uniformly thin and the partition uninspectable). Three dimensions keep Voronoi cells compact and the tessellation walkable — and the deeper reason is an acceptance invariant in the spirit of R9: the partition the operator visually accepts must be the same object the machine’s preferences run on, so the machine must operate in a space a human can actually inspect, with the high-dimensional nearest-seed reading retained only as a boundary-distortion diagnostic.

Native-Currency Discrimination (the R17′–R12 edge).

If the selector must rank capability gaps by earned evidence, while the non-discrimination gate rightly reads only the core of the score — risk and ambiguity, nothing else — so that a bolt-on credit can never hide a flat estimator. However feeding the posteriors is not enough — this is measured, not hypothetical: on 2026-07-21, with the per-class credits fully fed and visibly distinct in the ranked field, the core stayed bit-identical and the gate refused again, because by the score-provenance discipline that credit enters only the engineering augmentation — and each naive completion fails its own way: pushing structural uncertainty into the ambiguity leg alone makes every unexplored class uniformly repulsive (anti-epistemic); fabricating an information-gain term violates the honesty rule of R17′; and re-pointing the gate at the augmented score guts the gate. Then make the core discriminate through both of its legs at once, in its native currency: per-class zone load — the structure’s earned mass — enters the preferences the risk leg scores against, so risk carries what the anthill wants; and each class’s own predicted-outcome uncertainty replaces the class-flat ambiguity placeholder, so ambiguity carries what the machine genuinely does not know about the outcome of learning that class. An unexplored-but-loaded zone then scores low risk and high ambiguity, and the selector’s trade-off between them is exploration-versus-exploitation expressed inside the canonical decomposition — no new term, the gate untouched, and at the empty store the behaviour degrades exactly to today’s honest refusal (uniform predictive variance, zero load shift). Because preferences are exactly where wanting lives in expected free energy and outcome ambiguity is exactly what the ambiguity leg measures; the R17′ quarantine is a boundary, not a blanket — it bars structure-posterior spread from impersonating expected information gain, while the predictive variance of the scored action’s own outcome is the ambiguity leg’s proper content. That is the edge this pattern names: uncertainty about model structure stays outside the core as an honestly-labelled bonus (R17′); uncertainty about an action’s outcome belongs inside it, as measurement (R12).Chartered as M-capability-zones slice 2; the two measured refusals it discharges are attempt-036 (prior-flat posteriors, 2026-07-19) and attempt-041 (credit-fed but core-flat, 2026-07-21) — the same tripwire correct both times, for different reasons.

Underneath all of it: watching the machinery run

One last pattern, which is not part of the story above because it is not part of any run in particular. Everything described so far is the loop observing the world. Nothing in it observes the loop. Every pathology the system has suffered — wedges, livelocks, mixed code images, silently lost wakes — was found afterwards, by archaeology on a run that had already failed.

Interoceptive Tripwires (R20).

If you have hardened the loop’s constructed core (R1–R16) and want the machinery itself to be observable while it runs live, because every pathology so far — wedges, livelocks, mixed code images, silently lost wakes — was discovered by post-hoc archaeology on a completed broken run. However the loop’s observation channel is task-level only: it observes the world it acts on (job outcomes, verdicts, witnesses, QA), while its own machinery is a hidden state with no likelihood mapping; and simulation tests of the known invariants pass by construction the moment the known bugs are fixed, so neither channel can notice the failure modes nobody has imagined yet. Then weave a supplementary harness of invariant tripwires around the live run at its phase boundaries: each wire is a near-infinite-precision prior over machine trajectories (turn conservation, ledger closure, review-commit provenance binding, append-only repair stores and their status lattice, wedge and livelock detectors, wall-clock overrides, loaded-code/file-code coherence, and an environment-alphabet wire on which any unknown job state trips rather than defaulting); a trip is surprisal that belief updating cannot explain away, and the mandated epistemic action is freeze, record, park, summon — write the frozen state as a durable report, open a typed stop-line through the loop’s own repair machinery, park an investigation join and summon the outer reviewer, on a fail-safe ladder that only ever degrades toward recording, never toward blocking the run. Calibrate before arming: the wires must retro-trip on the known incident corpus (a wire that does not fire on the known past is a dud laser), and every closed incident thereafter must deposit either a new wire or an entry on an explicit blind-spot map. Because this is interoception, not vision: like any sensorium it admits no completeness theorem — it gets identifiability checks, a measured coverage number, and a blind-spot map instead — but an organism with only a hand (R16) and a preference model (C) learns of poison from the stomach ache, and each hotfix repairs one meal; an organism with interoceptive nerves notices at the moment of violation, with the state still warm, and every incident leaves it permanently more observant. The trip stream is also precision evidence about the machine itself (R7): a wire whose trips keep being blessed as model revisions demotes itself down the action ladder, and a genuine trip should lower the system’s confidence in its own machinery until the finding is discharged — the noticing feeding the feeling.

5. Discussion

The thirteen-minute attempt shows the loop working once from selection to a grounded change. A later seventy-two-minute campaign shows the four newly integrated mechanisms working together across two ticks. Two slower histories show how the catalogue itself changes: a recurring hole can become a candidate pattern, and a recurring machine failure can become a new sense for the harness. All three histories are useful because none ends with the system simply declaring that it has learned.

5.1. The running example under an instrumented campaign

Attempt-061 remains the compact running example. Campaign S on 2026-08-21 is the more demanding, complete example: it preregistered two live proposal fields, local and shared budgets, an exploration-to-consolidation feedback rule, separate internal and external calibration records, and an offline structure-learning pass. It completed in 4,324,602 ms (72:05), including two independently reviewed and grounded changes in different repositories.

Tick A took 57:30. R11 selected one inside-Futon3c and one rest-of-stack proposal at total cost 7, exactly exhausting but not exceeding the shared budget. The external FrontierMath action initially introduced an independent SAT-encoding cross-check. Review found that a run with no valid samples could pass vacuously; the amendment refused non-positive and zero-valid-sample runs, passed a real five-sample replay and the full suite, and was approved and grounded as Futon6 commit e72f7f3. Layer 1 and the independent Layer 2 both passed. That witnessed success moved R15’s slow state from :exploration to :consolidation, changing the capability posterior from Beta(1,1) to Beta(2,1) before the second tick.

Between ticks, R17 froze 26 capability–mission observations, evaluated 21 candidate reductions among seven concepts in 20 ms, accepted 21, and collapsed the concepts to one. Exact replay reproduced the R11, R12, R15, and R17 records. The reduction is evidence that the mechanism executes and feeds the later field, not that this aggressively merged model should be deployed.

Tick B then ran under consolidation and took 14:34. R11 again selected a feasible cost-7 cross-field portfolio. The Expressions of Interest action repaired prior-reference parsing; review caught substring matching that could fabricate edges, and the amendment restricted matches to whole identifiers. It passed re-review and grounded Futon5a commit ded366e. Both calibration layers passed again. The campaign closed :two-tick-evidence-complete with receipt e-8ae4e209-f13b-4722-80de-a7fc7d5d68fe. The long wall time is part of the result: independent production work and correction dominate the 20 ms offline reduction, so the campaign demonstrates an auditable control loop, not a fast scheduler.

5.2. From a policy-hole to a candidate pattern

The first case began with a citation to a pattern that did not yet exist. Rather than treating the plausible name as evidence that the pattern was already available, the system recorded the reference as a policy-hole, minted structure/two-projections-of-one-quantity, and used the resulting candidate to discharge the originating hole. This is the smallest complete instance of R17′′′: an observed gap enlarged the policy vocabulary, but did not by itself promote the new entry.

A larger failure family produced the pair process-coherence/status-refresh-before-work and process-coherence/is-this-even-a-problem. Hundreds of expensive ticks had worked from stale banners instead of consulting the primary record. Here the recurring evidence justified two more specific moves rather than one broad instruction to “check status.”

The Zai memory pilot supplies the next test of the boundary. Several Lean episodes fit existing tactic patterns only loosely, so the Librarian must be able to return ‘‘no adequate pattern’’ and propose a narrower candidate instead of forcing every memory into its nearest neighbour. Conversely, a volatile fact such as tool availability remains a reference memory rather than becoming a pattern. Across the three cases the rule is the same: a hole warrants a candidate, not its promotion.The older live route is recorded as library-gap-findings → authoring → authored-seeds → pattern-library in futon2/holes/wm-pipeline-wiring.edn; the generalised mint lane and the two-projections precedent are in futon2/holes/labs/slush-demo/SPEC-full-loop-gfn.md; typed-memory evidence and pattern-conditioned recall are developed in futon3c/holes/missions/M-typed-memories.md.

5.3. From incidents to interoceptive tripwires

R20 followed the same progression at the level of the harness itself. On 2026-07-16, eleven wires specified from the loop’s fix-ledgers retro-tripped all four cases in the reconstructed incident corpus: a late-author artifact from the real phase ledger, plus synthetic terminal-wedge, rejection-livelock, and mixed-image cases. By the time of writing the set had grown to thirteen catalogued wires, twelve enabled, retro-tripping all five catalogued incidents.

The first live catch was, as No Self-Certification predicts, about the new instrument itself. One wire fired fifteen times in shadow mode because its composition baseline had been captured mid-load: an observation of emptiness had been mistaken for an empty observation. The likelihood mapping was repaired so that a missing baseline admits the first real observation exactly once. Shadow mode made that calibration error free to observe. Two subsequent armed runs, including a full author–review–reject cycle and an operator sequencing error typed as an environmental hold, produced no trips and no false alarms.

The next armed runs exercised more of the design. A three-week adversarial repair lineage used a Claude author and Codex reviewer. Four strictly narrowing rejections identified a missing reader boundary, a reader-retention race, and a publisher-interleaving race that the reviewer reproduced deterministically. The lineage terminated in a grounded change. It also left a new author–artifact-binding wire, chartered after an earlier incident in which the pipeline reviewed a commit hash that had been narrated rather than measured.

During the grounding run the wedge detector fired on a lineage that was one run from convergence. Its reading was factually correct but carried the wrong precision. The summon path then failed its roster check and degraded one rung down its fail-safe ladder without losing the report. Both findings went through the contract’s own revise-the-model route that afternoon: the detector learned to exempt convergence, where every round produces a fresh commit, while retaining the true no-work wedge; the discharge was recorded with independent review evidence. The proposed link from a trip to R14’s commitment dial — a wire firing should make the system less sure of itself — remains explicitly chartered rather than implemented.

These histories expose the same discipline at two scales. Embedding nearness or a policy-hole may propose a pattern, but witnessed enactment and review must decide whether it earns standing. A tripwire may propose that the machine is failing, but replay, shadow operation, and independent discharge must decide whether the wire or the machine needs revision. In both cases the generator is prevented from certifying its own proposal.

6. Conclusion

The moves catalogued here were not designed and then implemented. They were extracted from a system while it was being built, broken and repaired, and several carry the scar of the particular failure that forced them — a scheduler that fired into a sealed loop, an enactor that measured how faithfully it had reproduced its own output, a reviewer whose claim to have reviewed was taken at its word. That is the sense in which they are offered as patterns rather than as an architecture. What we think generalises is not the system but the invariants: record the decision together with the reasons that produced it; keep the principled quantities separate from the engineering ones so a reader can tell which moved a choice; never let a component certify its own output; require a witness the system could not have manufactured before believing the world has changed; and treat a failure as terrain to be crossed later rather than as something to roll back.

By the definition this paper began with, most of these remain candidates. A pattern earns its name through repeated enactment and review, and one implementation in one stack is one enactment. We would rather say so than let a catalogue’s confidence outrun its evidence — and the entry that forces the admission is itself one of the entries.

The formal apparatus behind all of this — the generative model, the scoring quantities, the structure-learning operator, an audit of where the implementation departs from the theory, and a preregistered experiment whose headline result was negative — is in the companion paper, which shares this one’s system and its specimen run.

For the pattern reader, the test we cannot run is the one worth running. If these invariants are real, they should be recognisable in harnesses built for entirely different reasons by people who have never read this paper. Where they are, the entry has earned its promotion; where they are not, it was a description of our system all along, and we would rather find that out than not.

7. Acknowledgements

Thanks to the Peeragogy Project participants for contributions on related topics.

References

  • Alexander (1999) C. Alexander The origins of pattern theory: the future of the theory, and the generation of a living world. IEEE Software 16 (5), pp. 71–82. External Links: Document Cited by: §2.
  • Corneli et al. (2026) J. Corneli, C. J. Danoff, R. S. Puzio, S. Ayloo, S. Belich, A. Wilkinson, M. Tedeschi, and P. Mosley Patterns for a new generation: ai and agents. External Links: 2506.09696, Link Cited by: §2, §2.
  • Moran (1971) T. P. Moran (Artificial, intelligent) architecture: computers in design. Architectural Record, pp. 129–134. Cited by: §2.
  • Salingaros (1997) N. A. Salingaros Life and complexity in architecture from a thermodynamic analogy. Physics Essays 10 (1), pp. 165–173. Cited by: §2.
  • Smith et al. (2020) R. Smith, P. Schwartenbeck, T. Parr, and K. J. Friston An active inference approach to modeling structure learning: concept learning as an example case. Frontiers in Computational Neuroscience 14, pp. 41. External Links: Document, Link Cited by: §4.