T01-T07 u done/. 67 testova, sve zeleno. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
96 lines
2.5 KiB
Markdown
96 lines
2.5 KiB
Markdown
# T02: Task loader — parsiranje markdown taskova
|
|
|
|
**Kreirao:** planer
|
|
**Datum:** 2026-02-20
|
|
**Agent:** coder
|
|
**Model:** Sonnet
|
|
**Zavisi od:** T01 ✅
|
|
|
|
---
|
|
|
|
## Opis
|
|
|
|
Supervisor mora da čita taskove iz markdown fajlova u TASKS/ folderima.
|
|
Parsira pojedinačne task fajlove, izvlači ID, status (folder), zavisnosti.
|
|
|
|
## Fajlovi za kreiranje
|
|
|
|
```
|
|
code/internal/supervisor/
|
|
├── task.go ← Task struct, LoadTask(), ScanTasks(), NextTask()
|
|
└── task_test.go ← testovi sa primer markdown-om
|
|
```
|
|
|
|
## Task struct
|
|
|
|
```go
|
|
type Task struct {
|
|
ID string // T01, T02...
|
|
Title string // naslov iz # zaglavlja
|
|
Status string // backlog, ready, active, review, done (iz foldera)
|
|
Agent string // coder, checker, frontend...
|
|
Model string // Haiku, Sonnet, Opus
|
|
DependsOn []string // lista task ID-eva
|
|
Description string // ceo opis
|
|
FilePath string // putanja do fajla
|
|
}
|
|
```
|
|
|
|
## Funkcije
|
|
|
|
- `LoadTask(filePath string) (Task, error)` — parsira jedan task fajl
|
|
- `ScanTasks(tasksDir string) ([]Task, error)` — skenira sve foldere (backlog/, ready/, active/, review/, done/), učita sve taskove, status iz imena foldera
|
|
- `FindTask(tasks []Task, id string) *Task` — nađi po ID-u
|
|
- `NextTask(tasks []Task) *Task` — prvi task u ready/ čije su zavisnosti u done/
|
|
- `MoveTask(tasksDir, taskID, fromFolder, toFolder string) error` — premesti fajl između foldera
|
|
|
|
## Parsiranje
|
|
|
|
Task fajl format (primer T01.md):
|
|
```markdown
|
|
# T01: Naslov
|
|
|
|
**Agent:** coder
|
|
**Model:** Sonnet
|
|
**Zavisi od:** —
|
|
|
|
---
|
|
|
|
## Opis
|
|
Tekst opisa...
|
|
```
|
|
|
|
Parser izvlači:
|
|
- ID i Title iz `# T{XX}: Naslov`
|
|
- Agent iz `**Agent:** vrednost`
|
|
- Model iz `**Model:** vrednost`
|
|
- DependsOn iz `**Zavisi od:** T01, T03` (ili `—` za bez zavisnosti)
|
|
- Description iz `## Opis` sekcije
|
|
- Status iz imena foldera u kojem se fajl nalazi
|
|
|
|
## Testovi
|
|
|
|
- LoadTask sa primer fajlom → parsira tačno sva polja
|
|
- ScanTasks sa temp folderima → nalazi taskove u svim folderima
|
|
- NextTask: task u ready/ sa zavisnostima u done/ → vraća ga
|
|
- NextTask: task u ready/ sa zavisnošću u backlog/ → ne vraća
|
|
- MoveTask: premesti fajl, proveri da je u novom folderu
|
|
- Edge case: prazan folder, fajl bez zavisnosti, nepostojeći ID
|
|
|
|
## Očekivani izlaz
|
|
|
|
`go test ./internal/supervisor/ -v` — svi testovi zeleni.
|
|
`go vet ./...` čist. `go build ./...` prolazi.
|
|
|
|
---
|
|
|
|
## Pitanja
|
|
|
|
*(agent piše pitanja ovde, planer odgovara)*
|
|
|
|
---
|
|
|
|
## Odgovori
|
|
|
|
*(planer piše odgovore ovde)*
|