> 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/phase17-session04-web-store-and-cockpit-notice-board/tasks.md).

# Task Checklist

**Session ID**: `phase17-session04-web-store-and-cockpit-notice-board` **Total Tasks**: 24 **Estimated Duration**: 3-4 hours **Created**: 2026-06-05

***

## Legend

* `[x]` = Completed
* `[ ]` = Pending
* `[P]` = Parallelizable (can run with other \[P] tasks)
* `[S1704]` = Session reference (phase 17, session 04)
* `TNNN` = Task ID

***

## Progress Summary

| Category       | Total  | Done   | Remaining |
| -------------- | ------ | ------ | --------- |
| Setup          | 3      | 3      | 0         |
| Foundation     | 5      | 5      | 0         |
| Implementation | 12     | 12     | 0         |
| Testing        | 4      | 4      | 0         |
| **Total**      | **24** | **24** | **0**     |

***

## Setup (3 tasks)

Initial verification and web Notice Board placement review.

### apps/web

* [x] T001 \[S1704] Verify Session 01-03 Notice Board prerequisites against current web event consumers (`apps/web/src/store/useGameStore.ts`)
* [x] T002 \[S1704] Audit current Notice Board component, Settings severity filters, and cockpit surface metadata for real-mode state gaps (`apps/web/src/components/NoticeBoard.tsx`)
* [x] T003 \[S1704] Audit existing web test reset and component render patterns for focused store and board coverage (`apps/web/tests/ToastTray.test.tsx`)

***

## Foundation (5 tasks)

Pure helper module and test scaffolds.

### apps/web

* [x] T004 \[S1704] Create Notice Board normalization helper for canonical and compatibility notice shapes with types matching declared contract and exhaustive enum handling (`apps/web/src/lib/noticeBoard.ts`)
* [x] T005 \[S1704] Implement target visibility helper using selected hero, selected mission, active mission, known hero, and known session context with denied/restricted/revoked handling and fallback behavior (`apps/web/src/lib/noticeBoard.ts`)
* [x] T006 \[S1704] Implement Notice Board merge, dedupe, sort, and resolve helpers with idempotency protection and deterministic ordering (`apps/web/src/lib/noticeBoard.ts`)
* [x] T007 \[S1704] \[P] Add store reducer test scaffold and reusable Notice fixture factory (`apps/web/tests/noticeBoardStore.test.ts`)
* [x] T008 \[S1704] \[P] Add Notice Board component test scaffold and controlled store/settings render helpers (`apps/web/tests/NoticeBoard.test.tsx`)

***

## Implementation (12 tasks)

Store normalization, compact rendering, state copy, and accessibility.

### apps/web

* [x] T009 \[S1704] Update `notice_board_hydrate` reducer to prefer canonical `messages`, preserve compatibility `notices`, and avoid unsafe replacement with explicit loading, empty, error, and offline states (`apps/web/src/store/useGameStore.ts`)
* [x] T010 \[S1704] Update `notice_board_message` reducer to accept `message` or `notice`, normalize aliases, dedupe by id, and cap history with types matching declared contract (`apps/web/src/store/useGameStore.ts`)
* [x] T011 \[S1704] Add `notice_resolved` reducer handling for `noticeId`, `messageId`, `notice`, and `message` payloads with idempotency protection and scoped rollback on error (`apps/web/src/store/useGameStore.ts`)
* [x] T012 \[S1704] Apply web target visibility filtering where identity context is known while preserving fail-open behavior when identity is unavailable (`apps/web/src/store/useGameStore.ts`)
* [x] T013 \[S1704] Preserve seed reset and compatibility notice behavior for legacy `body`, `severity`, `targets`, `postedAt`, and `resolvedAt` fields (`apps/web/src/store/useGameStore.ts`)
* [x] T014 \[S1704] Update Notice Board data mapping to render canonical `type`, `priority`, `content`, `authorName`, and compatibility aliases with exhaustive enum handling (`apps/web/src/components/NoticeBoard.tsx`)
* [x] T015 \[S1704] Render workflow type labels, severity tint, and priority state as compact scan-friendly metadata (`apps/web/src/components/NoticeBoard.tsx`)
* [x] T016 \[S1704] Render author, age, target state, related files, and resolved state in compact rows without exposing raw unsafe developer data (`apps/web/src/components/NoticeBoard.tsx`)
* [x] T017 \[S1704] Implement distinct empty, disconnected, and filtered-out board states with explicit loading, empty, error, and offline states (`apps/web/src/components/NoticeBoard.tsx`)
* [x] T018 \[S1704] Keep the six-item compact list and add accessible expansion for additional visible history with platform-appropriate accessibility labels, focus management, and input support (`apps/web/src/components/NoticeBoard.tsx`)
* [x] T019 \[S1704] Ensure Settings severity filters remain UI tint filters and do not filter recovered workflow `type` values (`apps/web/src/components/NoticeBoard.tsx`)
* [x] T020 \[S1704] Update cockpit Notice Board loading, offline, and closed-stream metadata to match real coordination behavior (`apps/web/src/lib/cockpitShell.ts`)

***

## Testing (4 tasks)

Focused verification and quality checks.

### apps/web

* [x] T021 \[S1704] \[P] Add store tests for hydrate, message, resolve, dedupe, target visibility, ordering, and compatibility notice aliases (`apps/web/tests/noticeBoardStore.test.ts`)
* [x] T022 \[S1704] \[P] Add component tests for compact rendering, type/priority labels, related files, resolved state, empty/disconnected/filtered states, and expansion accessibility (`apps/web/tests/NoticeBoard.test.tsx`)
* [x] T023 \[S1704] Update cockpit shell tests for real Notice Board metadata and disconnected-state expectations (`apps/web/tests/CockpitShell.test.tsx`)

### Cross-package

* [x] T024 \[S1704] Run focused web tests, web typecheck, focused lint, and ASCII/LF validation for session files (`.spec_system/specs/phase17-session04-web-store-and-cockpit-notice-board/tasks.md`)

***

## 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/phase17-session04-web-store-and-cockpit-notice-board/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.
