Repository navigation
Releases
Releases · WHISTLER-Arc/Greg
Greg v1.7.1
Changed
- Greg arrives as a zip now. Every release carries a
greg.zipand HACS
downloads that rather than the source archive GitHub generates. What you
install and how you install it are unchanged. The point is that GitHub
counts release files and does not count source archives, which is the whole
reason Greg has never had a download number beside his name in HACS while
other integrations do. - The number HACS shows is for the current release only and starts again from
nothing every time he is updated, so it says how much traffic one version
got rather than how many people have him. There is a running total on the
README for the other question. That one only goes up. - Both counts start from this release. Nothing before it was ever counted and
nothing can go back and count it.
Internal
- The release workflow builds the zip and refuses to publish if its layout is
wrong, and the ordinary checks build it on every push for the same reason. A
zip one level too deep would install to the right place with everything
inside it in the wrong one, which produces a perfectly green build and a Greg
that does not load. .github/scripts/downloads.pyprints the all-time total with a line per
release, for when the badge is not enough.
Greg v1.7.1b1
Test build of 1.7.1. Not for general use.
What it will contain when it ships:
Changed
- Greg arrives as a zip now. Every release carries a
greg.zipand HACS
downloads that rather than the source archive GitHub generates. What you
install and how you install it are unchanged. The point is that GitHub
counts release files and does not count source archives, which is the whole
reason Greg has never had a download number beside his name in HACS while
other integrations do. - The number HACS shows is for the current release only and starts again from
nothing every time he is updated, so it says how much traffic one version
got rather than how many people have him. There is a running total on the
README for the other question. That one only goes up. - Both counts start from this release. Nothing before it was ever counted and
nothing can go back and count it.
Internal
- The release workflow builds the zip and refuses to publish if its layout is
wrong, and the ordinary checks build it on every push for the same reason. A
zip one level too deep would install to the right place with everything
inside it in the wrong one, which produces a perfectly green build and a Greg
that does not load. .github/scripts/downloads.pyprints the all-time total with a line per
release, for when the badge is not enough.
Greg v1.7.0
Added
- The escalation ladder. The three thresholds are one track with three
handles in Greg's panel, in the mood colours the card already uses. The
handles cannot cross, so chaos sitting below medium, which made him skip a
mood for no visible reason, is no longer something that can be set. - Timing in the panel too, as three numbers you type over rather than
three more full-width sliders: how long until he calms down, how long until
he notices the silence, and how often the existential crises come round. - All six are still in advanced settings as well. Nothing has moved out from
under anybody, and if they end up crossed there Greg puts them in order. - Line backups. Export to a file writes everything you have written to
greg-lines-<date>.txt. Import from a file reads one back, asking first
whether to add the file's lines to yours or replace yours with them, and
saying how many lines a replace would throw away. - The file is plain text:
## en,### soft, and a line per bullet. Anything
else in it is ignored, so you can also write a batch of lines in a text
editor and import them, and a file somebody sends you can be pasted straight
into a GitHub issue. greg.import_linesdoes the same from an automation. One call rather than
one per category, so a restore is a single reload.greg.set_optionsnow accepts the thresholds and the timing values.- The panel says when Greg is not running. An integration that failed to
start leaves the panel rendering perfectly with nothing in it: no face, empty
dropdowns, no version. It now says so, and points at the log.
Fixed
- Custom Piper voices were ignored. A
.onnxinstalled by hand is not in
the list Wyoming advertises, and Greg refused any name he could not find in
that list, so a custom voice never played while the same name worked fine in
an automation. He now asks for it and notes in the log that he did not
recognise it. Reported by
rujelus22 on the forum
thread. - An
en_USvoice was checked against the wrong locale. Greg's codes are
bare, so English fell through to whichever locale sorted first, usually
en_GB, and anen_USvoice was then not recognised. A voice now decides
the locale, as long as the engine offers it and it speaks the language Greg
is speaking. Same report. - A voice name that is right apart from its accents or its capitals is now
corrected to the engine's own spelling rather than refused, which is the
pt_PT-tugao-mediumtrap from 1.5.5 fixed rather than merely explained. - The existential interval defaulted to 37 minutes in one file and 42 in
another, so a fresh install that never opened the advanced dialog ran five
minutes fast. - Thresholds stored in the wrong order, which the dialog has always allowed,
are put back in order wherever they are read, so an install that has been
quietly skipping a mood for months stops doing it.
Internal
- Tests live in the repo now, and run in CI:
python -m unittest discover -s tests, plusnode tests/ladder.test.mjsandnode tests/backup.test.mjs,
which run the real panel in a stubbed DOM. No pytest, no Home Assistant. tests/preview.htmlopens Greg's panel against a fake Home Assistant, for
looking at a change without an install to hand.- pyflakes runs in CI alongside
compileall, which proves the syntax is
valid but not that every name used is imported.
Greg v1.7.0b2
Test build of 1.7.0. Not for general use.
What it will contain when it ships:
Added
- The escalation ladder. The three thresholds are one track with three
handles in Greg's panel, in the mood colours the card already uses. The
handles cannot cross, so chaos sitting below medium, which made him skip a
mood for no visible reason, is no longer something that can be set. - Timing in the panel too, as three numbers you type over rather than
three more full-width sliders: how long until he calms down, how long until
he notices the silence, and how often the existential crises come round. - All six are still in advanced settings as well. Nothing has moved out from
under anybody, and if they end up crossed there Greg puts them in order. - Line backups. Export to a file writes everything you have written to
greg-lines-<date>.txt. Import from a file reads one back, asking first
whether to add the file's lines to yours or replace yours with them, and
saying how many lines a replace would throw away. - The file is plain text:
## en,### soft, and a line per bullet. Anything
else in it is ignored, so you can also write a batch of lines in a text
editor and import them, and a file somebody sends you can be pasted straight
into a GitHub issue. greg.import_linesdoes the same from an automation. One call rather than
one per category, so a restore is a single reload.greg.set_optionsnow accepts the thresholds and the timing values.- The panel says when Greg is not running. An integration that failed to
start leaves the panel rendering perfectly with nothing in it: no face, empty
dropdowns, no version. It now says so, and points at the log.
Fixed
- Custom Piper voices were ignored. A
.onnxinstalled by hand is not in
the list Wyoming advertises, and Greg refused any name he could not find in
that list, so a custom voice never played while the same name worked fine in
an automation. He now asks for it and notes in the log that he did not
recognise it. Reported by
rujelus22 on the forum
thread. - An
en_USvoice was checked against the wrong locale. Greg's codes are
bare, so English fell through to whichever locale sorted first, usually
en_GB, and anen_USvoice was then not recognised. A voice now decides
the locale, as long as the engine offers it and it speaks the language Greg
is speaking. Same report. - A voice name that is right apart from its accents or its capitals is now
corrected to the engine's own spelling rather than refused, which is the
pt_PT-tugao-mediumtrap from 1.5.5 fixed rather than merely explained. - The existential interval defaulted to 37 minutes in one file and 42 in
another, so a fresh install that never opened the advanced dialog ran five
minutes fast. - Thresholds stored in the wrong order, which the dialog has always allowed,
are put back in order wherever they are read, so an install that has been
quietly skipping a mood for months stops doing it.
Internal
- Tests live in the repo now, and run in CI:
python -m unittest discover -s tests, plusnode tests/ladder.test.mjsandnode tests/backup.test.mjs,
which run the real panel in a stubbed DOM. No pytest, no Home Assistant. tests/preview.htmlopens Greg's panel against a fake Home Assistant, for
looking at a change without an install to hand.
Greg v1.7.0b1
Test build of 1.7.0. Not for general use.
What it will contain when it ships:
Added
- The escalation ladder. The three thresholds are one track with three
handles in Greg's panel, in the mood colours the card already uses. The
handles cannot cross, so chaos sitting below medium, which made him skip a
mood for no visible reason, is no longer something that can be set. - Timing in the panel too, as three numbers you type over rather than
three more full-width sliders: how long until he calms down, how long until
he notices the silence, and how often the existential crises come round. - All six are still in advanced settings as well. Nothing has moved out from
under anybody, and if they end up crossed there Greg puts them in order. - Line backups. Export to a file writes everything you have written to
greg-lines-<date>.txt. Import from a file reads one back, asking first
whether to add the file's lines to yours or replace yours with them, and
saying how many lines a replace would throw away. - The file is plain text:
## en,### soft, and a line per bullet. Anything
else in it is ignored, so you can also write a batch of lines in a text
editor and import them, and a file somebody sends you can be pasted straight
into a GitHub issue. greg.import_linesdoes the same from an automation. One call rather than
one per category, so a restore is a single reload.greg.set_optionsnow accepts the thresholds and the timing values.
Fixed
- Custom Piper voices were ignored. A
.onnxinstalled by hand is not in
the list Wyoming advertises, and Greg refused any name he could not find in
that list, so a custom voice never played while the same name worked fine in
an automation. He now asks for it and notes in the log that he did not
recognise it. Reported by
rujelus22 on the forum
thread. - An
en_USvoice was checked against the wrong locale. Greg's codes are
bare, so English fell through to whichever locale sorted first, usually
en_GB, and anen_USvoice was then not recognised. A voice now decides
the locale, as long as the engine offers it and it speaks the language Greg
is speaking. Same report. - A voice name that is right apart from its accents or its capitals is now
corrected to the engine's own spelling rather than refused, which is the
pt_PT-tugao-mediumtrap from 1.5.5 fixed rather than merely explained. - The existential interval defaulted to 37 minutes in one file and 42 in
another, so a fresh install that never opened the advanced dialog ran five
minutes fast. - Thresholds stored in the wrong order, which the dialog has always allowed,
are put back in order wherever they are read, so an install that has been
quietly skipping a mood for months stops doing it.
Internal
- Tests live in the repo now, and run in CI:
python -m unittest discover -s tests, plusnode tests/ladder.test.mjsandnode tests/backup.test.mjs,
which run the real panel in a stubbed DOM. No pytest, no Home Assistant. tests/preview.htmlopens Greg's panel against a fake Home Assistant, for
looking at a change without an install to hand.
Greg v1.6.5
Added
- Greg on your phone. Not a new ability, an explanation and a shortcut. He
has always spoken through anymedia_player, so a phone only needs something
on it for him to speak through. The README now covers the three ways to do
that, browser_mod being the least invasive, along with the four steps that
fail silently if you miss them. - Speak on this device. When the browser showing Greg's panel has a
browser_mod player of its own, a button appears under the Speaker dropdown
that switches him to it in one tap. - Greg says why he was silent. He checks his speaker before speaking now
and reports it in the panel when he cannot: a speaker that has been renamed,
one that has gone unavailable, or a browser refusing to play audio until
somebody taps the page. All of those used to leave him reporting a line he
never delivered. speech_problemattribute on the mood sensor, carrying the same thing.- Conditions. Greg can now consult the same core conditions the rest of
your automations use, rather than only his own clock. Rows of entity /
isoris not/ state in his panel, all of which have to hold or he keeps
quiet. Requested by
euf0ria on the forum thread. - Conditions sit alongside quiet hours rather than replacing them, so anyone
who has not written any notices no change at all. - Each row shows the entity's current state, and warns when what you have typed
can never match it.input_boolean.x is falsenever fires, because an
input_booleanisonoroff. - The panel says which condition is keeping him quiet, rather than leaving you
to work out why a poke did nothing. blockedandblocked_byattributes on the mood sensor.quiet_hoursstill
means only the clock, so automations reading it are unaffected.greg.set_optionstakes aconditionslist, so the same thing can be
scripted.
Changed
- Quiet hours and conditions have their own card, "When Greg keeps quiet",
below the mood card. They answer the same question and now live in the same
place, with room for as many conditions as you want and its own Save. The
settings block carries a summary and a link down to it. - The card says what is actually holding him, so a poke that does nothing has
a visible reason. - The panel's settings are one block again. They were rendered twice, once
in the cog popover and once in the right-hand column, and kept in step by
hand. Now it is a single block that CSS moves: the popover below 1000px, the
column above. - Settings are grouped into what he listens to, how he speaks, and when he
keeps quiet, rather than twelve fields in a row. - Wide screens are two columns rather than three. Greg and his last line stack
together; settings gets a column of its own. - One breakpoint fewer. Between 720 and 1000 pixels you now get the phone
layout at a wider size instead of a two-column arrangement nobody asked for. - Uninstall is a card-level action rather than the last thing in a popover you
could not reach the bottom of. - The lines editor looks like the rest of the panel now. It was built
before everything else settled on a look and had kept its own: blue buttons
where the rest of Greg is green, pill-shaped controls where the rest is
softly rounded, and outlined rows where every other list is filled. Nothing
moved, it just stopped looking like it came from somewhere else.
Fixed
- The speaker dropdown offered entities that were not there. It listed
every entity in the domain regardless of state, and several of them can share
a name, so picking the right one was guesswork. Dead entities are gone now
and duplicates carry their entity id. Whatever is currently saved stays in the
list even when unavailable: dropping it would leave the select on its first
option, so applying an unrelated setting could quietly move Greg onto a
different speaker. (#7) - The settings closed on every touch below 1000px. The click-outside
handler asked whether the click was inside the panel usingcontains, which
cannot see into a shadow DOM: every click looked like it was outside, so the
settings shut the moment you touched one. (#5) - The settings could not be scrolled, so on a short screen the bottom of
them was unreachable. They now have their own scroll and stay inside it. (#5) - The panel leaked one document listener per teardown.
- Greg's options no longer eat his settings. Pressing Submit in Greg's
options replaced the whole stored options rather than merging into them, so
it deleted any lines you had written and any conditions you had set, and
reverted advanced settings changed since install. Present since custom lines
shipped in 1.6.0.
Notes
- browser_mod needs the page open and visible. Android freezes a backgrounded
webview and Greg goes quiet with it, so it suits showing him off rather than
being a permanent speaker. - The Companion app cannot do this on its own. Its TTS notifications use the
phone's own voice, and it registers no Assist satellite, so there is nothing
to push his real voice to. - An entity that is missing, unavailable or unknown does not block Greg. Rename
something and he carries on talking, rather than going quiet for good with
nothing to say why. - Twenty conditions is the cap. That is there to stop a stray automation writing
thousands of rows into the config entry, not because anyone will reach it.
Greg v1.6.5b3
Test build of 1.6.5. Not for general use.
What it will contain when it ships:
Added
- Greg on your phone. Not a new ability, an explanation and a shortcut. He
has always spoken through anymedia_player, so a phone only needs something
on it for him to speak through. The README now covers the three ways to do
that, browser_mod being the least invasive, along with the four steps that
fail silently if you miss them. - Speak on this device. When the browser showing Greg's panel has a
browser_mod player of its own, a button appears under the Speaker dropdown
that switches him to it in one tap. - Greg says why he was silent. He checks his speaker before speaking now
and reports it in the panel when he cannot: a speaker that has been renamed,
one that has gone unavailable, or a browser refusing to play audio until
somebody taps the page. All of those used to leave him reporting a line he
never delivered. speech_problemattribute on the mood sensor, carrying the same thing.- Conditions. Greg can now consult the same core conditions the rest of
your automations use, rather than only his own clock. Rows of entity /
isoris not/ state in his panel, all of which have to hold or he keeps
quiet. Requested by
euf0ria on the forum thread. - Conditions sit alongside quiet hours rather than replacing them, so anyone
who has not written any notices no change at all. - Each row shows the entity's current state, and warns when what you have typed
can never match it.input_boolean.x is falsenever fires, because an
input_booleanisonoroff. - The panel says which condition is keeping him quiet, rather than leaving you
to work out why a poke did nothing. blockedandblocked_byattributes on the mood sensor.quiet_hoursstill
means only the clock, so automations reading it are unaffected.greg.set_optionstakes aconditionslist, so the same thing can be
scripted.
Changed
- Quiet hours and conditions have their own card, "When Greg keeps quiet",
below the mood card. They answer the same question and now live in the same
place, with room for as many conditions as you want and its own Save. The
settings block carries a summary and a link down to it. - The card says what is actually holding him, so a poke that does nothing has
a visible reason. - The panel's settings are one block again. They were rendered twice, once
in the cog popover and once in the right-hand column, and kept in step by
hand. Now it is a single block that CSS moves: the popover below 1000px, the
column above. - Settings are grouped into what he listens to, how he speaks, and when he
keeps quiet, rather than twelve fields in a row. - Wide screens are two columns rather than three. Greg and his last line stack
together; settings gets a column of its own. - One breakpoint fewer. Between 720 and 1000 pixels you now get the phone
layout at a wider size instead of a two-column arrangement nobody asked for. - Uninstall is a card-level action rather than the last thing in a popover you
could not reach the bottom of. - The lines editor looks like the rest of the panel now. It was built
before everything else settled on a look and had kept its own: blue buttons
where the rest of Greg is green, pill-shaped controls where the rest is
softly rounded, and outlined rows where every other list is filled. Nothing
moved, it just stopped looking like it came from somewhere else.
Fixed
- The speaker dropdown offered entities that were not there. It listed
every entity in the domain regardless of state, and several of them can share
a name, so picking the right one was guesswork. Dead entities are gone now
and duplicates carry their entity id. Whatever is currently saved stays in the
list even when unavailable: dropping it would leave the select on its first
option, so applying an unrelated setting could quietly move Greg onto a
different speaker. (#7) - The settings closed on every touch below 1000px. The click-outside
handler asked whether the click was inside the panel usingcontains, which
cannot see into a shadow DOM: every click looked like it was outside, so the
settings shut the moment you touched one. (#5) - The settings could not be scrolled, so on a short screen the bottom of
them was unreachable. They now have their own scroll and stay inside it. (#5) - The panel leaked one document listener per teardown.
- Greg's options no longer eat his settings. Pressing Submit in Greg's
options replaced the whole stored options rather than merging into them, so
it deleted any lines you had written and any conditions you had set, and
reverted advanced settings changed since install. Present since custom lines
shipped in 1.6.0.
Notes
- browser_mod needs the page open and visible. Android freezes a backgrounded
webview and Greg goes quiet with it, so it suits showing him off rather than
being a permanent speaker. - The Companion app cannot do this on its own. Its TTS notifications use the
phone's own voice, and it registers no Assist satellite, so there is nothing
to push his real voice to. - An entity that is missing, unavailable or unknown does not block Greg. Rename
something and he carries on talking, rather than going quiet for good with
nothing to say why. - Twenty conditions is the cap. That is there to stop a stray automation writing
thousands of rows into the config entry, not because anyone will reach it.
Greg v1.6.5b2
Test build of 1.6.5. Not for general use.
What it will contain when it ships:
Added
- Conditions. Greg can now consult the same core conditions the rest of
your automations use, rather than only his own clock. Rows of entity /
isoris not/ state in his panel, all of which have to hold or he keeps
quiet. Requested by
euf0ria on the forum thread. - Conditions sit alongside quiet hours rather than replacing them, so anyone
who has not written any notices no change at all. - Each row shows the entity's current state, and warns when what you have typed
can never match it.input_boolean.x is falsenever fires, because an
input_booleanisonoroff. - The panel says which condition is keeping him quiet, rather than leaving you
to work out why a poke did nothing. blockedandblocked_byattributes on the mood sensor.quiet_hoursstill
means only the clock, so automations reading it are unaffected.greg.set_optionstakes aconditionslist, so the same thing can be
scripted.
Changed
- Quiet hours and conditions have their own card, "When Greg keeps quiet",
below the mood card. They answer the same question and now live in the same
place, with room for as many conditions as you want and its own Save. The
settings block carries a summary and a link down to it. - The card says what is actually holding him, so a poke that does nothing has
a visible reason. - The panel's settings are one block again. They were rendered twice, once
in the cog popover and once in the right-hand column, and kept in step by
hand. Now it is a single block that CSS moves: the popover below 1000px, the
column above. - Settings are grouped into what he listens to, how he speaks, and when he
keeps quiet, rather than twelve fields in a row. - Wide screens are two columns rather than three. Greg and his last line stack
together; settings gets a column of its own. - One breakpoint fewer. Between 720 and 1000 pixels you now get the phone
layout at a wider size instead of a two-column arrangement nobody asked for. - Uninstall is a card-level action rather than the last thing in a popover you
could not reach the bottom of. - The lines editor looks like the rest of the panel now. It was built
before everything else settled on a look and had kept its own: blue buttons
where the rest of Greg is green, pill-shaped controls where the rest is
softly rounded, and outlined rows where every other list is filled. Nothing
moved, it just stopped looking like it came from somewhere else.
Fixed
- The settings closed on every touch below 1000px. The click-outside
handler asked whether the click was inside the panel usingcontains, which
cannot see into a shadow DOM: every click looked like it was outside, so the
settings shut the moment you touched one. (#5) - The settings could not be scrolled, so on a short screen the bottom of
them was unreachable. They now have their own scroll and stay inside it. (#5) - The panel leaked one document listener per teardown.
- Greg's options no longer eat his settings. Pressing Submit in Greg's
options replaced the whole stored options rather than merging into them, so
it deleted any lines you had written and any conditions you had set, and
reverted advanced settings changed since install. Present since custom lines
shipped in 1.6.0.
Notes
- An entity that is missing, unavailable or unknown does not block Greg. Rename
something and he carries on talking, rather than going quiet for good with
nothing to say why. - Twenty conditions is the cap. That is there to stop a stray automation writing
thousands of rows into the config entry, not because anyone will reach it.
Greg v1.6.5b1
Test build of 1.6.5. Not for general use.
What it will contain when it ships:
Added
- Conditions. Greg can now consult the same core conditions the rest of
your automations use, rather than only his own clock. Rows of entity /
isoris not/ state in his panel, all of which have to hold or he keeps
quiet. Requested by
euf0ria on the forum thread. - Conditions sit alongside quiet hours rather than replacing them, so anyone
who has not written any notices no change at all. - Each row shows the entity's current state, and warns when what you have typed
can never match it.input_boolean.x is falsenever fires, because an
input_booleanisonoroff. - The panel says which condition is keeping him quiet, rather than leaving you
to work out why a poke did nothing. blockedandblocked_byattributes on the mood sensor.quiet_hoursstill
means only the clock, so automations reading it are unaffected.greg.set_optionstakes aconditionslist, so the same thing can be
scripted.
Changed
- Quiet hours and conditions have their own card, "When Greg keeps quiet",
below the mood card. They answer the same question and now live in the same
place, with room for as many conditions as you want and its own Save. The
settings block carries a summary and a link down to it. - The card says what is actually holding him, so a poke that does nothing has
a visible reason. - The panel's settings are one block again. They were rendered twice, once
in the cog popover and once in the right-hand column, and kept in step by
hand. Now it is a single block that CSS moves: the popover below 1000px, the
column above. - Settings are grouped into what he listens to, how he speaks, and when he
keeps quiet, rather than twelve fields in a row. - Wide screens are two columns rather than three. Greg and his last line stack
together; settings gets a column of its own. - One breakpoint fewer. Between 720 and 1000 pixels you now get the phone
layout at a wider size instead of a two-column arrangement nobody asked for. - Uninstall is a card-level action rather than the last thing in a popover you
could not reach the bottom of.
Fixed
- The settings closed on every touch below 1000px. The click-outside
handler asked whether the click was inside the panel usingcontains, which
cannot see into a shadow DOM: every click looked like it was outside, so the
settings shut the moment you touched one. (#5) - The settings could not be scrolled, so on a short screen the bottom of
them was unreachable. They now have their own scroll and stay inside it. (#5) - The panel leaked one document listener per teardown.
- Greg's options no longer eat his settings. Pressing Submit in Greg's
options replaced the whole stored options rather than merging into them, so
it deleted any lines you had written and any conditions you had set, and
reverted advanced settings changed since install. Present since custom lines
shipped in 1.6.0.
Notes
- An entity that is missing, unavailable or unknown does not block Greg. Rename
something and he carries on talking, rather than going quiet for good with
nothing to say why. - Twenty conditions is the cap. That is there to stop a stray automation writing
thousands of rows into the config entry, not because anyone will reach it.
Greg v1.6.0
Added
- Write your own lines, in his panel. A Lines you wrote section under the
card, one tab per category. Type a line, press Add, press Save, and Greg says
it. No pull request, no waiting for anyone to approve it. Your table, your
jokes. - Lines belong to the language you wrote them in, so a Dutch one only comes up
while Greg is speaking Dutch. - Use only my lines, for anyone who wants a different table rather than a
slightly expanded one. It never empties a pool: switch it on with nothing
written for a category and that category keeps its fifty built-in lines. - Share the good ones. A button that opens a GitHub issue with your lines
already in it, sorted by category and tagged with the language, and a field
for how you would like crediting. Read it, press submit, done. No account
needed beyond the GitHub one, and nothing is sent anywhere until you press it. - A bot sorts each submission into a checklist and marks anything already in
the pools, so accepted lines can be picked in about a minute and turn up in a
later release with credit. greg.set_linesservice behind the editor, so the same thing can be scripted.
Notes
- Lines live in the config entry, so they survive updates and reinstalls of the
integration, and are removed with it. - Two hundred lines per category is the cap, and three hundred characters per
line. Both are far beyond anything that reads well out loud. - Prefilled GitHub links have a size limit of their own, so a very large batch
is copied to the clipboard with instructions instead of being silently cut in
half. - Reload the page after updating. Greg's panel script is versioned so a new
release is never served from cache, but the panel registers its address once
when Home Assistant starts, and the frontend holds that address until the page
itself is reloaded. So the editor will not appear until you refresh, and a
hard refresh if your browser is being stubborn. This has always been true of
panel changes; it is simply more obvious when the change is a whole new
section rather than a tweak.