Semantic Drag
add resistance when movement would break meaning
Running the actual pattern live via applyPattern() — switch the substrate, stack overlays, watch the signals, or reverse the dynamics. Not a mock.
"Semantic Drag" — add resistance when movement would break meaning. It has a viscosity layer (damp motion / calm a region), a link layer (ropes / cloth between neighbours), a tether layer (bind matter to an anchor), and a cohesion layer (flocking — pull toward neighbours). The active render stack is links, field-lines, trails, particles.
A derived friction recipe, not a natural field: dragging an object away from meaningful neighbors thickens viscosity while tether (spring) and links resist, and moving toward a valid relationship lets resistance fall away. The user can always override.
Copy this pattern
<field-root></field-root>
<div data-body="viscosity" data-strength="0.9" data-range="300" data-feedback></div>
<div data-body="link" data-strength="0.7" data-range="320"></div>
<div data-body="tether" data-strength="0.6" data-range="280"></div>
<div data-body="cohesion" data-strength="0.5" data-range="260"></div> <script type="module">
import '@fundamental-engine/elements';
</script>
<field-root></field-root>
<div data-body="viscosity" data-strength="0.9" data-range="300" data-feedback></div>
<div data-body="link" data-strength="0.7" data-range="320"></div>
<div data-body="tether" data-strength="0.6" data-range="280"></div>
<div data-body="cohesion" data-strength="0.5" data-range="260"></div> import { FieldField } from '@fundamental-engine/react';
export default function SemanticDrag() {
return (
<FieldField>
<div data-body="viscosity" data-strength="0.9" data-range="300" data-feedback />
<div data-body="link" data-strength="0.7" data-range="320" />
<div data-body="tether" data-strength="0.6" data-range="280" />
<div data-body="cohesion" data-strength="0.5" data-range="260" />
</FieldField>
);
} {
"id": "semantic-drag",
"name": "Semantic Drag",
"intent": "add resistance when movement would break meaning",
"primitives": [
"viscosity",
"link",
"tether",
"cohesion"
],
"bodies": [
{
"body": "viscosity",
"strength": 0.9,
"range": 300,
"feedback": true
},
{
"body": "link",
"strength": 0.7,
"range": 320
},
{
"body": "tether",
"strength": 0.6,
"range": 280
},
{
"body": "cohesion",
"strength": 0.5,
"range": 260
}
],
"relationships": [
{
"from": "object",
"to": "neighbor",
"type": "meaningful-with",
"strength": 0.6
}
],
"render": [
"links",
"field-lines",
"trails",
"particles"
],
"metrics": [
"drag",
"validity",
"relation-strength",
"friction"
],
"diagnostics": [
"force-vectors",
"topology",
"prediction"
],
"accessibility": {
"reducedMotion": "valid/invalid guides with relation warnings and a drop-cost marker",
"meaningWithoutMotion": "valid drop targets are listed; invalid moves show a warning and a labelled cost before commit"
},
"notes": "A derived friction recipe, not a natural field: dragging an object away from meaningful neighbors thickens viscosity while tether (spring) and links resist, and moving toward a valid relationship lets resistance fall away. The user can always override.",
"tier": "operational",
"status": "shipped",
"concepts": [
"drag",
"spring"
],
"conditions": [
"related"
]
} See also
- Diagnostic Lens reveal field lines, causality, prediction, topology, energy, and overlays
- Accessibility Equivalence convert motion-heavy behavior into static, semantic, reduced-motion equivalents
- Field Tutorial teach Fundamental by revealing DOM, bodies, fields, metrics, feedback, and overlays
- Friction Gate slow risky, destructive, or irreversible actions without modal noise
- Field Contract Preview show exactly what a recipe will register, measure, write, and render before enabling it
- Presence Field show collaborators as live influence, not static avatars