- stream.updateWithIssue: 'Live 24/7: Yes' meant the stream IS 24/7, but it
was assigned straight to isNot247, inverting the label. A 'No' answer was
also ignored because the guard skipped falsy values.
- dataSet.getBoolean: an unanswered dropdown is stored as '' by
parseIssueBody, which getBoolean read as false. Treat it as undefined so
'no answer' means 'leave unchanged' instead of 'Not 24/7'.
- update.addStream: has() is true for an unanswered field, so it produced
isNot247 = true for issues that left the dropdown blank.
- generate: sortBy got five orders for four iteratees.
- 2_streams_edit.yml: restore the '~' reset option dropped from the quality
dropdown when the Label field was removed.
- stream.getLabels: use const to satisfy prefer-const.
Resolved conflict in scripts/models/stream.ts: kept the branch's
labels/isNot247/isGeoBlocked handling in fromPlaylistItem while adopting
master's optional-chaining guards for data.tvg / data.http.
- Normalize the returned path to forward slashes so it matches what
Storage.list() (glob) returns, instead of leaking `\` on Windows.
- Treat the storage root itself as "not inside", so passing a directory
no longer yields an empty path that Storage.load() would open as a dir.
- Extract the containment check into isInsideDirectory() and drop the
redundant isAbsolute(filepath) branch (path.resolve already handles it).
- Restore the repository's CRLF line endings in the nested fixture.