diff --git a/agents.md b/agents.md new file mode 100644 index 0000000..14972cf --- /dev/null +++ b/agents.md @@ -0,0 +1,24 @@ +# agent rules + +## priorities +- optimize for simplicity, boringness, and long-term maintainability +- prefer minimal diffs; avoid refactors unless required for the active task + +## tech stack +- python +- file storage: json and csv, no sqlite or databases +- assume local virtual env is available and accessible +- do not add new dependencies unless explicitly approved; if unavoidable, document justification in the active task notes + +## workflow +- work on ONE task at a time unless explicitly instructed otherwise +- at the start of work, state the task id you are executing +- do not start work unless a task id is specified; if missing, choose the earliest unchecked task and say so +- propose incremental steps +- always include basic tests for core logic +- add assumptions and questions along-the-way to the ** notes section under the active task +- when you complete a task: + - mark it [X] in pm/tasks.org + - fill in evidence with commit hash + commands run + - never mark complete unless acceptance criteria are met + - include date and time (HH:MM) diff --git a/pm/tasks-v2.org b/pm/tasks-v2.org new file mode 100644 index 0000000..9d8a511 --- /dev/null +++ b/pm/tasks-v2.org @@ -0,0 +1,138 @@ +#+title: Task Log +#+updated: [2026-03-31 Tue 16:03] + +* youdis v2 goals: +1. Separate backend from frontend +2. Offload auth +3. Ensure auto nightly builds +4. Default output format supports plex browsing youtube channels as "tv shows" +5. Facilitate multiple GUI inbounds: Discord, Zulip, XMPP + +* [ ] 2.0.0: define architecture (2-4) +define the target architecture for a private backend yt-dlp worker with thin chat frontends +** pm notes: +- keep this iterative. the point is to choose the shape and seam, not prematurely implement infra. likely decisions include backend framework, request/status model, and how thin the discord shim should be. +- goal is simple, private, maintainable deployment +- avoid auth, queues, or persistence beyond clear & immediate needs + +** Acceptance Criteria +1. document the target architecture at a high level + - backend owns yt-dlp execution and job state + - frontends own chat-specific UX +2. identify key decisions still open + - backend choice + - service seam/endpoints + - status/progress model +3. capture enough structure to begin implementation + - repo/component layout is sketched + - next implementation task is unblocked + +** evidence +- commit: +- tests: +- datetime: + +** notes + +* [ ] 2.0.1: build backend yt-dlp worker (3) +create the minimal backend/service skeleton and establish a working yt-dlp baseline with clean hooks for future frontends +** pm notes +- foundation; don't need the full finished service here, just the basic shape plus enough real yt-dlp execution to validate the seam and build on it. +- keep single-job semantics +- prioritize inspectable behavior over polish + +** Acceptance Criteria +1. create the backend/service skeleton + - app/module layout exists + - core request path is stubbed or minimally working +2. establish a working yt-dlp baseline + - archive behavior is preserved + - output path behavior is preserved or intentionally updated + - use yt-dlp .conf and set reasonable default +3. expose basic hooks/interfaces for future frontends + - submit/request path exists + - status/progress hook exists + - basic health/version visibility exists + +** evidence +- commit: +- tests: +- datetime: + +** notes + +* [ ] 2.0.2: update discord bot to use new backend (3) +update the discord bot into a thin frontend that talks to the backend and verify the flow end to end +** pm notes +- this is the first real frontend proof. once this works cleanly, zulip/xmpp should mostly be adapter work rather than downloader rewrites. +- keep discord logic thin; no auth +- do not duplicate yt-dlp behavior in the bot + +** Acceptance Criteria +1. discord bot submits requests to backend + - command/input handling works + - acceptance/busy/failure responses are clear +2. discord bot relays useful backend status + - progress reporting works at a basic level + - completion/failure/skipped outcomes are surfaced +3. backend-discord flow is tested end to end + - valid request path tested + - busy or conflict behavior tested + - failure path tested + +** evidence +- commit: +- tests: +- datetime: + +** notes + +* [ ] 2.0.3: remove deprecated discord-bot functionality (2) +delete or retire legacy bot behaviors that no longer fit once the backend split is in place +** pm notes +- only remove this after the new path works. this is cleanup, not pioneering work. +- favor deletion over compatibility shims +- keep operator controls only if still useful + +** Acceptance Criteria +1. remove obsolete auth/user-management behavior + - old user persistence and commands are removed + - backend-facing flow no longer depends on them +2. remove obsolete downloader/runtime logic from bot + - bot no longer owns yt-dlp execution + - dead code paths are deleted +3. leave the bot in a coherent state + - remaining commands reflect actual supported behavior + - deprecated artifacts are clearly removed or marked + +** evidence +- commit: +- tests: +- datetime: + +** notes + +* [ ] 2.0.5: fix automation and build pipeline (3) +repair and simplify the build/update/deploy path so it matches the new backend-plus-frontend structure +** pm notes +- this should come after architecture and discord integration stabilize. no point polishing the pipeline for the wrong shape. +- optimize for simple manual ops first +- stop here after pipeline is sane + +** Acceptance Criteria +1. align build artifacts with the new structure + - docker/build scripts reflect current components + - runtime assumptions are consistent +2. review old automation artifacts + - stale runner/update/restart logic is removed or updated + - manual update/rebuild flow is clear +3. confirm deployment path works + - local or unraid deployment is validated + - pipeline is understandable enough to maintain + +** evidence +- commit: +- tests: +- datetime: + +** notes