docs: add backlog triage implementation plan
Executable steps for Gitea issues, P1 task briefs 80-88, ADR stubs, and STATUS Phase 9 updates.
This commit is contained in:
@@ -0,0 +1,714 @@
|
||||
# Backlog Triage Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** File the full post-v0.1 backlog on Gitea, write P1 task briefs and ADR stubs, and point STATUS at the approved batch order — no application feature code.
|
||||
|
||||
**Architecture:** Issue-centric tracking on `gitea.ginnoir.com/ginnoir/famapp`. Design IDs (#1–#19) map to real Gitea issue numbers via `docs/issues-map.md`. P1 work is executable from `docs/tasks/80`–`88`; P2/P3 are issues only. Spec: `docs/superpowers/specs/2026-07-03-backlog-triage-design.md`.
|
||||
|
||||
**Tech Stack:** Gitea API / `user-gitea` MCP (`CreateRepoLabel`, `CreateIssue`, `AddIssueDependency`), markdown task briefs, lightweight ADRs.
|
||||
|
||||
---
|
||||
|
||||
## File map
|
||||
|
||||
| Path | Responsibility |
|
||||
| ----------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `docs/issues-map.md` | Design ID → Gitea issue number + URL |
|
||||
| `docs/tasks/80-*.md` … `88-*.md` | P1 executable briefs |
|
||||
| `docs/tasks/README.md` | Phase 9 index |
|
||||
| `docs/decisions/0004-rich-text-editor.md` | ADR stub (full body later) |
|
||||
| `docs/decisions/0005-journal-research.md` | ADR stub |
|
||||
| `docs/decisions/0006-api-llm-agent.md` | ADR stub |
|
||||
| `docs/decisions/README.md` | Index entries for 0004–0006 |
|
||||
| `STATUS.md` | Next-up = Phase 9 order + links |
|
||||
| `ARCHITECTURE.md` | Light placeholders for `/api/v1` and journal (only if already tracked; do not invent diagrams) |
|
||||
| Gitea issues | Source of truth for backlog items |
|
||||
|
||||
**Auth:** Use Gitea MCP (`user-gitea`) or REST with token from Obsidian `claude/Credentials.md` (Gitea section). Header: `Authorization: token <tok>`. Base: `https://gitea.ginnoir.com/api/v1`. Owner/repo: `ginnoir` / `famapp`. **Never commit the token.**
|
||||
|
||||
**CreateIssue requirement:** Every issue `body` MUST include `<brief>one-line summary</brief>` (Gitea MCP enforces this).
|
||||
|
||||
**Fallback:** If Gitea is unreachable, write each body to `docs/issues-drafts/<slug>.md` and stop after Task 1 with a clear note — do not invent issue numbers.
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Create labels
|
||||
|
||||
**Files:** none (Gitea only)
|
||||
|
||||
- [ ] **Step 1: Confirm repo has zero labels**
|
||||
|
||||
Run via MCP `gitea_read` / `ListRepoLabels` with `owner=ginnoir`, `repo=famapp`, or:
|
||||
|
||||
```powershell
|
||||
$headers = @{ Authorization = "token <from-vault>" }
|
||||
Invoke-RestMethod -Uri "https://gitea.ginnoir.com/api/v1/repos/ginnoir/famapp/labels" -Headers $headers
|
||||
```
|
||||
|
||||
Expected: `[]` (or existing labels — skip creates for names that already exist).
|
||||
|
||||
- [ ] **Step 2: Create type labels**
|
||||
|
||||
For each row, MCP `gitea_write` / `CreateRepoLabel` (`owner=ginnoir`, `repo=famapp`):
|
||||
|
||||
| name | color | description |
|
||||
| ------------- | -------- | -------------------------------- |
|
||||
| `bug` | `d73a4a` | Something is broken |
|
||||
| `enhancement` | `a2eeef` | Improvement to existing behavior |
|
||||
| `feature` | `0e8a16` | New user-facing capability |
|
||||
| `epic` | `5319e7` | Large multi-issue effort |
|
||||
| `research` | `fbca04` | Investigation / ADR only |
|
||||
|
||||
- [ ] **Step 3: Create priority labels**
|
||||
|
||||
| name | color | description |
|
||||
| ------------- | -------- | ----------- |
|
||||
| `priority/p1` | `b60205` | Next batch |
|
||||
| `priority/p2` | `ff9f1c` | After P1 |
|
||||
| `priority/p3` | `cfd3d7` | Backlog |
|
||||
|
||||
- [ ] **Step 4: Record label IDs**
|
||||
|
||||
List labels again. Write a temporary note (or keep in shell) mapping name → `id` (int). All later `CreateIssue` calls pass `labels: [typeId, priorityId]` as **IDs**, not names.
|
||||
|
||||
---
|
||||
|
||||
### Task 2: File P1 bug issues (design #1–#6)
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `docs/issues-map.md` (start the table)
|
||||
|
||||
Create issues **in this order** so mapping is predictable. After each create, append a row to `docs/issues-map.md`:
|
||||
|
||||
```markdown
|
||||
# Issue map
|
||||
|
||||
Design IDs from `docs/superpowers/specs/2026-07-03-backlog-triage-design.md` → Gitea.
|
||||
|
||||
| Design | Gitea | Title | URL |
|
||||
| ------ | ----- | ------------------------------------------ | ------------------------------------------------- |
|
||||
| 1 | N | Quick-add opens create UI, not module page | https://gitea.ginnoir.com/ginnoir/famapp/issues/N |
|
||||
```
|
||||
|
||||
Labels for all six: `bug` + `priority/p1`.
|
||||
|
||||
- [ ] **Step 1: Create design #1 — Quick-add**
|
||||
|
||||
`CreateIssue` title: `Quick-add opens create UI, not module page`
|
||||
|
||||
Body:
|
||||
|
||||
```markdown
|
||||
<brief>Quick-add actions must open create dialogs/sheets, not only navigate to module pages.</brief>
|
||||
|
||||
## Background / current behavior
|
||||
|
||||
Every quick-add entry (FAB sheet and cmd-k palette) currently navigates to its module page (e.g. "New event" → `/calendar`). Task 21 intentionally used `url` navigation as a placeholder; inline create was deferred.
|
||||
|
||||
Relevant code: `src/modules/_core/module.ts` (`QuickAddAction`), module manifests (`quickAdds`), `QuickAddSheet` / `CommandPalette` under `src/components/`.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
Each quick-add opens the **creation UI** for that entity (dialog/sheet) from wherever the button lives, without requiring a full page navigation first. Navigation-only is not acceptable.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] "New event" opens the event create dialog/sheet with create controls visible.
|
||||
- [ ] List/note/garden (and other registered) quick-adds open their create UI the same way.
|
||||
- [ ] Cmd-k and FAB sheet behave identically for the same action.
|
||||
- [ ] Playwright: extend `tests/e2e/dashboard.spec.ts` and/or add `tests/e2e/quick-add.spec.ts` — open FAB → action opens dialog/sheet, not only a route change.
|
||||
|
||||
## Priority
|
||||
|
||||
P1 (batch step 1). Task brief: `docs/tasks/80-quick-add-create-ui.md`.
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Create design #2 — Dashboard edit live widgets**
|
||||
|
||||
Title: `Dashboard edit mode renders live widgets at true size`
|
||||
|
||||
Body:
|
||||
|
||||
```markdown
|
||||
<brief>Dashboard edit mode must render real widget content at final size, not empty placeholders.</brief>
|
||||
|
||||
## Background / current behavior
|
||||
|
||||
In edit mode (`?edit=1`), widgets render as generic placeholders at the dragged size. On save, widgets like Recent Activity expand to fit content and the dashboard reflows. What you arrange is not what you get.
|
||||
|
||||
Relevant: `DashboardEditor`, react-grid-layout usage, dashboard page under `src/app/d/`.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
Edit mode live-loads each widget's real data and renders at true final size so layout matches the saved view.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] Edit mode shows real widget content (not empty shells) for registered widgets.
|
||||
- [ ] Saving layout does not cause a large content-driven reflow for content-heavy widgets (e.g. Recent activity).
|
||||
- [ ] Playwright: extend `tests/e2e/dashboard.spec.ts` — enter edit mode, assert real content visible (e.g. Recent activity). Prefer height-stability assertion only if non-flaky.
|
||||
|
||||
## Priority
|
||||
|
||||
P1 (batch step 2). Task brief: `docs/tasks/81-dashboard-edit-live-widgets.md`.
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Create design #3 — Garden plant count**
|
||||
|
||||
Title: `Garden container plant count is wrong`
|
||||
|
||||
Body:
|
||||
|
||||
```markdown
|
||||
<brief>Container shows "0 plants" despite containing a plant; fix count query and audit siblings.</brief>
|
||||
|
||||
## Background / current behavior
|
||||
|
||||
A garden container (e.g. "plantie cabinet") shows "0 plants" when it contains at least one plant. Likely a query/join or container-association bug.
|
||||
|
||||
Relevant: `src/modules/garden/server/queries.ts`, container list/detail components.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
Container plant counts match the number of plants associated with that container. Any other count displays sharing the same bug are fixed too.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] Container with N plants displays N (not 0).
|
||||
- [ ] Audit other garden counts (lists, widgets) for the same pattern; fix or file follow-ups.
|
||||
- [ ] Playwright: extend `tests/e2e/garden.spec.ts` — plant in container → count ≥ 1.
|
||||
|
||||
## Priority
|
||||
|
||||
P1 (batch step 3). Task brief: `docs/tasks/82-garden-plant-count.md`.
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Create design #4 — Bang edit/delete**
|
||||
|
||||
Title: `Bangs are not editable (add edit and delete)`
|
||||
|
||||
Body:
|
||||
|
||||
```markdown
|
||||
<brief>Bang entries cannot be corrected after creation; add edit and delete.</brief>
|
||||
|
||||
## Background / current behavior
|
||||
|
||||
Bang events can be recorded but not corrected (e.g. wrong date). Only create exists in `src/modules/bangs/server/actions.ts` and the widget UI.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
Users can edit (at least date/fields present today) and delete bang entries.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] Edit a bang (e.g. change date) and see the update in the widget/list.
|
||||
- [ ] Delete a bang and it no longer appears.
|
||||
- [ ] Activity log entries for update/delete if other modules log similarly.
|
||||
- [ ] Playwright: new `tests/e2e/bangs.spec.ts` — record → edit date → assert → delete → assert gone.
|
||||
|
||||
## Priority
|
||||
|
||||
P1 (batch step 4). Task brief: `docs/tasks/83-bang-edit-delete.md`. Related (not blocking): bang stats widget (design #11).
|
||||
```
|
||||
|
||||
- [ ] **Step 5: Create design #5 — Notes mobile overflow**
|
||||
|
||||
Title: `Notes overflow horizontally on mobile`
|
||||
|
||||
Body:
|
||||
|
||||
```markdown
|
||||
<brief>Note content scrolls sideways on small viewports instead of wrapping.</brief>
|
||||
|
||||
## Background / current behavior
|
||||
|
||||
On mobile, note content overflows horizontally. Fix belongs with the shared rich-text / notes overhaul (design #10) so formatting and overflow are solved together.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
Note content wraps; no horizontal page scroll from note body on small viewports.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] Long / wide note content at 375px width does not cause horizontal overflow.
|
||||
- [ ] Playwright: extend `tests/e2e/notes.spec.ts` — `scrollWidth` within viewport tolerance (same pattern as dashboard mobile check).
|
||||
- [ ] Closed together with design #10 / task `85-rich-text-notes.md`.
|
||||
|
||||
## Priority
|
||||
|
||||
P1 (batch step 7, with #10). **Blocked by** design #10 (rich-text notes overhaul).
|
||||
```
|
||||
|
||||
- [ ] **Step 6: Create design #6 — Back navigation**
|
||||
|
||||
Title: `Missing back navigation on detail pages (audit + shared affordance)`
|
||||
|
||||
Body:
|
||||
|
||||
```markdown
|
||||
<brief>Audit detail routes lacking back affordances; add a shared header/back pattern.</brief>
|
||||
|
||||
## Background / current behavior
|
||||
|
||||
Individual plant pages (and other detail routes) have no in-page "back" except global nav. Affects many detail pages under `src/app/`.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
Every detail page has a consistent back control to its parent list/index. Prefer a shared header/back component.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] Audit all routes in `src/app/` and list detail pages missing back in the PR description.
|
||||
- [ ] Shared back affordance applied consistently.
|
||||
- [ ] Playwright: `tests/e2e/navigation.spec.ts` or per-module — open plant/note/list (and other) detail routes → Back visible and returns to parent.
|
||||
|
||||
## Priority
|
||||
|
||||
P1 (batch step 5). Task brief: `docs/tasks/84-back-navigation.md`.
|
||||
```
|
||||
|
||||
- [ ] **Step 7: Update `docs/issues-map.md` with all six rows**
|
||||
|
||||
---
|
||||
|
||||
### Task 3: File P1 epic issues (#10, #13, #14 and children)
|
||||
|
||||
Labels: parent epics use `epic` + `priority/p1`. Children use `enhancement` or `feature` or `research` as noted + `priority/p1`.
|
||||
|
||||
- [ ] **Step 1: Create design #10 parent — Notes editor / shared rich-text**
|
||||
|
||||
Title: `Notes editor overhaul (shared rich-text component)`
|
||||
|
||||
Labels: `epic`, `priority/p1`
|
||||
|
||||
Body: include `<brief>…</brief>`, checklist of children (research ADR, shared editor, notes wiring, render everywhere, mobile overflow), links to task `85` and ADR `0004`, note that #5 closes with this epic.
|
||||
|
||||
- [ ] **Step 2: Create #10 children** (five issues), titles:
|
||||
|
||||
1. `Research ADR: rich-text editor library and storage format` — labels `research`, `priority/p1`
|
||||
2. `Shared rich-text editor component` — `enhancement`, `priority/p1`
|
||||
3. `Wire shared editor into notes create/edit` — `enhancement`, `priority/p1`
|
||||
4. `Render note formatting on all notes surfaces` — `enhancement`, `priority/p1`
|
||||
5. `Fix notes mobile horizontal overflow` — `bug`, `priority/p1` (can reference design #5; may close #5 when done)
|
||||
|
||||
Each body: brief, parent epic link (fill Gitea # after parent exists), acceptance criteria one-liners, task `85` / ADR `0004`.
|
||||
|
||||
- [ ] **Step 3: Create design #14 parent — API + LLM agent chat**
|
||||
|
||||
Title: `API + LLM agent chat`
|
||||
|
||||
Labels: `epic`, `priority/p1`
|
||||
|
||||
Body: checklist — ADR → API surface for existing modules → (pause for editor/journal) → agent UI → tool-calling → smoke tests. Task briefs `87`, `88`. ADR `0006`. API early, agent late.
|
||||
|
||||
- [ ] **Step 4: Create #14 children**
|
||||
|
||||
1. `Research ADR: API auth, surface shape, and LLM agent architecture` — `research`, `priority/p1`
|
||||
2. `API surface + token auth for existing modules` — `feature`, `priority/p1`
|
||||
3. `LLM agent chat UI` — `feature`, `priority/p1`
|
||||
4. `Map agent tool-calling to API` — `feature`, `priority/p1`
|
||||
5. `Agent smoke tests with mock provider` — `enhancement`, `priority/p1`
|
||||
|
||||
- [ ] **Step 5: Create design #13 parent — Journal module**
|
||||
|
||||
Title: `Journal module`
|
||||
|
||||
Labels: `epic`, `priority/p1`
|
||||
|
||||
Body: requirements from design (per-user journal, recent entries, browse, calendar of entry days, entry fields, mood tracker, insights, research first). Depends on #10 and API foundation (#14 API child). Task `86`, ADR `0005`.
|
||||
|
||||
- [ ] **Step 6: Create #13 children**
|
||||
|
||||
1. `Research ADR: journal/mood tracking build-vs-adopt` — `research`, `priority/p1`
|
||||
2. `Journal schema + CRUD` — `feature`, `priority/p1`
|
||||
3. `Journal index (recent, browse, entry calendar)` — `feature`, `priority/p1`
|
||||
4. `Journal entry detail and create` — `feature`, `priority/p1`
|
||||
5. `Journal mood tracker view` — `feature`, `priority/p1`
|
||||
6. `Journal insights/stats views` — `feature`, `priority/p1`
|
||||
7. `Journal E2E happy path` — `enhancement`, `priority/p1`
|
||||
8. `Journal API endpoints` — `feature`, `priority/p1`
|
||||
|
||||
- [ ] **Step 7: Wire dependencies** (`AddIssueDependency`)
|
||||
|
||||
| Issue (index) | Depends on (depends_on_id) |
|
||||
| ---------------------------------- | ---------------------------------------- |
|
||||
| Design #5 (notes overflow) | Design #10 parent |
|
||||
| Design #10 child "mobile overflow" | Design #10 research ADR child (optional) |
|
||||
| Design #13 parent | Design #10 parent |
|
||||
| Design #13 parent | Design #14 API surface child |
|
||||
| Design #14 agent UI child | Design #14 API surface child |
|
||||
| Design #14 tool-calling child | Design #14 API surface child |
|
||||
| Design #13 journal API child | Design #14 API surface child |
|
||||
|
||||
Use real Gitea indexes from `docs/issues-map.md`.
|
||||
|
||||
- [ ] **Step 8: Update `docs/issues-map.md`** with all epic + child rows (use design IDs like `10`, `10.1`, `13.2`, `14.1`).
|
||||
|
||||
---
|
||||
|
||||
### Task 4: File P2 and P3 issues
|
||||
|
||||
- [ ] **Step 1: P2 enhancements/features** (labels as in design)
|
||||
|
||||
| Design | Title | Labels |
|
||||
| ------ | ------------------------------------------------- | ---------------------------- |
|
||||
| 7 | Calendar reminders overhaul | `enhancement`, `priority/p2` |
|
||||
| 8 | Lists index: inline task add + list property edit | `enhancement`, `priority/p2` |
|
||||
| 9 | Comments on lists and tasks | `feature`, `priority/p2` |
|
||||
| 11 | Bang stats dashboard widget | `enhancement`, `priority/p2` |
|
||||
|
||||
Each body: brief, background, expected, acceptance criteria (high level), note "full `docs/tasks/` when P2 batch starts", related links (#7 → task 41; #11 related to #4; #9 related to #19).
|
||||
|
||||
- [ ] **Step 2: P2 epics with light checklists only** (no child issues)
|
||||
|
||||
| Design | Title |
|
||||
| ------ | ---------------------- |
|
||||
| 15 | Pets module |
|
||||
| 16 | Shopping/pantry module |
|
||||
| 17 | Backups & exports |
|
||||
|
||||
Labels: `epic`, `priority/p2`. Body includes a markdown checklist of future sub-work (not filed as issues yet). #17 references `docs/tasks/60-backups.md`.
|
||||
|
||||
- [ ] **Step 3: P3**
|
||||
|
||||
| Design | Title | Labels |
|
||||
| ------ | ------------------------------------------ | ------------------------- |
|
||||
| 12 | Appearance / theming options | `epic`, `priority/p3` |
|
||||
| 18 | GPS locations for calendar events | `research`, `priority/p3` |
|
||||
| 19 | Lists ↔ notes cohesion (research proposal) | `research`, `priority/p3` |
|
||||
|
||||
- [ ] **Step 4: Finish `docs/issues-map.md`** for designs 7–9, 11–12, 15–19.
|
||||
|
||||
- [ ] **Step 5: Commit map**
|
||||
|
||||
```bash
|
||||
git add docs/issues-map.md
|
||||
git commit -m "docs: map design backlog IDs to Gitea issues"
|
||||
```
|
||||
|
||||
If only drafts were written under `docs/issues-drafts/`, commit those instead and stop — do not invent Gitea numbers.
|
||||
|
||||
---
|
||||
|
||||
### Task 5: Write bug task briefs (80–84)
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `docs/tasks/80-quick-add-create-ui.md`
|
||||
- Create: `docs/tasks/81-dashboard-edit-live-widgets.md`
|
||||
- Create: `docs/tasks/82-garden-plant-count.md`
|
||||
- Create: `docs/tasks/83-bang-edit-delete.md`
|
||||
- Create: `docs/tasks/84-back-navigation.md`
|
||||
|
||||
Each file uses the standard sections: Goal, Why, Depends on, Scope, Out of scope, Acceptance criteria, Notes.
|
||||
|
||||
- [ ] **Step 1: Write `80-quick-add-create-ui.md`**
|
||||
|
||||
```markdown
|
||||
# 80 — Quick-add opens create UI
|
||||
|
||||
## Goal
|
||||
|
||||
Make every quick-add action open the entity's creation dialog/sheet instead of only navigating to a module page.
|
||||
|
||||
## Why
|
||||
|
||||
Task 21 shipped URL navigation as a placeholder. Users expect "New event" to start creating an event immediately.
|
||||
|
||||
## Depends on
|
||||
|
||||
- 21 (quick-add registry)
|
||||
|
||||
## Scope
|
||||
|
||||
- Extend `QuickAddAction` / client handling so actions can open create UI (dialog/sheet) in-place.
|
||||
- Wire calendar, lists, notes, garden, bangs (and any other registered) quick-adds to their create UIs.
|
||||
- Keep FAB sheet and cmd-k behavior identical per action.
|
||||
- Playwright coverage per design #1 / Gitea issue (see `docs/issues-map.md`).
|
||||
|
||||
## Out of scope
|
||||
|
||||
- Fuzzy search across entities.
|
||||
- New entity types.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] Each registered quick-add opens create UI with create controls visible.
|
||||
- [ ] No quick-add is navigation-only unless explicitly documented as view-only (none in v1 set).
|
||||
- [ ] E2E: FAB → action opens dialog/sheet (not only route change).
|
||||
|
||||
## Notes
|
||||
|
||||
- Gitea: design #1 (URL in `docs/issues-map.md`).
|
||||
- Prefer reusing existing create dialogs/sheets over new ones.
|
||||
```
|
||||
|
||||
Fill Gitea issue number into Notes after map exists (replace "design #1" with `ginnoir/famapp#N`).
|
||||
|
||||
- [ ] **Step 2: Write `81-dashboard-edit-live-widgets.md`**
|
||||
|
||||
Same structure: Goal = edit mode renders live widgets at true size; Depends on 26; Scope = DashboardEditor loads real widget components/data; Acceptance = real content in edit mode + E2E; Notes → design #2.
|
||||
|
||||
- [ ] **Step 3: Write `82-garden-plant-count.md`**
|
||||
|
||||
Goal = fix container plant count; Depends on 71/72; Scope = find and fix query/join, audit sibling counts; E2E garden.spec; Notes → design #3.
|
||||
|
||||
- [ ] **Step 4: Write `83-bang-edit-delete.md`**
|
||||
|
||||
Goal = edit + delete bangs; Depends on bangs module (no prior task number — note "bangs module in tree"); new `bangs.spec.ts`; Notes → design #4.
|
||||
|
||||
- [ ] **Step 5: Write `84-back-navigation.md`**
|
||||
|
||||
Goal = shared back affordance on all detail pages; Scope = audit `src/app/`, shared component, apply consistently; E2E navigation; Notes → design #6.
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add docs/tasks/80-quick-add-create-ui.md docs/tasks/81-dashboard-edit-live-widgets.md docs/tasks/82-garden-plant-count.md docs/tasks/83-bang-edit-delete.md docs/tasks/84-back-navigation.md
|
||||
git commit -m "docs: add P1 bug task briefs 80-84"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 6: Write feature task briefs (85–88)
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `docs/tasks/85-rich-text-notes.md`
|
||||
- Create: `docs/tasks/86-journal-module.md`
|
||||
- Create: `docs/tasks/87-api-surface.md`
|
||||
- Create: `docs/tasks/88-llm-agent-chat.md`
|
||||
|
||||
- [ ] **Step 1: Write `85-rich-text-notes.md`**
|
||||
|
||||
Include: Goal = shared rich-text editor + full notes overhaul + mobile overflow; Depends on 12, 80–84 not required but batch order is bugs first; Scope = ADR 0004, shared component, notes create/edit, render on index/widgets/share, fix overflow (closes design #5); Out of scope = journal (86); Acceptance includes E2E notes formatting + mobile overflow; Notes link design #10 and #5.
|
||||
|
||||
- [ ] **Step 2: Write `86-journal-module.md`**
|
||||
|
||||
Include full journal requirements from the design spec (recent entries, browse, calendar, fields, mood multi-select, pills boolean, mood tracker, insights, research ADR 0005, journal API endpoints). Depends on 85 and 87. E2E `journal.spec.ts`.
|
||||
|
||||
- [ ] **Step 3: Write `87-api-surface.md`**
|
||||
|
||||
Goal = documented API + token auth for existing modules (calendar, lists, notes, garden, bangs). Depends on ADR 0006 (research child of #14). Coexistence with OIDC session. Additive versioning. Vitest for auth/handlers. Batch step 6 (after bugs).
|
||||
|
||||
- [ ] **Step 4: Write `88-llm-agent-chat.md`**
|
||||
|
||||
Goal = provider-agnostic OpenAI-compatible agent chat with tool-calling to API. Depends on 87. Mock provider in CI. No live LLM in CI.
|
||||
|
||||
- [ ] **Step 5: Commit**
|
||||
|
||||
```bash
|
||||
git add docs/tasks/85-rich-text-notes.md docs/tasks/86-journal-module.md docs/tasks/87-api-surface.md docs/tasks/88-llm-agent-chat.md
|
||||
git commit -m "docs: add P1 feature task briefs 85-88"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 7: Update `docs/tasks/README.md`
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `docs/tasks/README.md`
|
||||
|
||||
- [ ] **Step 1: Append Phase 9 section** after Phase 8:
|
||||
|
||||
```markdown
|
||||
### Phase 9 — Post-v0.1
|
||||
|
||||
Batch order (bugs → API → editor/notes → journal → agent). Design: [`docs/superpowers/specs/2026-07-03-backlog-triage-design.md`](../superpowers/specs/2026-07-03-backlog-triage-design.md). Issue map: [`docs/issues-map.md`](../issues-map.md).
|
||||
|
||||
- [80 — Quick-add create UI](80-quick-add-create-ui.md)
|
||||
- [81 — Dashboard edit live widgets](81-dashboard-edit-live-widgets.md)
|
||||
- [82 — Garden plant count](82-garden-plant-count.md)
|
||||
- [83 — Bang edit/delete](83-bang-edit-delete.md)
|
||||
- [84 — Back navigation](84-back-navigation.md)
|
||||
- [85 — Rich-text notes overhaul](85-rich-text-notes.md)
|
||||
- [86 — Journal module](86-journal-module.md)
|
||||
- [87 — API surface](87-api-surface.md)
|
||||
- [88 — LLM agent chat](88-llm-agent-chat.md)
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add docs/tasks/README.md
|
||||
git commit -m "docs: index Phase 9 post-v0.1 task briefs"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 8: Stub ADRs 0004–0006
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `docs/decisions/0004-rich-text-editor.md`
|
||||
- Create: `docs/decisions/0005-journal-research.md`
|
||||
- Create: `docs/decisions/0006-api-llm-agent.md`
|
||||
- Modify: `docs/decisions/README.md` (index entries)
|
||||
|
||||
Each stub uses ADR format with `Status: proposed` and a short Context that points at the Gitea research issue and task brief. Decision/Consequences sections state: "To be filled when research completes."
|
||||
|
||||
Example for 0004:
|
||||
|
||||
```markdown
|
||||
# 0004 — Rich-text editor library and storage format
|
||||
|
||||
Date: 2026-07-03
|
||||
Status: proposed
|
||||
|
||||
## Context
|
||||
|
||||
Journal (task 86) and notes overhaul (task 85) need a shared rich-text editor with emoji support. Research and choose an existing library (e.g. TipTap/ProseMirror-family) rather than building one. Gitea: design #10 research child (see `docs/issues-map.md`).
|
||||
|
||||
## Decision
|
||||
|
||||
To be filled when research completes.
|
||||
|
||||
## Consequences
|
||||
|
||||
To be filled when research completes.
|
||||
```
|
||||
|
||||
Mirror for 0005 (journal build-vs-adopt) and 0006 (API auth + LLM agent architecture).
|
||||
|
||||
- [ ] **Step 1: Write three stubs**
|
||||
- [ ] **Step 2: Add index lines** in `docs/decisions/README.md` under the AUTO-GENERATED block (or after it if the generator would wipe them — prefer manual entries matching existing style):
|
||||
|
||||
```markdown
|
||||
- [0004 — Rich-text editor library and storage format](0004-rich-text-editor.md) (proposed)
|
||||
- [0005 — Journal / mood tracking research](0005-journal-research.md) (proposed)
|
||||
- [0006 — API auth and LLM agent architecture](0006-api-llm-agent.md) (proposed)
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add docs/decisions/0004-rich-text-editor.md docs/decisions/0005-journal-research.md docs/decisions/0006-api-llm-agent.md docs/decisions/README.md
|
||||
git commit -m "docs: stub ADRs 0004-0006 for P1 cross-cutting choices"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 9: Update STATUS.md
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `STATUS.md`
|
||||
|
||||
- [ ] **Step 1: Replace "Next up" section** with:
|
||||
|
||||
```markdown
|
||||
## Next up
|
||||
|
||||
Phase 9 — Post-v0.1 (see `docs/superpowers/specs/2026-07-03-backlog-triage-design.md`, `docs/issues-map.md`).
|
||||
|
||||
**Batch order:**
|
||||
|
||||
1. Bugs: tasks 80–84 (quick-add, dashboard edit, garden count, bangs, back-nav)
|
||||
2. API foundation: task 87 (+ ADR 0006)
|
||||
3. Shared rich-text + notes overhaul: task 85 (+ ADR 0004); closes notes mobile overflow
|
||||
4. Journal: task 86 (+ ADR 0005), including journal API endpoints
|
||||
5. LLM agent chat: task 88
|
||||
|
||||
P2/P3 backlog is filed on Gitea only (no task briefs yet).
|
||||
|
||||
**How to resume:** Read AGENTS.md / CLAUDE.md / STATUS.md, open the next unchecked task in `docs/tasks/80`–`88`, stop at acceptance criteria.
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add STATUS.md
|
||||
git commit -m "docs: point STATUS at Phase 9 backlog batch order"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 10: Light ARCHITECTURE.md touch
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `ARCHITECTURE.md` only if it is already part of the repo tracking story (it may be untracked — if untracked, add a minimal "Future" note under module list, or skip if the file is incomplete/unrelated). Prefer: add two bullets under module system / routes:
|
||||
|
||||
- Future: `journal/` module (task 86)
|
||||
- Future: versioned HTTP API (`/api/v1/…`) with token auth alongside OIDC session (task 87)
|
||||
|
||||
Do **not** invent detailed diagrams.
|
||||
|
||||
- [ ] **Step 1: Apply minimal placeholders or skip with a note in the commit message if ARCHITECTURE.md is not ready**
|
||||
- [ ] **Step 2: Commit if changed**
|
||||
|
||||
```bash
|
||||
git add ARCHITECTURE.md
|
||||
git commit -m "docs: note future journal module and versioned API in architecture"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 11: Vault write-back
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `C:\Users\MattC\Documents\Obsidian Vault\Famapp\_Claude.md`
|
||||
|
||||
- [ ] **Step 1: Append a session block**
|
||||
|
||||
```markdown
|
||||
## 2026-07-03 Backlog triage
|
||||
|
||||
- Design: `docs/superpowers/specs/2026-07-03-backlog-triage-design.md`
|
||||
- Plan: `docs/superpowers/plans/2026-07-03-backlog-triage.md`
|
||||
- Issue map: `docs/issues-map.md` (Gitea `ginnoir/famapp`)
|
||||
- P1 order: bugs 80–84 → API 87 → rich-text notes 85 → journal 86 → agent 88
|
||||
- P2/P3: Gitea issues only until their batch
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Do not commit vault files into famapp git**
|
||||
|
||||
---
|
||||
|
||||
### Task 12: Final verification
|
||||
|
||||
- [ ] **Step 1: Verify Gitea**
|
||||
|
||||
Open `https://gitea.ginnoir.com/ginnoir/famapp/issues` — confirm open issues exist for all design IDs in `docs/issues-map.md`, labels present, dependencies on #5/#13/#14 children look correct.
|
||||
|
||||
- [ ] **Step 2: Verify repo files**
|
||||
|
||||
```bash
|
||||
git status
|
||||
ls docs/tasks/8*.md
|
||||
ls docs/decisions/0004*.md docs/decisions/0005*.md docs/decisions/0006*.md
|
||||
```
|
||||
|
||||
Expected: `80`–`88` present, ADR stubs present, clean working tree (except unrelated untracked files).
|
||||
|
||||
- [ ] **Step 3: Cross-link pass**
|
||||
|
||||
In each of `80`–`88`, Notes section contains the real Gitea issue URL or `#N` from `docs/issues-map.md`. Fix and amend only if this commit is still local and was created by this session; otherwise new commit `docs: link task briefs to Gitea issue numbers`.
|
||||
|
||||
---
|
||||
|
||||
## Self-review (plan vs spec)
|
||||
|
||||
| Spec requirement | Plan task |
|
||||
| ------------------------------- | ---------------------------------------------------- |
|
||||
| Issues for all 19 items | Tasks 2–4 |
|
||||
| Epic children for #10, #13, #14 | Task 3 |
|
||||
| Light checklists P2/P3 epics | Task 4 |
|
||||
| Labels + priority | Task 1 |
|
||||
| P1 task briefs 80–88 | Tasks 5–6 |
|
||||
| Phase 9 README | Task 7 |
|
||||
| ADR stubs 0004–0006 | Task 8 |
|
||||
| STATUS update | Task 9 |
|
||||
| ARCHITECTURE light touch | Task 10 |
|
||||
| E2E plans in issues/briefs | Embedded in issue bodies + brief acceptance criteria |
|
||||
| No feature code | Entire plan is docs/issues only |
|
||||
| Fallback drafts | Task 1/4 fallback |
|
||||
| Vault write-back | Task 11 |
|
||||
| API early order in STATUS | Task 9 |
|
||||
|
||||
No TBD placeholders remain in executable steps. Issue bodies for epic children are specified by title + required sections; executor fills `<brief>` and Gitea parent links using the map.
|
||||
Reference in New Issue
Block a user