Docs: soundscape grammar follows creature-projection-v2 (O1 no orbit/voice, estate, size)
Neutral participant draws and sounds nothing (no neutral pose). Add estate (human|mind|persona): humans coarse only, Minds/Personas the 7x4 set. Three size buckets with a separate neutral flag; scales not fixed. Cites heimdall-body:follow_up:ratatoskr-creature-projection-v2 (still unreadable from aqua; reconcile owed). Docs only, nothing listened to. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
ab9bcdc6b7
commit
aeae5106fd
1 changed files with 56 additions and 25 deletions
|
|
@ -13,11 +13,13 @@ grammar is drafted without them. Each is a place to reconcile before the doc is
|
|||
treated as in force.
|
||||
|
||||
- `heimdall-body:follow_up:ratatoskr-creature-projection-v2`: `huginn view`
|
||||
from instance `aqua` answers `absent`, and a search of the Heimdall checkout
|
||||
(`GameCult/Heimdall`, forge, 2026-11-02) found no file mentioning it. The
|
||||
constraints taken from the brief are used as stated there: coarse buckets,
|
||||
neutral overrides, activity comes from the Heimdall session. Section 2 is the
|
||||
place that must be reconciled against that follow-up's actual field list.
|
||||
from instance `aqua` still answers `absent` (re-checked 2026-11-02), and a
|
||||
search of the Heimdall checkout found no file mentioning it. Section 2 takes
|
||||
its constraints as relayed in `aqua-body:follow_up:chat-s946-948`: rule O1
|
||||
(a Neutral participant gets no orbit and no voice), the `estate` split,
|
||||
coarse size buckets with a separate neutral flag, activity fed by the
|
||||
Heimdall session. Section 2 must be reconciled against that follow-up's
|
||||
actual field list once it can be read.
|
||||
- `ratatoskr:follow_up:symphony-grammar-harvest-mimir` (Mimir birdsong
|
||||
research): also `absent` from aqua's mind, and `GameCult/Mimir` holds no
|
||||
symphony or voice-separation note (grep of `notes/`, `research/`, `docs/`).
|
||||
|
|
@ -48,27 +50,50 @@ this document, not as a private side channel.
|
|||
|
||||
Typed CultNet/CultCache document, projected member-safe. No private pipe: the
|
||||
frame reaches both consumers by the same subscription, and a consumer that
|
||||
cannot read it plays nothing and draws the neutral pose.
|
||||
cannot read it plays nothing and draws nothing.
|
||||
|
||||
| field | type | values | note |
|
||||
|---|---|---|---|
|
||||
| `mind` | id | instance name | stable identity, not a run/session label |
|
||||
| `kind` | enum, 7 | `Idle`, `Reading`, `Thinking`, `Working`, `Speaking`, `Waiting`, `Alert` | coarse; see below |
|
||||
| `energy` | enum, 4 | `Low`, `Mid`, `High`, `Peak` | coarse bucket of rate/intensity, never a float |
|
||||
| `mind` | id | participant identity | stable identity, not a run/session label; for a human, the member's stable id |
|
||||
| `estate` | enum, 3 | `human`, `mind`, `persona` | selects the vocabulary this participant may use; see below |
|
||||
| `kind` | enum, 7 (humans: reduced) | `Idle`, `Reading`, `Thinking`, `Working`, `Speaking`, `Waiting`, `Alert` | coarse; see below |
|
||||
| `energy` | enum, 4 (humans: 3) | `Low`, `Mid`, `High`, `Peak` | coarse bucket of rate/intensity, never a float; see below |
|
||||
| `size` | enum, 3 | `Small`, `Medium`, `Large` | coarse size bucket for the creature; scale per bucket is not fixed here |
|
||||
| `neutral` | bool | | separate flag; overrides any `size` bucket, see O1 |
|
||||
| `seq` | u32 | monotonic per `mind` | ordering and staleness; consumers drop `seq <= last` |
|
||||
| `at` | time bucket | 1 s resolution | producer's observation time, for the staleness rule |
|
||||
| `override` | enum, 3 | `None`, `Neutral`, `Muted` | see rules O1..O3 |
|
||||
| `override` | enum, 2 | `None`, `Muted` | see rules O2, O3; Neutral is the `neutral` flag, not an override value |
|
||||
|
||||
Why this small: 7 x 4 = 28 states fit in one byte on the wire and in a lookup
|
||||
table on a phone; both consumers map state to behaviour by table, no arithmetic
|
||||
on unbounded values. `kind` and `energy` are orthogonal on purpose, because
|
||||
Why this small: 7 x 4 = 28 states (the Mind/Persona set) fit in one byte on the
|
||||
wire and in a lookup table on a phone; both consumers map state to behaviour by
|
||||
table, no arithmetic on unbounded values. `kind` and `energy` are orthogonal on purpose, because
|
||||
orbit radius/speed wants energy and voice choice wants kind.
|
||||
|
||||
### Estate
|
||||
|
||||
`estate` is set by the producer, never inferred by a consumer, and bounds what
|
||||
the other fields may carry (per
|
||||
`heimdall-body:follow_up:ratatoskr-creature-projection-v2`):
|
||||
|
||||
- **`human`: coarse only.** `energy` is capped at 3 buckets (`Low`, `Mid`,
|
||||
`High`; no `Peak`) and `kind` is a reduced list, a subset of the seven (which
|
||||
subset is a reconcile item against the projection-v2 field list; this
|
||||
document does not guess it). A producer must not emit a finer value for a
|
||||
human; a consumer that receives one clamps it to the coarse set.
|
||||
- **`mind` and `persona`: the finer 7 x 4 set** (all seven `kind`, all four
|
||||
`energy` buckets).
|
||||
|
||||
`size` is three coarse buckets (`Small`, `Medium`, `Large`) for every estate.
|
||||
The scale each bucket draws at is **not fixed by this grammar**: the values
|
||||
0.7 / 1 / 1.4 are Ratatoskr placeholders, owned by the orbit renderer, and may
|
||||
change without touching the frame.
|
||||
|
||||
Rules:
|
||||
|
||||
- **A1. Source.** The frame comes from the Heimdall session and only from it.
|
||||
Neither consumer infers activity from Matrix presence, typing, message
|
||||
traffic, or audio. (The target already notes presence/typing are too coarse
|
||||
traffic, audio, or room membership. Activity is a stub fed by the Heimdall
|
||||
session; being in a room says nothing about being active. (The target already notes presence/typing are too coarse
|
||||
for Minds.) *Reconcile the exact kind list against the projection-v2
|
||||
follow-up before use.*
|
||||
- **A2. Coarse by construction.** There is no continuous field in the frame. A
|
||||
|
|
@ -77,18 +102,20 @@ Rules:
|
|||
- **A3. Member-safe.** The frame carries kind, Mind, time and energy bucket.
|
||||
Never brief text, document ids, claims, or mind contents.
|
||||
- **A4. Missing is Idle.** No frame within the staleness window (section 5, S2)
|
||||
means `Idle`/`Low`, rendered and sounded as nothing. Silence is the default
|
||||
state, not a failure state.
|
||||
means `Idle`/`Low`: no voice, and the orbit at rest. Silence is the default
|
||||
state, not a failure state. Missing is not `neutral`: an absent frame is an
|
||||
idle participant, a `neutral` participant is not drawn at all (O1).
|
||||
|
||||
### Overrides
|
||||
|
||||
- **O1. `Neutral`** (set by the session or by the member's own setting): the
|
||||
Mind renders at the neutral pose and contributes no voice, regardless of
|
||||
`kind`/`energy`. Neutral is not an error; it hides activity, it does not
|
||||
pretend there is none to other consumers.
|
||||
- **O1. `neutral`** (the flag, set by the session or by the member's own
|
||||
setting): a Neutral participant gets **no orbit and no voice**. It draws
|
||||
nothing and sounds nothing; there is no "neutral pose" to render. The flag
|
||||
overrides every `size` bucket, `kind` and `energy`. Neutral is not an error;
|
||||
it hides activity, it does not pretend there is none to other consumers.
|
||||
- **O2. `Muted`**: no voice, orbit unchanged. Lets a listener silence one Mind
|
||||
without hiding its motion.
|
||||
- **O3.** Overrides are data in the frame, set upstream. A consumer never
|
||||
- **O3.** `neutral` and `override` are data in the frame, set upstream. A consumer never
|
||||
applies a local override and then reports it as the Mind's state. (A *user's*
|
||||
own mute/volume is a client preference and stays local; it never rewrites a
|
||||
frame.)
|
||||
|
|
@ -96,13 +123,15 @@ Rules:
|
|||
## 3. Mapping tables (shape only)
|
||||
|
||||
The grammar defines the mapping *axes*, not the values. Each consumer owns one
|
||||
table keyed by the 28 states; the tables are checked in beside this document
|
||||
table keyed by the 28 Mind/Persona states (humans use its coarse subset); the tables are checked in beside this document
|
||||
when values exist.
|
||||
|
||||
| axis | owner | driven by | notes |
|
||||
|---|---|---|---|
|
||||
| orbit **existence** (drawn or not) | orbit renderer | `neutral` | `neutral` set: no orbit |
|
||||
| orbit radius / speed / phase coupling | orbit renderer | `energy`, `kind` | Nibu's side; not specified here |
|
||||
| voice **presence** (sounding or silent) | voice scheduler | `kind` | `Idle`, `Waiting` default silent |
|
||||
| creature scale | orbit renderer | `size` | per-bucket scales are renderer placeholders, not fixed here |
|
||||
| voice **presence** (sounding or silent) | voice scheduler | `neutral`, `kind` | `neutral` set: no voice, regardless of `kind`; `Idle`, `Waiting` default silent |
|
||||
| voice **density** (events per window) | voice scheduler | `energy` | capped, section 5 |
|
||||
| voice **role** (lead / support / texture) | voice scheduler | `kind` | role, not instrument |
|
||||
| voice **identity** (which instrument) | voice scheduler | `mind` | never `kind`; section 4 |
|
||||
|
|
@ -187,7 +216,8 @@ allocation, or a lock.
|
|||
renderer's pause (the target already pauses the background when hidden). On
|
||||
resume, S1/S2 apply; there is no catch-up burst.
|
||||
- **S6. Failure is silent.** No frame source, a dead scheduler, a refused
|
||||
autoplay, or a full queue all produce silence and neutral pose. Nothing
|
||||
autoplay, or a full queue all produce silence, with the orbit at rest. A
|
||||
failure is not a `neutral` participant and does not remove the creature. Nothing
|
||||
retries, alerts, or alters the frame source.
|
||||
|
||||
## 6. What this grammar does not decide
|
||||
|
|
@ -204,7 +234,8 @@ allocation, or a lock.
|
|||
|
||||
None run. To be done before the grammar leaves draft:
|
||||
|
||||
1. Reconcile section 2 with `heimdall-body:follow_up:ratatoskr-creature-projection-v2`.
|
||||
1. Reconcile section 2 with `heimdall-body:follow_up:ratatoskr-creature-projection-v2`
|
||||
(field list, the reduced human `kind` subset, the size and neutral fields).
|
||||
2. Reconcile section 4 with the Mimir harvest.
|
||||
3. Round-trip the frame as a CultCache document and check the size claim (one
|
||||
byte per state, 28 states).
|
||||
|
|
|
|||
Loading…
Reference in a new issue