Use when changing Stalker or Ministra routes, stores, catalog or series shapes, playback progress, favorites and recent items, EPG, or remote control.
69
84%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
docs/architecture/stalker-portal.mddocs/architecture/stalker-epg.md for ITV EPGdocs/architecture/remote-control.md for live remote controllibs/portal/stalker/feature/src/lib/libs/portal/stalker/data-access/src/lib/libs/shared/interfaces/src/lib/ —
portal-mode predicate, MAC/device-ID utils, auth-failure classifier, cmd
encoder, URL/identity builders. There because Electron main cannot import
renderer libs; never fork them.apps/electron-backend/src/app/events/stalker.events.tslibs/portal/shared/data-access/src/lib/Keep Stalker shape and store rules in Stalker data access. Shared portal UI must remain provider-neutral.
Full vs. simple mode is decided by observed behavior, not URL shape, and read
only through isFullStalkerPortalPlaylist(). Route playlist-backed catalog,
content and playback calls through executeStalkerRequest(). Auth, discovery,
account-profile refresh and row-less collection resolution go direct; read
stalker-request.utils.ts before adding a fifth. Repair is lazy per session,
never eager.
Full portals reuse the persisted idempotent handshake token while its session
fingerprint matches, and ping get_events at the profile cadence (default
120 s). Auth failures are HTTP 200 plus plain text.
Inside Stalker portal code, isStalkerSeriesFlag() is the canonical predicate
and accepts exactly true, 1, and '1'. normalizeStalkerSeriesFlag()
delegates to it and produces the normalized positive marker true or
undefined. The activity normalizer in shared interfaces keeps its
dependency-neutral equivalent for favorites/recent and dashboard
classification. Preserve all three modes: regular /series, VOD with embedded
series[], and lazy Ministra VOD is_series.
Favorites/recent preserve the normalized positive marker and VOD origin so
reopening still uses the correct lazy or embedded mode. Keep quick-start
translation parameters and the naturally ordered season fallback when
season_number is absent.
Lazy episodes use a deterministic tracking ID scoped by parent series,
provider episode, season key, and episode number. legacyTrackingId is only a
guarded compatibility alias. Reconciliation is limited to the current parent
series and optional matching season/episode metadata; an exact scoped row
always wins the resolved display position, while a compatible legacy row may
remain tracked only for cleanup. The scoped ID is the in-memory key. At the
strict migration boundary, save the scoped row before clearing a confirmed
legacy row, and keep legacy progress when the save fails.
Before inline or external handoff, attach parent seriesXtreamId and resolved
season/episode numbers. Keep them on subsequent position writes.
get_short_epg previews when it lacks
"now".radio: 'true', and uses the shared inline audio player.Run:
pnpm nx test shared-interfacespnpm nx test portal-stalker-data-accesspnpm nx test portal-stalker-featureportal-shared-data-access / portal-shared-ui target for
collection or radio behaviorworkspace-dashboard-data-access and
workspace-dashboard-feature test targetsFor the user workflow, run
pnpm nx run web-e2e:e2e-ci--src/stalker.e2e.ts or document the strongest
focused coverage available.
069b8b3
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.