openvibers/openvibe.design Commits
Rules for 11-13: layers, handles, shown once, no dead bands, glyphs, the wait, the box, AI lines, room summaries (#318)
Changes
@@@ -593,6 +593,42 @@ const RULES = Object.freeze(['Report, Exchange, Compare and the admin panel draw AI and usage numbers with openvibe-shared/ov-metrics.js (tiles, a trend line, ranked bars, percentiles, a split, a sortable table) and say them in its words: 540 ms, $0.0042, 86.0 tok/s, 99.4%. A percentile is the median and the 95th on one scale, with how many calls it rests on. Unknown is a dash, never 0, and a delta says in words whether it got better.','2026-11-12', 'The owner asked for tokens, caching, model, time and cost per task, tokens per second and time to first token on Report, Compare and Exchange, with the designs reused through openvibe.design. Three sites drawing their own charts would show one number three ways.',[{ label: 'Metrics', href: '/components/metrics' }], ['openvibe-shared test: ov-metrics-chrome', 'OpenVibe.Design test: changes']),++ R('opens-from-its-button', 'building', 'What opens from a button is anchored to it, on top of everything, inside the screen.',++ 'A menu, a pop-over or a settings panel opens with openvibe-shared OVSurfaces.anchor (or OVSurfaces.popover with its menu): in the browser\'s top layer, so no clipped layout, rail or stacking context hides it; beside its button, on the side with room, shifted to stay inside the visible screen (the keyboard and a pinch zoom count), never taller than that room; placed again on a scroll, a resize or a turn of the phone. A long one is a sheet at the bottom of a phone. A site never places its own.',++ '2026-11-13', 'The owner, watching a live stream on a phone, 11-13: "the little three dots doesn\'t actually open a menu, at least not on mobile … the same unified cross-site shared UI system". The live layout clipped it.',++ [], ['openvibe-shared test: surfaces-chrome', 'OpenVibe.Live test: chat-sheet-fill']),++ R('a-tucked-box-is-a-handle', 'phone', 'A box floating over the page tucks into a small handle at the edge, and grows as wide as the window.',++ 'Thrown past a side, a picture-in-picture or a floating panel folds into a 30 × 64 px handle (34 × 72 to a finger) at that edge, its picture still going behind the glass; a tap opens it where it was, a drag up or down slides it along the side, a pull brings it out under the finger. It grows to the window\'s width: past what its frame holds it lifts over the page and keeps growing. Each device keeps its own place, and a turn of the phone or a keyboard puts it back on the screen.',++ '2026-11-13', 'The owner, 11-13: "a small button that lets you pop it in and out … aware where it was … doesn\'t allow it to be off screen" and "I can\'t even resize it bigger than it is on mobile". A tucked box left a strip as tall as itself hanging off the screen.',++ [], ['openvibe-shared test: ov-float-chrome']),++ R('shown-once', 'look', 'Nothing is shown twice: one copy of a picture, one button for a job.',++ 'A picture popped out into the browser\'s own window leaves the page until that window closes. A message box holds what goes into a message (the site\'s emote and emoji picker in its row; extras such as a GIF in its + sheet) and the row under it holds only the place\'s own actions (sound, coins, tips); the + sheet never repeats a tool the row shows.',++ '2026-11-13', 'The owner, 11-13: "it just goes twice like this and ugly" (a pop-out) and "you have a duplicated emoji button … use the built-in modular composer shared one".',++ [], ['OpenVibe.Live test: chat-box-and-ticker', 'OpenVibe.Live test: pip-camera-slot', 'openvibe-shared test: composer-v2-chrome']),++ R('no-dead-bands', 'phone', 'A full-screen layout reaches the bottom of the screen; room is kept only for what is shown.',++ 'A layout that fills the screen (a live channel\'s chat, a robot\'s panel, an app view) ends at the bottom of the visible screen: it subtracts a bar\'s height only while that bar is on screen, and the page adds no bottom padding under it. A browser check measures it: the last box\'s bottom against the screen\'s, and no band of nothing at the bottom of a full-screen layout.',++ '2026-11-13', 'The owner\'s phone, 11-13: "empty space at the bottom … should be using the full size, like full viewport". The chat ended at 804 of 844 px: a hidden tabs bar still took 40 px and the page kept 32 px of padding.',++ [], ['OpenVibe.Live test: chat-sheet-fill']),++ R('glyphs-sit-in-their-tiles', 'look', 'A glyph sits inside its tile with room around it, and every tab\'s glyph fills the same box.',++ 'An OV glyph draws at 100% of its element, so a tile sizes the glyph inside it: 62% of the tile. Tab icons share one 20 px box and are sized to look the same weight (a wide, short glyph such as the robot a size up). AI is the sparkles, never a wand. A sheet folds down with the set\'s solid chevron, beside solid glyphs.',++ '2026-11-13', 'The owner, 11-13: "the icons … need a tiny bit of padding", "what is this AI summary icon … it looks wrong" and "the robot icon is so much smaller … inconsistent".',++ [], ['OpenVibe.Live test: chat-box-and-ticker', 'OpenVibe.Live test: chat-sheet-fill']),++ R('the-wait-keeps-the-logo', 'motion', 'Working, the mark is still the logo: its own ring with a bright arc running round it.',++ 'The busy mark keeps the O at its full weight as a faint track while a bright arc runs round it, growing as it goes and drawing in behind; the V lifts a little in time and the glow behind breathes, one 1.25 s rhythm. Nothing is drawn thinner than the logo, and the V stays level with the O.',++ '2026-11-13', 'The owner, 11-13: "improve the O so it actually looks like the original, aligned properly … a better cool animation". Eight thinner dots sat inside the ring\'s line and the V bobbed off it.',++ [], ['openvibe-shared test: ov-mark']),++ R('context-lives-in-the-box', 'look', 'What a message answers, quotes or changes is a part of the box, and Send is quiet until there is something to send.',++ 'Replying, quoting, editing or answering a file is one bar inside the message box, above the words, with a rail of the accent at its start (editing in its own colour) and its own ×; one at a time, from the box\'s API (reply, edit, bar). Send with nothing to send is a quiet outline round its arrow; with something to send it fills with the accent on a spring.',++ '2026-11-13', 'The owner, 11-13: "improve the composer so that it can support … a replying to area or different content above … more connected to the actual composer, and improve the send button".',++ [], ['openvibe-shared test: composer-bar-send', 'OpenVibe.Live test: chat-box-and-ticker']),++ R('ai-lines-lead-with-the-vibe', 'words', 'An AI line about a room says its vibe first, then the specifics, never counts; an old one steps aside.',++ 'The first sentence is the room\'s mood and what it is about, in a few words; the second who is driving the talk and what was decided or asked. Counts are the page\'s to show. A one-line strip reads like a ticker: a sentence at a time, a long one panning to its end, still under a pointer. A read older than twelve hours is not shown as now.',++ '2026-11-13', 'The owner, 11-13: "300 messages from 26 chatters in 12 rooms … that\'s like a dumb AI overview. It doesn\'t even say the general kind of vibe … make it scroll … click it to expand". That line was three days old.',++ [], ['OpenVibe.AI test: live-templates', 'OpenVibe.Live test: chat-box-and-ticker']),++ R('a-room-reads-its-room', 'data', 'A room\'s summary reads its public messages, minus people who turned AI off; a summary of a person needs their yes.',++ 'Opt-in is for training, public datasets, faces, looks and apps. A room\'s summary of its public messages, shown back to that room, is none of those (as the Rundown\'s write-ups of what streamers said are not): it reads every message in its window except from people who turned "leave my chat out of AI" on, and reads nobody if it cannot read that switch. A profile of one person still asks Network for their consent. Private rooms are off unless their people turn it on.',++ '2026-11-13', 'The room summaries read only people who had allowed AI training, so they read nobody and Global showed a three-day-old line; the owner\'s 10-31 rule names what needs a yes.',++ [], ['OpenVibe.Chat test: chat-ai', 'OpenVibe.Chat test: room-insight-rooms']),]);// The register's order is the rule's number: a person can cite "rule 7" and a link can carry it.
@@ -593,6 +593,42 @@ const RULES = Object.freeze([
@@ -593,6 +593,42 @@ const RULES = Object.freeze([
'Report, Exchange, Compare and the admin panel draw AI and usage numbers with openvibe-shared/ov-metrics.js (tiles, a trend line, ranked bars, percentiles, a split, a sortable table) and say them in its words: 540 ms, $0.0042, 86.0 tok/s, 99.4%. A percentile is the median and the 95th on one scale, with how many calls it rests on. Unknown is a dash, never 0, and a delta says in words whether it got better.',
'Report, Exchange, Compare and the admin panel draw AI and usage numbers with openvibe-shared/ov-metrics.js (tiles, a trend line, ranked bars, percentiles, a split, a sortable table) and say them in its words: 540 ms, $0.0042, 86.0 tok/s, 99.4%. A percentile is the median and the 95th on one scale, with how many calls it rests on. Unknown is a dash, never 0, and a delta says in words whether it got better.',
'2026-11-12', 'The owner asked for tokens, caching, model, time and cost per task, tokens per second and time to first token on Report, Compare and Exchange, with the designs reused through openvibe.design. Three sites drawing their own charts would show one number three ways.',
'2026-11-12', 'The owner asked for tokens, caching, model, time and cost per task, tokens per second and time to first token on Report, Compare and Exchange, with the designs reused through openvibe.design. Three sites drawing their own charts would show one number three ways.',
[{ label: 'Metrics', href: '/components/metrics' }], ['openvibe-shared test: ov-metrics-chrome', 'OpenVibe.Design test: changes']),
[{ label: 'Metrics', href: '/components/metrics' }], ['openvibe-shared test: ov-metrics-chrome', 'OpenVibe.Design test: changes']),
+ R('opens-from-its-button', 'building', 'What opens from a button is anchored to it, on top of everything, inside the screen.',
+ 'A menu, a pop-over or a settings panel opens with openvibe-shared OVSurfaces.anchor (or OVSurfaces.popover with its menu): in the browser\'s top layer, so no clipped layout, rail or stacking context hides it; beside its button, on the side with room, shifted to stay inside the visible screen (the keyboard and a pinch zoom count), never taller than that room; placed again on a scroll, a resize or a turn of the phone. A long one is a sheet at the bottom of a phone. A site never places its own.',
+ '2026-11-13', 'The owner, watching a live stream on a phone, 11-13: "the little three dots doesn\'t actually open a menu, at least not on mobile … the same unified cross-site shared UI system". The live layout clipped it.',
+ [], ['openvibe-shared test: surfaces-chrome', 'OpenVibe.Live test: chat-sheet-fill']),
+ R('a-tucked-box-is-a-handle', 'phone', 'A box floating over the page tucks into a small handle at the edge, and grows as wide as the window.',
+ 'Thrown past a side, a picture-in-picture or a floating panel folds into a 30 × 64 px handle (34 × 72 to a finger) at that edge, its picture still going behind the glass; a tap opens it where it was, a drag up or down slides it along the side, a pull brings it out under the finger. It grows to the window\'s width: past what its frame holds it lifts over the page and keeps growing. Each device keeps its own place, and a turn of the phone or a keyboard puts it back on the screen.',
+ '2026-11-13', 'The owner, 11-13: "a small button that lets you pop it in and out … aware where it was … doesn\'t allow it to be off screen" and "I can\'t even resize it bigger than it is on mobile". A tucked box left a strip as tall as itself hanging off the screen.',
+ [], ['openvibe-shared test: ov-float-chrome']),
+ R('shown-once', 'look', 'Nothing is shown twice: one copy of a picture, one button for a job.',
+ 'A picture popped out into the browser\'s own window leaves the page until that window closes. A message box holds what goes into a message (the site\'s emote and emoji picker in its row; extras such as a GIF in its + sheet) and the row under it holds only the place\'s own actions (sound, coins, tips); the + sheet never repeats a tool the row shows.',
+ '2026-11-13', 'The owner, 11-13: "it just goes twice like this and ugly" (a pop-out) and "you have a duplicated emoji button … use the built-in modular composer shared one".',
+ [], ['OpenVibe.Live test: chat-box-and-ticker', 'OpenVibe.Live test: pip-camera-slot', 'openvibe-shared test: composer-v2-chrome']),
+ R('no-dead-bands', 'phone', 'A full-screen layout reaches the bottom of the screen; room is kept only for what is shown.',
+ 'A layout that fills the screen (a live channel\'s chat, a robot\'s panel, an app view) ends at the bottom of the visible screen: it subtracts a bar\'s height only while that bar is on screen, and the page adds no bottom padding under it. A browser check measures it: the last box\'s bottom against the screen\'s, and no band of nothing at the bottom of a full-screen layout.',
+ '2026-11-13', 'The owner\'s phone, 11-13: "empty space at the bottom … should be using the full size, like full viewport". The chat ended at 804 of 844 px: a hidden tabs bar still took 40 px and the page kept 32 px of padding.',
+ [], ['OpenVibe.Live test: chat-sheet-fill']),
+ R('glyphs-sit-in-their-tiles', 'look', 'A glyph sits inside its tile with room around it, and every tab\'s glyph fills the same box.',
+ 'An OV glyph draws at 100% of its element, so a tile sizes the glyph inside it: 62% of the tile. Tab icons share one 20 px box and are sized to look the same weight (a wide, short glyph such as the robot a size up). AI is the sparkles, never a wand. A sheet folds down with the set\'s solid chevron, beside solid glyphs.',
+ '2026-11-13', 'The owner, 11-13: "the icons … need a tiny bit of padding", "what is this AI summary icon … it looks wrong" and "the robot icon is so much smaller … inconsistent".',
+ [], ['OpenVibe.Live test: chat-box-and-ticker', 'OpenVibe.Live test: chat-sheet-fill']),
+ R('the-wait-keeps-the-logo', 'motion', 'Working, the mark is still the logo: its own ring with a bright arc running round it.',
+ 'The busy mark keeps the O at its full weight as a faint track while a bright arc runs round it, growing as it goes and drawing in behind; the V lifts a little in time and the glow behind breathes, one 1.25 s rhythm. Nothing is drawn thinner than the logo, and the V stays level with the O.',
+ '2026-11-13', 'The owner, 11-13: "improve the O so it actually looks like the original, aligned properly … a better cool animation". Eight thinner dots sat inside the ring\'s line and the V bobbed off it.',
+ [], ['openvibe-shared test: ov-mark']),
+ R('context-lives-in-the-box', 'look', 'What a message answers, quotes or changes is a part of the box, and Send is quiet until there is something to send.',
+ 'Replying, quoting, editing or answering a file is one bar inside the message box, above the words, with a rail of the accent at its start (editing in its own colour) and its own ×; one at a time, from the box\'s API (reply, edit, bar). Send with nothing to send is a quiet outline round its arrow; with something to send it fills with the accent on a spring.',
+ '2026-11-13', 'The owner, 11-13: "improve the composer so that it can support … a replying to area or different content above … more connected to the actual composer, and improve the send button".',
+ [], ['openvibe-shared test: composer-bar-send', 'OpenVibe.Live test: chat-box-and-ticker']),
+ R('ai-lines-lead-with-the-vibe', 'words', 'An AI line about a room says its vibe first, then the specifics, never counts; an old one steps aside.',
+ 'The first sentence is the room\'s mood and what it is about, in a few words; the second who is driving the talk and what was decided or asked. Counts are the page\'s to show. A one-line strip reads like a ticker: a sentence at a time, a long one panning to its end, still under a pointer. A read older than twelve hours is not shown as now.',
+ '2026-11-13', 'The owner, 11-13: "300 messages from 26 chatters in 12 rooms … that\'s like a dumb AI overview. It doesn\'t even say the general kind of vibe … make it scroll … click it to expand". That line was three days old.',
+ [], ['OpenVibe.AI test: live-templates', 'OpenVibe.Live test: chat-box-and-ticker']),
+ R('a-room-reads-its-room', 'data', 'A room\'s summary reads its public messages, minus people who turned AI off; a summary of a person needs their yes.',
+ 'Opt-in is for training, public datasets, faces, looks and apps. A room\'s summary of its public messages, shown back to that room, is none of those (as the Rundown\'s write-ups of what streamers said are not): it reads every message in its window except from people who turned "leave my chat out of AI" on, and reads nobody if it cannot read that switch. A profile of one person still asks Network for their consent. Private rooms are off unless their people turn it on.',
+ '2026-11-13', 'The room summaries read only people who had allowed AI training, so they read nobody and Global showed a three-day-old line; the owner\'s 10-31 rule names what needs a yes.',
+ [], ['OpenVibe.Chat test: chat-ai', 'OpenVibe.Chat test: room-insight-rooms']),
]);
]);
// The register's order is the rule's number: a person can cite "rule 7" and a link can carry it.
// The register's order is the rule's number: a person can cite "rule 7" and a link can carry it.