WORK-377
Setting up your dashboard 0 entities found · 7/33 branches scanned
ID:WORK-377Status:done

Media-guest interaction model: presentational default + capability flag + fallbacks

Define media guests as presentational by default with an explicit interactive capability and a static fallback per interactive guest.

Priority:lowComplexity:moderateMilestone:v0.20.0Source:SPEC-090

Criteria completion

Criteria completion: 2 of 2 (100%) checked; tracking started on Jun 9, no incremental history yet0%25%50%75%100%Jun 9Jun 15

Tracking started Jun 9 — check back for trends.

Acceptance Criteria

  • Media-slot guests are presentational by default; interactivity is an explicit guest capability (codegroup/tabs/datatable/form/map/sandbox/juxtapose/declared).
  • Each interactive guest defines a static presentational fallback (e.g. codegroup→default tab shown statically, tabs→first panel, map→snapshot, juxtapose→fixed split).

Approach

Behaviour-driven runes in @refrakt-md/behaviors. SPEC-090 §1.

References

  • SPEC-090

Resolution

Completed: 2026-06-09

Branch: claude/spec-090-media-guest-posture

What was done

  • packages/transform/src/types.ts — added RuneConfig.interactive?: boolean (interaction capability flag).
  • packages/runes/src/config.tsinteractive: true on CodeGroup, TabGroup, DataTable, Form, Juxtapose, Sandbox; plugins/places/src/config.ts — on Map. The engine now knows which media guests are interactive.
  • Static fallback: a demoted guest is not JS-enhanced (packages/behaviors/src/index.ts skips any [data-rune] inside a [data-guest-posture="presentational"] zone), so it renders its non-enhanced static form. packages/lumina/styles/dimensions/guest-posture.css hides the (statically-rendered but now inert) tab strip on demoted codegroup/tabs so panels read as plain stacked content; guests whose chrome is JS-injected (datatable toolbar, map controls) simply never appear.

Notes

  • The fallback is the guest's progressive-enhancement static render, made non-interactive — not a bespoke per-guest variant. This keeps the model open: any guest that declares interactive participates.