Files
famapp/docs/superpowers/plans/2026-07-03-backlog-triage.md
T
ginnoir 310ba48e33 docs: add backlog triage implementation plan
Executable steps for Gitea issues, P1 task briefs 80-88,
ADR stubs, and STATUS Phase 9 updates.
2026-07-03 22:31:10 -05:00

29 KiB
Raw Blame History

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/8088; 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-*.md88-*.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 00040006
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:

$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:

# 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:

<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:

<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:

<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:

<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:

<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:

<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 componentenhancement, priority/p1
  3. Wire shared editor into notes create/editenhancement, priority/p1
  4. Render note formatting on all notes surfacesenhancement, priority/p1
  5. Fix notes mobile horizontal overflowbug, 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 architectureresearch, priority/p1
  2. API surface + token auth for existing modulesfeature, priority/p1
  3. LLM agent chat UIfeature, priority/p1
  4. Map agent tool-calling to APIfeature, priority/p1
  5. Agent smoke tests with mock providerenhancement, 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-adoptresearch, priority/p1
  2. Journal schema + CRUDfeature, priority/p1
  3. Journal index (recent, browse, entry calendar)feature, priority/p1
  4. Journal entry detail and createfeature, priority/p1
  5. Journal mood tracker viewfeature, priority/p1
  6. Journal insights/stats viewsfeature, priority/p1
  7. Journal E2E happy pathenhancement, priority/p1
  8. Journal API endpointsfeature, 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 79, 1112, 1519.

  • Step 5: Commit map

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 (8084)

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
# 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
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 (8588)

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, 8084 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
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:

### 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
git add docs/tasks/README.md
git commit -m "docs: index Phase 9 post-v0.1 task briefs"

Task 8: Stub ADRs 00040006

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:

# 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):
- [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
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:

## 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 8084 (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
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
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

## 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 8084 → 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
git status
ls docs/tasks/8*.md
ls docs/decisions/0004*.md docs/decisions/0005*.md docs/decisions/0006*.md

Expected: 8088 present, ADR stubs present, clean working tree (except unrelated untracked files).

  • Step 3: Cross-link pass

In each of 8088, 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 24
Epic children for #10, #13, #14 Task 3
Light checklists P2/P3 epics Task 4
Labels + priority Task 1
P1 task briefs 8088 Tasks 56
Phase 9 README Task 7
ADR stubs 00040006 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.