mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-08 09:01:03 -08:00
* docs(agents): compact root guidance and preserve task-specific knowledge * fix(agents): parse guidance navigation with Markdown tokens * fix(agents): validate generic literal repository paths * fix(agents): distinguish code symbols and shortcut images * fix(agents): recognize SCSS filename literals * fix(agents): handle fenced imports and encoded paths * fix(agents): parse prose and rendered HTML anchors * fix(agents): validate rendered HTML navigation * fix(agents): use GitHub-compatible heading slugs * fix(agents): require standalone top-level Claude import * fix(agents): exclude HTML-contained guidance imports * fix(agents): handle image fragments and quoted imports * fix(agents): validate visible HTML and image source sets * fix(agents): recognize package scopes and route source work * fix(agents): parse JSONC and constrain package exemptions * fix(agents): decode link entities and allow package subpaths * fix(agents): route source work and check extensionless files * fix(agents): support package versions and source fragments * fix(agents): accept qualified package prose * fix(agents): retain rendered context for Markdown references * fix(agents): validate visible headings and spaced paths * fix(agents): validate media and hyphenated literal paths * fix(agents): decode full HTML entities and media assets * fix(agents): recognize possessive package mentions * fix(agents): validate extensionless imports and version comparators * fix(agents): retain visible backticks and explicit path punctuation * fix(agents): validate image-map navigation targets * fix(agents): count all Markdown line endings in budgets * fix(agents): delimit package prose at Unicode punctuation * fix(agents): normalize punctuation for extensionless imports * fix(agents): preserve filenames across prose punctuation * fix(agents): validate iframe document references * fix(agents): inspect document suffix before URL fragments * fix(agents): unify Markdown suffix and encoded import guards * fix(agents): handle wildcard versions and alternate documents * fix(agents): validate document formats and trim HTML URLs * fix(agents): cover document families and guidance basenames * fix(agents): require files for media references * fix(agents): preserve block boundaries and validate embeds * fix(agents): normalize internal HTML URL whitespace * fix(agents): reject empty media and ignore URL at-signs * fix(agents): validate srcdoc references and empty srcset * fix(agents): honor HTML bases and preserve adjacent imports * fix(agents): convert base file URLs to native paths * fix(agents): preserve imports after bare URL punctuation * fix(agents): exclude opaque URI prose from import scans * fix(agents): keep import tokens outside URI scheme matches * fix(agents): restrict opaque URI exemptions to parsed links * fix(agents): handle opening prose delimiters * fix(agents): scan nested imports and share document suffixes * fix(agents): reject pathless media and direct file URLs * fix(agents): reject file bases and preserve quoted URL boundaries * fix(agents): distinguish URL quotes and cover guidance variants * fix(agents): validate SVG images and conventional guides * fix(agents): handle declared package names handles and SVG use * fix(agents): normalize closing punctuation on federated handles * fix(agents): normalize Unicode punctuation on handles * fix(agents): normalize possessive federated handles * fix(agents): separate parenthetical prose from handles * fix(agents): exclude www autolinks from import scanning * ci: allow manual CodeQL validation of PR branches * fix(agents): reject nonportable Windows drive links
8.1 KiB
8.1 KiB
Repository guidance
IPTVnator is an Angular/Electron IPTV player with a browser/PWA runtime. These are the common instructions for all coding agents. Read the relevant contracts below before changing a subsystem; do not load every document.
Bootstrap and commands
- Use the Node version in
.nvmrcand the repository's pnpm version. - In a fresh worktree, run
pnpm install --frozen-lockfilebefore Nx discovery, tests, lint or builds. Each worktree needs its own install. - Repeat the install after checkout changes, pulls, resets or rebases. Compare
pnpm-lock.yamlwithnode_modules/.pnpm/lock.yaml; a difference means stale dependencies. Do not diagnose stale modules as application failures. - Verify discovery with
pnpm nx show projects. Inspect the owning project's targets before choosing checks. Prefer the smallest relevant Nx target. - Development:
pnpm run serve:frontendorpnpm run serve:backend. - Tests:
pnpm nx test <project>; lint:pnpm nx lint <project>. - Find checks and E2E commands in the validation map.
- Packaging, native dependencies and runtime patches have additional contracts in the context map; read them before dependency or release changes.
Implementation invariants
- Use scoped aliases from
tsconfig.base.json, such as@iptvnator/services. Do not introduce legacy bare aliases or bypass public project boundaries. - Nx projects keep
scope:*,domain:*andtype:*tags. Shared cross-project files must belong to a project. SCSS imports need explicit hash dependencies. - Target under 300 production TypeScript lines; the hard limit is 400 (1200 for tests), excluding comments/blanks. Never add entries to the legacy baseline.
- Preserve existing persisted data. Users may skip releases: migrations must apply in dependency order, preserve data and be safe on repeated startup. Test actual historical SQLite schemas, not only SQL mocks.
- Choose runtime behavior through the relevant capability contract; a generic
window.electroncheck does not prove that a particular bridge is available. - Use shared redacting logging before emitting settings, portal or trace data. Never log credentials or expanded SQL/bound values.
- Keep UI consistent with the shared guidelines. Read the repository UI/theme skills before changing user-visible Angular views or shared styles.
Validation and completion
- Before finishing, assess affected projects and test impact. Bug fixes normally include regression coverage that fails before the fix and passes afterwards.
- Update stale tests, fixtures and E2E flows when behavior changes. Run targeted unit checks and affected E2E for routing, persistence, playback and user flows.
- Electron-only IPC, database, packaging, players and filesystem changes need Electron E2E where available, otherwise CDP/manual validation with a reason.
- Report checks and results, any skipped checks with reasons, documentation changes, and whether a release note was added or why it was unnecessary.
- Every user-visible change needs a note under
.changes/; follow the release-note format and the repository release-notes skill. Docs, tests, CI and behavior-preserving refactors do not need a note. Applyno-release-noteon exempt PRs touching runtime code. - Validate notes with
pnpm run release:notes:validate. Release publication has separate ordered gates; follow the release-cut skill and release contract.
Keep guidance small and canonical
- Update the affected subsystem's canonical document after meaningful changes. Prefer an existing authoritative doc; keep user/developer entry points in README and detailed contracts in architecture docs or a module README.
- Add to this file only repository-wide rules and navigation. Implementation details, incident history and multi-step procedures belong in linked docs. Do not duplicate subsystem contracts here or in CLAUDE.md.
AGENTS.mdis the single source of common rules.CLAUDE.mdimports it and contains only Claude-specific guidance. Limits: 200 lines / 16 KiB here, 30 lines / 2 KiB for CLAUDE.md. Do not raise loading limits to fit more prose.- Read the context map when ownership is unclear. Read each affected domain for cross-domain tasks, not the whole map's documents.
- Preserve exceptions and rationale when moving knowledge. Correct stale facts against code; do not silently discard a contract. Maintenance details are in the agent workflow.
- Never run whole-file
prettier --writeon AGENTS.md, CLAUDE.md ordocs/**. Edit only intended lines; upstream Markdown is not uniformly Prettier-clean. - After changing guidance, run
pnpm run agents:validate; after editing a repository skill or a literal path it documents, runpnpm run skills:validate. Keep release-cut and release-notes copies byte-identical for Codex and Claude. - Save finalized plans only in
.plans/YYYY-MM-DD-short-topic.md; if a filename exists, append-2,-3, etc. Respect active mode restrictions on file writes; if writing is forbidden, save the approved plan when execution starts.
Read by task
| Task | Required starting point |
|---|---|
| Project layout, imports, dependencies, lint configuration | Nx boundaries |
| Angular conventions, docs and skills maintenance | Agent workflow |
| Electron debugging, CDP, trace flags | Electron debugging |
| SQLite, worker IPC, persistence migrations | DB worker, database migrations |
| M3U, XMLTV, startup, source health, OS playlist opening | M3U contracts, adding sources across layers |
| Xtream / Stalker | Xtream compatibility, Stalker contracts (affected provider only) |
| Player controls, diagnostics, radio, keep-awake | Controls contract |
| Embedded MPV, native runtime and packaging | Embedded MPV |
| UI, keyboard, detail navigation, remote control | UI guidelines, then matching topic in context map |
| PWA, backend networking, connectivity guard | PWA contract, host connectivity |
| Downloads, TMDB, multi-source, workspace, backup, website | Context map |
| Release or packaging metadata | Release pipeline, release-cut skill |
Repository skills live in .codex/skills/. Their frontmatter owns trigger
conditions; use the context map to locate a relevant skill. Read its linked
contract before editing. A missing optional global skill/tool is not a blocker:
use repository documentation and available CLI discovery.
General Guidelines for working with Nx
- For workspace exploration, use the
nx-workspaceskill when available; otherwise inspect project-local project.json files,pnpm nx show projectsandpnpm nx graph. - Run project tasks through local
pnpm nx, not a global Nx installation. - Use the Nx MCP server when available; otherwise use CLI discovery.
- Check
node_modules/@nx/<plugin>/PLUGIN.mdfor plugin guidance when present. - Never guess unfamiliar flags: consult
--helpor availablenx_docs.
Scaffolding and generators
- Use the
nx-generateskill first when available. Otherwise discover the generator with local Nx help and follow repository boundary rules.
When to use nx_docs
- Use available
nx_docsfor migrations, unfamiliar configuration and flags. - Basic task syntax does not require a docs lookup; generator discovery belongs to the generator skill or local CLI help.