> For the complete documentation index, see [llms.txt](https://faction-os.gitbook.io/faction-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/sessions/phase18-session09-web-quest-board-typed-cards/tasks.md).

# Task Checklist

**Session ID**: `phase18-session09-web-quest-board-typed-cards` **Total Tasks**: 21 **Estimated Duration**: 3-4 hours **Created**: 2026-06-10

***

## Legend

* `[x]` = Completed
* `[ ]` = Pending
* `[P]` = Parallelizable (can run with other \[P] tasks)
* `[SNNMM]` = Session reference (NN=phase number, MM=session number)
* `TNNN` = Task ID

***

## Progress Summary

| Category       | Total  | Done   | Remaining |
| -------------- | ------ | ------ | --------- |
| Setup          | 3      | 3      | 0         |
| Foundation     | 5      | 5      | 0         |
| Implementation | 9      | 9      | 0         |
| Testing        | 4      | 4      | 0         |
| **Total**      | **21** | **21** | **0**     |

***

## Setup (3 tasks)

Initial configuration and environment preparation.

* [x] T001 \[S1809] Verify shipped suggestion snapshot, card source, scan status, summary, and WebSocket event contracts before consuming them in the web package (`packages/protocol/src/suggestions.ts`)
* [x] T002 \[S1809] Review current string-only Quest Board store state and legacy `idle_suggestion` reducer behavior before replacing the model (`apps/web/src/store/useGameStore.ts`)
* [x] T003 \[S1809] Review the current Quest Board component layout, cockpit shell constraints, and state expectations before adding typed card rendering (`apps/web/src/components/QuestBoard.tsx`)

***

## Foundation (5 tasks)

Core structures and base implementations.

* [x] T004 \[S1809] \[P] Create typed Quest Board card, summary, source label, metadata, and scan-state display models with types matching declared protocol contracts and exhaustive enum handling (`apps/web/src/lib/questBoard.ts`)
* [x] T005 \[S1809] Implement pure `suggestion_update` snapshot normalization for idle suggestions, codebase issues, session follow-ups, analysis items, and project scan items with item-level malformed-entry dropping before store mutation (`apps/web/src/lib/questBoard.ts`)
* [x] T006 \[S1809] Implement card ordering, bounding, summary count derivation, severity buckets, scan-in-progress derivation, and generated/created timestamp normalization with deterministic ordering (`apps/web/src/lib/questBoard.ts`)
* [x] T007 \[S1809] Implement safe metadata helpers for source labels, category/type labels, priority/severity labels, relative file and line labels, and timestamp copy without exposing absolute paths or raw payloads (`apps/web/src/lib/questBoard.ts`)
* [x] T008 \[S1809] Implement legacy `idle_suggestion` compatibility normalization into typed fallback cards with bounded pagination, deterministic ordering, and clear canonical-snapshot precedence (`apps/web/src/lib/questBoard.ts`)

***

## Implementation (9 tasks)

Main feature implementation.

* [x] T009 \[S1809] Replace string-only `questSuggestions` store state with typed Quest Board cards, summary, scan status, updated timestamp, loading/error metadata, and reset defaults (`apps/web/src/store/useGameStore.ts`)
* [x] T010 \[S1809] Handle `suggestion_update` events through pure normalization before Zustand mutation with schema-validated input and explicit error mapping (`apps/web/src/store/useGameStore.ts`)
* [x] T011 \[S1809] Preserve legacy `idle_suggestion` handling as compatibility fallback without overriding newer canonical snapshot state and with state reset or revalidation on re-entry (`apps/web/src/store/useGameStore.ts`)
* [x] T012 \[S1809] Render Quest Board header summary counts and severity buckets from typed store summary instead of raw array length (`apps/web/src/components/QuestBoard.tsx`)
* [x] T013 \[S1809] Render typed multi-source card bodies for idle, codebase, follow-up, analysis, and project scan cards with source type, title/message, category/type, priority/severity, file/line, and timestamp metadata (`apps/web/src/components/QuestBoard.tsx`)
* [x] T014 \[S1809] Add explicit loading, empty, offline/disconnected, malformed snapshot, and scan-in-progress panel states without blank rendering or text overlap (`apps/web/src/components/QuestBoard.tsx`)
* [x] T015 \[S1809] Keep Quest Board visually distinct from Mission Log and Notice Board surfaces while preserving stable scroll-region dimensions and responsive wrapping (`apps/web/src/components/QuestBoard.tsx`)
* [x] T016 \[S1809] Add non-actionable card accessibility semantics, labels, and focus-safe structure while deferring accept/dismiss controls to Session 10 (`apps/web/src/components/QuestBoard.tsx`)
* [x] T017 \[S1809] Ensure Quest Board state and component output avoid hosted telemetry, entitlement copy, absolute scan roots, raw prompts beyond bounded card text, tokens, secrets, and raw command output (`apps/web/src/lib/questBoard.ts`)

***

## Testing (4 tasks)

Verification and quality assurance.

* [x] T018 \[S1809] \[P] Write pure normalization tests for mixed-source snapshots, malformed entry dropping, ordering, bounds, summary counts, severity buckets, safe file labels, and legacy mapping (`apps/web/tests/questBoard.test.ts`)
* [x] T019 \[S1809] \[P] Write store reducer tests for canonical `suggestion_update`, malformed payload handling, scan status, summary state, legacy fallback, and reset behavior (`apps/web/tests/questBoardStore.test.ts`)
* [x] T020 \[S1809] Write component tests for typed card rendering, metadata display, summary badges, empty/loading/offline/malformed states, and scan-in-progress state (`apps/web/tests/QuestBoard.test.tsx`)
* [x] T021 \[S1809] Run focused Quest Board tests, `npm --workspace apps/web run typecheck`, ASCII/LF validation, and update implementation notes with evidence (`apps/web/tests/QuestBoard.test.tsx`)

***

## Completion Checklist

Before marking session complete:

* [x] All tasks marked `[x]`
* [x] All tests passing
* [x] All files ASCII-encoded
* [x] implementation-notes.md updated
* [x] Ready for the validate workflow step

***

## Next Steps

Run the implement workflow step to begin AI-led implementation.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/sessions/phase18-session09-web-quest-board-typed-cards/tasks.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
