tasks: + [board-viewer-whitelist-auto-discovery] round2 candidate (zero-maintenance namespaces)
User: «у меня видны задачи всего из 4 проектов, нет твоих, .common, stostayer.new и пр.» Long-term solution — namespace-list в auth.toml + auto-discovery через /api/v1/orgs/<org>/repos с .tasks/STATUS.md filter. При добавлении нового репо в namespace — виден без edit'а auth.toml. Quick-win (ручное расширение whitelist) — параллельная таска в .admin/[board-viewer-expand-whitelist], ship'ается сегодня без code-change. Design-first — 6 open Q's (schema merge, filter HEAD-probe, API fallback, pagination, error handling, exclusions defer). Не блокер round1 review umbrella — round2 candidate.
This commit is contained in:
@@ -126,6 +126,16 @@ _Updated: 2026-05-22_
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## ⚪ [board-viewer-whitelist-auto-discovery] — auto-discover репо из namespace-list (zero-maintenance whitelist)
|
||||||
|
|
||||||
|
**Status:** ready (design-first, round2 candidate — не блокер round1 review)
|
||||||
|
**Where I stopped:** (not started — 6 design-вопроса: schema mergeable namespaces+repos, filter `.tasks/STATUS.md` HEAD-probe, API endpoint org-vs-user fallback, pagination, error handling, exclusions defer'нуть. Recommendations внутри `board-viewer-whitelist-auto-discovery.md`.)
|
||||||
|
**Next action:** Quick-win параллельно — `~/projects/.admin/.tasks/board-viewer-expand-whitelist.md` (ручное расширение auth.toml на VDS, no code-change). Эта код-таска — long-term для zero-maintenance. Resolve 6 design-вопросов (single user-session) → TDD impl `gitea.ts listOrgRepos/hasStatusMd` + `config.ts namespaces+repos merge` + `reader.ts pre-resolve repo-list`. Если дилемма — `.workshop/.brainstorm/board-viewer-whitelist-auto-discovery.md`.
|
||||||
|
**Branch:** master
|
||||||
|
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .workshop / 2026-05-22 / trigger: user-ux-feedback-round1-followup -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 🔵 [board-viewer-ux-round1-review] — review umbrella для 6 UX-fixes round1
|
## 🔵 [board-viewer-ux-round1-review] — review umbrella для 6 UX-fixes round1
|
||||||
|
|
||||||
**Status:** blocked
|
**Status:** blocked
|
||||||
|
|||||||
54
.tasks/board-viewer-whitelist-auto-discovery.md
Normal file
54
.tasks/board-viewer-whitelist-auto-discovery.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# board-viewer-whitelist-auto-discovery
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Текущий `board_viewer_repos` в `auth.toml` — explicit list репо. При добавлении нового репо нужен edit + restart. Zero-maintenance подход: хранить **list of orgs/users**, build-контейнер сам discover'ит репо через Gitea API.
|
||||||
|
|
||||||
|
## Design open questions — РЕШИТЬ ДО ИМПЛА
|
||||||
|
|
||||||
|
1. **Schema:** `board_viewer_repos: [...]` остаётся как backward-compat (explicit list)? Или заменяется на `board_viewer_namespaces: ["victor", "cancel_music", "OpeItcLoc03"]`?
|
||||||
|
- Recommend: **обе**. Namespace-list автодискаверит, explicit-list оверрайдит / включает специальные. Build merge'ит обе.
|
||||||
|
2. **Filter criteria:** что считать «board-able» репо?
|
||||||
|
- Recommend: репо имеет файл `.tasks/STATUS.md` на default branch (через `/api/v1/repos/<owner>/<repo>/contents/.tasks/STATUS.md` HEAD-probe). Если 404 — пропустить тихо.
|
||||||
|
3. **API endpoint:** `/api/v1/orgs/<org>/repos` для org'ов, `/api/v1/users/<user>/repos` для users. Какой namespace что — knowable заранее? Или try-both?
|
||||||
|
- Recommend: try org → fall back to user. Кэшировать результат на время сессии build-контейнера (next-tick refresh).
|
||||||
|
4. **Pagination:** Gitea API limit ~50 репо/page. Сколько у нас всего на org? `OpeItcLoc03` ≥5, `victor` ≥10, `cancel_music` ≥4. Single page достаточно сейчас, но добавить pagination loop на будущее.
|
||||||
|
5. **Error handling:** API rate-limit, network blip, partial response. Build-контейнер должен сделать best-effort, не crash'нуть entire tick.
|
||||||
|
6. **Exclusions:** в namespace может быть много not-board-able репо (forks, archives, dotfiles). Filter — только по `.tasks/STATUS.md` существованию (см. #2). Может быть нужны явные exclude-patterns (`board_viewer_exclude: ["**/legacy-*"]`)? Recommend: defer пока не появится конкретный кейс.
|
||||||
|
|
||||||
|
## TDD posture
|
||||||
|
|
||||||
|
**Mode = TDD**. Failing test'ы:
|
||||||
|
- Unit `gitea.ts.listOrgRepos(org)`: возвращает `repo[]` для namespace через mock-fetch
|
||||||
|
- Unit `gitea.ts.hasStatusMd(owner, repo)`: HEAD-probe, true/false
|
||||||
|
- Unit `config.ts`: merge `board_viewer_namespaces` + `board_viewer_repos` → deduped list
|
||||||
|
- Integration: build-контейнер с namespace-config'ом → reader gets ~N repos
|
||||||
|
- E2E smoke на dev: namespace=victor → board показывает stostayer.new + books + pilonuxt etc. (те у которых .tasks/STATUS.md)
|
||||||
|
|
||||||
|
## Key files
|
||||||
|
|
||||||
|
- `src/gitea.ts` — новые методы `listOrgRepos`, `listUserRepos`, `hasStatusMd`
|
||||||
|
- `src/config.ts` — schema: `board_viewer_namespaces?: string[]`, merge logic
|
||||||
|
- `src/reader.ts` — собрать full repo-list before iterating
|
||||||
|
- `tests/gitea.test.ts`, `tests/config.test.ts`, `tests/reader.test.ts`
|
||||||
|
- `deploy/auth.toml.example` — пример с обеими опциями
|
||||||
|
- `deploy/README.md` — описать обе schema
|
||||||
|
|
||||||
|
## Pre-impl
|
||||||
|
|
||||||
|
- Brainstorm перед коммитом первой строки кода — 6 design-вопросов выше. Single-session с user'ом, если рекомендации принимаются — стартовать impl с design-комментарием в decisions log. Если возникает дилемма — `.workshop/.brainstorm/board-viewer-whitelist-auto-discovery.md`.
|
||||||
|
|
||||||
|
## Acceptance criteria
|
||||||
|
|
||||||
|
- Build-контейнер с `board_viewer_namespaces = ["victor", "cancel_music", "OpeItcLoc03"]` автоматом подтягивает все репо у которых есть `.tasks/STATUS.md`
|
||||||
|
- Добавление нового репо в namespace → виден на board без edit'а auth.toml (только next-tick через 5 мин)
|
||||||
|
- Обратная совместимость: existing `board_viewer_repos` всё ещё работает (merge'ится)
|
||||||
|
- Все тесты pass + новые тесты для namespace-discovery
|
||||||
|
- Smoke на board.kzntsv.site — видны репо со всех 3 namespace'ов
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Связано с quick-win ops-таской `~/projects/.admin/.tasks/board-viewer-expand-whitelist.md` — пока эта code-таска не сделана, админ edit'ит whitelist руками.
|
||||||
|
- Может быть скомбинирована с round2 UX-фиксами (если они появятся). Не блокер для round1 review umbrella.
|
||||||
|
|
||||||
|
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .workshop / 2026-05-22 / trigger: user-ux-feedback-round1-followup -->
|
||||||
Reference in New Issue
Block a user