README: Jook
Purpose
This document defines the KNAT application profile for a Jook — a world item that projects ambient influence over participants within its spatial perception field. Consent is implicit: proximity is consent.
The goal of this profile is to allow KNAT clients to:
- observe the current census of participants within a jook's field
- read the active ambient effects being applied by a jook
- monitor census staleness and evaluation timing
- join jook membership to other participant surfaces
This profile intentionally does not model:
- frame-by-frame AwarenessState (frame-ephemeral, internal to the executor)
- participant chem state or actor physics (those are biologic surfaces)
- effect application outcomes on individual participants (governed by the participant's own surface)
- region or world spatial topology upstream of the jook
Conceptual Model
A jook is a world item with a fixed location and field radius. Any participant within the field is perceived by the jook. The jook does not push effects to the participant's chem directly — it biases the environment within its radius.
World / Region
provides spatial frame of reference
Jook
owns field_radius spatial claim
maintains proximity cohort (census)
applies ambient effects to census members
Consent is implicit by proximity. Participants who enter the field are in the census; participants who leave are removed at the next cohort evaluation. There is no opt-in or opt-out mechanism at this surface.
Census vs. AwarenessState: The KNAT census is the stable membership list updated on the cohort evaluation schedule (every N frames). AwarenessState is an in-memory, frame-ephemeral record used by the executor and is not visible here.
Root Graph
A jook brand KNAT surface is rooted at:
/brand::<jook_id>/
Top-level families:
/brand::<jook_id>/
/spec
/engine
/census
/effects
/frame
The view field on the snapshot indicates whether the surface is complete (full) or policy-shaped (projected). Consumers must not assume census completeness when view is projected.
Spec Surface
Provenance of the jook instance. Static after instantiation.
/brand::<jook_id>/spec/ref
/brand::<jook_id>/spec/genome
| node | type | capabilities |
|---|---|---|
ref |
String | read |
genome |
String | read |
ref is the registry or filesystem reference to the originating spec document.
genome is the hex-encoded genome seed used during instantiation.
Engine Surface
Identity of the engine presenting this jook. Present on all Janet brand objects exposed via KNAT.
/brand::<jook_id>/engine/name
/brand::<jook_id>/engine/version
| node | type | capabilities |
|---|---|---|
name |
String | read |
version |
String | read |
Census Surface
The proximity cohort membership for this jook. Updated on the cohort evaluation schedule, not per-frame.
/brand::<jook_id>/census/cohort_id
/brand::<jook_id>/census/members
/brand::<jook_id>/census/member_count
/brand::<jook_id>/census/evaluated_at_frame
/brand::<jook_id>/census/staleness_frames
/brand::<jook_id>/census/is_stale
| node | type | capabilities |
|---|---|---|
cohort_id |
String | read |
members |
Array | read |
member_count |
Integer | read |
evaluated_at_frame |
Integer | read |
staleness_frames |
Integer | read |
is_stale |
Boolean | read |
Each member entry in members:
/brand::<jook_id>/census/members[]/participant_id
/brand::<jook_id>/census/members[]/perception_strength
| node | type | capabilities |
|---|---|---|
participant_id |
String | read |
perception_strength |
Number | read |
perception_strength is a linear falloff value: 1.0 at the jook center, 0.0 at the field boundary. It is computed at census evaluation time, not recalculated per frame.
is_stale is true whenever staleness_frames exceeds the jook's configured cohort evaluation interval. Stale census data should be treated as approximate.
Effects Surface
Aggregate view of ambient effects currently active on this jook. May be suppressed by projection policy.
/brand::<jook_id>/effects/active
| node | type | capabilities |
|---|---|---|
active |
Array | read |
Each entry in active:
/brand::<jook_id>/effects/active[]/name
/brand::<jook_id>/effects/active[]/effect_type
/brand::<jook_id>/effects/active[]/intensity
| node | type | capabilities |
|---|---|---|
name |
String | read |
effect_type |
String | read |
intensity |
Number | read |
Effect types: sound, light, rhythm_sync, attention_bias, metadata_exposure, or a custom string.
Frame Surface
/brand::<jook_id>/frame
| node | type | capabilities |
|---|---|---|
frame |
Integer | read |
Simulation frame number at snapshot time. Use to detect whether a census snapshot is current or lagging.
Cross-Domain Joins
| From | Via | To |
|---|---|---|
census/members[]/participant_id |
biologic surface | participant location, role, chem state |
census/cohort_id |
cohort surface | cohort/v1/runtime census snapshot |
spec/ref |
registry | jook spec document (jook/v1/spec) |
Snapshot Format
A full jook runtime snapshot matches the shape defined in jook/v1/runtime.json. Key points:
census.memberscontains only participants currently withinfield_radiuscensus.is_staleindicates whether the membership list may be outdatedeffects.activelists the jook's configured ambient effects (not per-member application state)AwarenessStateis not in this surface — it is internal and frame-ephemeral