ATM

ARCHITECTURE DIAGRAMS

Flows, gates, and transitions

Connected diagrams taken directly from the library architecture. Follow the arrows: from map and state to the agent slice, deterministic checking, and result.

Module map

Each file depends only on the previous one in the chain — no circular dependencies, no hidden couplings.

primitives.py

10 primitives, 5 floors

state.py

binding + active state + slice

guards.py + logic.py

12 guards, 6 operators

traversal.py

step engine, 11 declared outcomes

On top of that sit examples.py (8 shipped scenarios) and verify.py (35 automated checks) — not claims, but code you run yourself:

python -m fpf_thinking_map.verify
python -m fpf_thinking_map.examples
Complete architecture flowATM · ARCHITECTURE
SemanticMapfinite domainRuntimeBindingstate + evidenceThinkingMapTraversaldeterministic engineLocal slicemove · gate · rolesLLM / Agentproposes the moveGuards + logicchecks legalityResponse contractstructured outputTyped resultCONTINUE / ABSTAINSeparate transitionmutates statestate-controlled loop
Single-step decisionATM · ARCHITECTURE
step()increment TTLActive context?CHANGE_FRAMEConsistent logic?ABSTAIN12 guardshard constraintsEvidence sufficient?COLLECT_EVIDENCEAuthorized moveCONTINUE / BRIDGE / IDLECHANGE_FRAMEno contextABSTAINcontradictionCOLLECT_EVIDENCEgate incompleteNONONOcollection → next step() call
Composition of the 6 operatorsATM · ARCHITECTURE
EvidenceFreshGatePassesRoleActiveRiskAboveTransitionAvailableIsStateANDNOTIMPLIESIFFXORORInformational factsHINT / WARNProposed actionsROUTE / BLOCKIncompatibilitycontradiction foundconsistency_check()exclusive, no contradictionsABSTAINContinue to guards
Evidence TTL lifecycleATM · ARCHITECTURE
CURRENTage < TTLSTALEage ≥ TTLEXPIREDage ≥ 2×TTLstep_counter ↑step_counter ↑new evidence / revalidation

Semantic floors and their expiry

Nothing is "memory" with no limit except the structural layer at floor 0. Everything else has its own clock, and the rate is not the same everywhere.

Floor 0 — STRUCTURAL

ContextPrimitive, ContextBridge, RolePrimitive, TransitionPrimitive, gate definition

TTL: ∞ — never expires
Floor 1 — BINDING

Role assignment, commitment, work plan

TTL: 10 steps
Floor 2 — EVIDENTIARY

Evidence, trust tuple (fidelity × relevance)

TTL: max 1, F×R×8 steps
Floor 3 — OPERATIONAL

Speech act, work, gate evaluation

TTL: 2 steps
Floor 4 — PUBLICATION

Publication

TTL: inherited from source

Eleven declared outcomes, nine live

The engine declares 11 outcome types. 9 are live — reachable through code, directly verified, most of them from step() alone. BRIDGE is "live" only as a declaration — the real execution (attempt_bridge()) is a separate, separately licensed call.

CONTINUEliveABSTAINliveCOLLECT_EVIDENCEliveCHANGE_FRAMEliveIDLEliveESCALATEliveREVISE_PLANliveAWAITliveBRIDGEadvisory onlyASKdeclared, unreachablePUBLISHdeclared, unreachable

ASK and PUBLISH are declared in OutcomeKind and named in the module docstring — but no code returns them yet. This is not a hidden bug: it is checked directly in code, not merely inferred from docs, and we say so plainly.

ARCHITECTURE.md — technical source ↗