> 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-session08-local-war-room-bridge-and-room-notice-convergence/tasks.md).

# Task Checklist

**Session ID**: `phase17-session08-local-war-room-bridge-and-room-notice-convergence` **Total Tasks**: 24 **Estimated Duration**: 3-4 hours **Created**: 2026-06-05

***

## Legend

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

***

## Progress Summary

| Category       | Total  | Done   | Remaining |
| -------------- | ------ | ------ | --------- |
| Setup          | 4      | 4      | 0         |
| Foundation     | 6      | 6      | 0         |
| Implementation | 10     | 10     | 0         |
| Testing        | 4      | 4      | 0         |
| **Total**      | **24** | **24** | **0**     |

***

## Setup (4 tasks)

Current bridge inventory, boundary review, and existing test-harness review.

### apps/server

* [x] T001 \[S1708] Review canonical Notice Board manager ingest, batch ingest, resolution, active-room, and debug behavior (`apps/server/src/managers/noticeBoard.ts`)
* [x] T002 \[S1708] Review Notice Board REST and WebSocket post/resolve emit paths for bridge injection points (`apps/server/src/routes/noticeBoard.ts`, `apps/server/src/ws/handlers.ts`)

### apps/web

* [x] T003 \[S1708] Review War Room panel room-notice send flow, in-flight guards, local auth helpers, and Worker frame handling (`apps/web/src/components/WarRoomPanel.tsx`, `apps/web/src/store/useWarRoomStore.ts`, `apps/web/src/lib/localAuth.ts`)
* [x] T004 \[S1708] Review Worker Notice Board relay contracts and existing protocol tests before adding local convergence behavior (`packages/protocol/src/warroom.ts`, `packages/protocol/tests/warroomNoticeRelay.test.ts`)

***

## Foundation (6 tasks)

Server bridge contracts and web helper scaffolding.

### apps/server

* [x] T005 \[S1708] \[P] Create local Notice Board bridge scaffold with injected relay sender, active-room resolver, clock, and disconnected no-op mode (`apps/server/src/lib/warRoomNoticeBridge.ts`)
* [x] T006 \[S1708] Define bridge input handling for remote message, resolution, catch-up, and room-notice frames with schema-validated input and explicit error mapping (`apps/server/src/lib/warRoomNoticeBridge.ts`)
* [x] T007 \[S1708] Add bounded remote provenance model and debug accessor without storing raw Worker payloads (`apps/server/src/managers/noticeBoard.ts`)

### apps/web

* [x] T008 \[S1708] \[P] Create local Notice Board API helper with local auth headers, timeout handling, compact failures, and no raw response dumps (`apps/web/src/lib/noticeBoardApi.ts`)
* [x] T009 \[S1708] \[P] Create War Room Notice Board convergence helper for room-notice announcement conversion and Worker frame merge preparation (`apps/web/src/lib/warRoomNoticeConvergence.ts`)

### packages/protocol

* [x] T010 \[S1708] Add shared room-notice conversion vocabulary only if needed to avoid duplicated announcement mapping (`packages/protocol/src/warroom.ts`)

***

## Implementation (10 tasks)

Bridge send, remote ingest, hydration, and web convergence.

### apps/server

* [x] T011 \[S1708] Wire canonical local post flow to bridge outbound `notice_board_message` send with duplicate-trigger prevention while in-flight (`apps/server/src/routes/noticeBoard.ts`)
* [x] T012 \[S1708] Wire canonical local resolve flow to bridge outbound `notice_resolved` send with duplicate-trigger prevention while in-flight (`apps/server/src/routes/noticeBoard.ts`)
* [x] T013 \[S1708] Wire WebSocket `post_notice` compatibility path through bridge-aware canonical posting while preserving active-room hydration (`apps/server/src/ws/handlers.ts`)
* [x] T014 \[S1708] Implement remote `notice_board_message` ingest into the canonical manager once by id with provenance and local broadcast (`apps/server/src/lib/warRoomNoticeBridge.ts`)
* [x] T015 \[S1708] Implement remote `notice_resolved` ingest for the active room with unknown-id and wrong-room no-op handling (`apps/server/src/lib/warRoomNoticeBridge.ts`)
* [x] T016 \[S1708] Implement remote `notice_board_catchup` batch ingest with bounded arrays, deterministic ordering, dedupe by id, and one local hydrate after accepted changes (`apps/server/src/lib/warRoomNoticeBridge.ts`)
* [x] T017 \[S1708] Instantiate and inject the bridge with standalone no-op defaults without adding local Worker proxy routes (`apps/server/src/server.ts`)

### apps/web

* [x] T018 \[S1708] Route War Room panel safe room-notice send through canonical `/notice-board` announcement creation with state reset or revalidation on re-entry (`apps/web/src/store/useWarRoomStore.ts`)
* [x] T019 \[S1708] Merge Worker `notice_board_message`, `notice_resolved`, and `notice_board_catchup` frames into Notice Board state with scoped rollback on error (`apps/web/src/store/useWarRoomStore.ts`)
* [x] T020 \[S1708] Preserve blocked-input copy, disconnected feedback, and Worker send behavior while canonical posting is added (`apps/web/src/components/WarRoomPanel.tsx`, `apps/web/src/lib/warRoomFederation.ts`)

***

## Testing (4 tasks)

Focused bridge and convergence verification plus artifact validation.

### apps/server

* [x] T021 \[S1708] \[P] Add server bridge tests for local-to-remote send, remote message ingest, dedupe, catch-up hydration, resolution, provenance, and standalone mode (`apps/server/tests/warRoomNoticeBridge.test.ts`)

### apps/web

* [x] T022 \[S1708] \[P] Add web convergence tests for room-notice announcement conversion, blocked input, catch-up merge, resolution merge, and duplicate-trigger prevention (`apps/web/tests/warRoomNoticeConvergence.test.ts`, `apps/web/tests/warRoomStore.test.ts`)
* [x] T023 \[S1708] \[P] Add War Room panel tests for accepted canonical announcement posts, local auth use, failed local post feedback, and preserved Worker socket send (`apps/web/tests/WarRoomPanel.test.tsx`)

### repo

* [x] T024 \[S1708] Run focused server/web/protocol tests plus ASCII and LF validation for all Session 08 artifacts (`apps/server/tests/warRoomNoticeBridge.test.ts`, `apps/web/tests/warRoomNoticeConvergence.test.ts`, `apps/web/tests/warRoomStore.test.ts`, `apps/web/tests/WarRoomPanel.test.tsx`, `packages/protocol/tests/warroomNoticeRelay.test.ts`, `.spec_system/specs/phase17-session08-local-war-room-bridge-and-room-notice-convergence`)

***

## 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-session08-local-war-room-bridge-and-room-notice-convergence/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.
