> 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-session10-validation-documentation-and-handoff/phase17-validation-record.md).

# Phase 17 Validation Record

**Session ID**: `phase17-session10-validation-documentation-and-handoff` **Phase**: 17 - Notice Board Coordination Parity **Started**: 2026-06-06 **Scope**: Cross-package documentation and validation closeout

***

## Evidence Rules

This record stores safe validation summaries only. It may include command names, statuses, counts, notice ids, relative file paths, and route or event names. It must not include raw prompts, transcripts, terminal output, file contents, secrets, bearer tokens, command bodies, absolute local paths, logs, exports, replay buffers, scans, media drafts, diagnostics, backups, or quarantined historical content.

The Notice Board is explicit coordination. It is not an automatic raw event log. Manual and automatic posts must stay concise, typed, room-scoped, and privacy-safe.

***

## Acceptance Matrix

| Acceptance Check                                                                                                             | Primary Evidence                                                                             | Session 10 Evidence                          | Status   |
| ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------- | -------- |
| All 10 sessions completed                                                                                                    | Sessions 01-09 validation reports pass; Session 10 closeout artifacts complete               | This record, docs handoff, security closeout | Complete |
| `FACTIONOS_MOCK=false` CLI post appears without refresh                                                                      | Session 05 CLI command tests; Session 04 web event handling; Session 03 WebSocket post event | Real-mode manual validation                  | Complete |
| `POST /notice-board` stores a notice and emits `notice_board_message`                                                        | Session 03 routes/WebSocket validation; Session 02 manager validation                        | Real-mode manual validation                  | Complete |
| `GET /notice-board?forSession=<id>` hides notices targeted to other sessions                                                 | Session 02 manager filters; Session 04 web targeting                                         | Real-mode manual validation                  | Complete |
| `GET /notice-board/context?sessionId=<id>` returns only new unresolved relevant messages and excludes self-authored messages | Session 02 context tests; Session 06 hook context tests                                      | Real-mode manual validation                  | Complete |
| `POST /notice-board/:id/resolve` updates connected clients with `notice_resolved`                                            | Session 03 WebSocket validation; Session 04 store validation                                 | Real-mode manual validation                  | Complete |
| Persisted notices survive server restart under `FACTIONOS_HOME`                                                              | Session 02 manager validation                                                                | Real-mode restart validation                 | Complete |
| Non-critical stale notices prune and critical notices remain                                                                 | Session 02 manager validation                                                                | Focused manager validation                   | Complete |
| Related files display only safe relative paths                                                                               | Session 09 lifecycle notice tests; Session 03 route validation                               | Real-mode and focused validation             | Complete |
| War Room catch-up hydrates local clients without duplicates                                                                  | Sessions 07 and 08 protocol, Worker, bridge, and convergence validation                      | Focused relay/bridge tests                   | Complete |
| `/notice`, `/notices`, and `post_notice` compatibility paths still work                                                      | Session 03 compatibility validation; Session 05 CLI coverage                                 | Real-mode manual validation                  | Complete |
| `warroom_room_notice` creates a sanitized `announcement` notice                                                              | Session 08 bridge and web convergence validation                                             | Focused bridge/convergence tests             | Complete |
| Mission name generation creates a deduped `status` notice                                                                    | Session 09 lifecycle validation                                                              | Focused server lifecycle tests               | Complete |
| Mission summary generation creates a deduped `completion` notice                                                             | Session 09 lifecycle validation                                                              | Focused server lifecycle tests               | Complete |
| No Notice Board path shares raw prompts, transcripts, terminal output, file contents, secrets, or absolute local paths       | Sessions 01-09 security reports and blocked-field tests                                      | Security closeout and focused tests          | Complete |
| Stable docs describe Notice Board as explicit coordination, not a raw event log                                              | Phase 17 PRD and prior package README updates                                                | Stable docs update pass                      | Complete |

***

## Prior Session Validation Summary

| Session | Area                                                                               | Prior Result | Evidence                             |
| ------- | ---------------------------------------------------------------------------------- | ------------ | ------------------------------------ |
| 01      | Protocol Notice contracts, REST types, WebSocket payloads, compatibility aliases   | PASS         | `phase17-session01.../validation.md` |
| 02      | Persistent server manager, room filtering, targeting, context, pruning, dedupe     | PASS         | `phase17-session02.../validation.md` |
| 03      | Canonical routes, compatibility routes, WebSocket hydrate/message/resolve          | PASS         | `phase17-session03.../validation.md` |
| 04      | Web store normalization, cockpit rendering, targeting, resolve state               | PASS         | `phase17-session04.../validation.md` |
| 05      | CLI post/list/filter/context/resolve commands and compact output                   | PASS         | `phase17-session05.../validation.md` |
| 06      | Hook context lookup, provider-safe output, failure fallback                        | PASS         | `phase17-session06.../validation.md` |
| 07      | Worker relay, resolution relay, catch-up, safe filtering                           | PASS         | `phase17-session07.../validation.md` |
| 08      | Local War Room bridge, remote ingest, catch-up convergence, room-notice conversion | PASS         | `phase17-session08.../validation.md` |
| 09      | Automatic mission `status` and `completion` notices                                | PASS         | `phase17-session09.../validation.md` |

***

## Canonical Route Validation

Manual real-mode validation completed on 2026-06-06 with a temporary `FACTIONOS_HOME`, `FACTIONOS_MOCK=false`, loopback server on an isolated port, and bearer auth enabled.

| Check                                         | Evidence                                                                                | Result |
| --------------------------------------------- | --------------------------------------------------------------------------------------- | ------ |
| `POST /notice-board` manual status post       | Returned `201` with notice id `notice_d4v_Juns`                                         | PASS   |
| `GET /notice-board?limit=20`                  | Returned `200` with `total: 3` during the run                                           | PASS   |
| `GET /notice-board?forSession=agent-a`        | Did not include the notice targeted only to `agent-b`                                   | PASS   |
| `GET /notice-board?forSession=agent-b`        | Included the notice targeted to `agent-b` from the run                                  | PASS   |
| `GET /notice-board/context?sessionId=agent-b` | Returned a context with `## Notice Board (New Messages)` during the first context fetch | PASS   |
| `GET /notice-board/context?sessionId=agent-a` | Did not include the notice targeted only to `agent-b`                                   | PASS   |
| `POST /notice-board/:id/resolve`              | Returned `200` for `notice_d4v_Juns`                                                    | PASS   |

## Compatibility Path Validation

Session 10 validation completed on 2026-06-06.

| Check                            | Evidence                                                                                                                         | Result |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------ |
| `POST /notice`                   | Real-mode compatibility post returned `200`                                                                                      | PASS   |
| `GET /notices`                   | Real-mode compatibility list returned `200` and included the posted notice                                                       | PASS   |
| WebSocket `post_notice`          | Real-mode socket received `notice_board_message` from a `post_notice` client message with compatibility `body`/`severity` fields | PASS   |
| Focused compatibility regression | `apps/server/tests/websocket.test.ts` and `apps/server/tests/noticeBoardRoutes.test.ts` passed compatibility coverage            | PASS   |

## WebSocket Validation

Manual real-mode WebSocket validation completed on 2026-06-06.

| Check                  | Evidence                                                               | Result |
| ---------------------- | ---------------------------------------------------------------------- | ------ |
| Initial hydrate        | Received `notice_board_hydrate` after socket connect                   | PASS   |
| Hydrate after post     | A later socket hydrate contained active-room notices after manual post | PASS   |
| Message event          | Socket received `notice_board_message` for the manual post             | PASS   |
| Targeted message event | Socket received `notice_board_message` for the targeted review notice  | PASS   |
| Resolve event          | Socket received `notice_resolved` after resolving `notice_d4v_Juns`    | PASS   |

## CLI Validation

Manual real-mode CLI validation completed on 2026-06-06 through the package `factionos` bin with `FACTIONOS_SERVER_URL`, `FACTIONOS_AUTH_TOKEN`, and `FACTIONOS_SESSION_ID` set.

| Check                                        | Evidence                                                                                                    | Result |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ------ |
| `factionos notice post status ...`           | Exit status `0`; route state updated through the live server                                                | PASS   |
| `factionos notice list --type status`        | Exit status `0`; printed compact Notice Board output with one safe related file                             | PASS   |
| `factionos notice context --session agent-b` | Exit status `0`; printed bounded empty-context output after the previous context fetch marked messages read | PASS   |

## Hook Context Validation

Session 10 focused validation completed on 2026-06-06.

| Check                    | Evidence                                                                                                        | Result |
| ------------------------ | --------------------------------------------------------------------------------------------------------------- | ------ |
| Bounded context lookup   | `apps/hooks/tests/heroActiveNoticeContext.test.js` passed Notice Board context lookup coverage                  | PASS   |
| Provider-specific output | `apps/hooks/tests/heroActiveNoticeContext.test.js` passed Claude-compatible and silent provider output behavior | PASS   |
| Empty context behavior   | `apps/hooks/tests/heroActiveNoticeContext.test.js` passed empty Notice Board context behavior                   | PASS   |
| Failure fallback         | `apps/hooks/tests/heroActiveNoticeContext.test.js` passed failure-to-no-context fallback behavior               | PASS   |

## War Room Relay And Catch-up Validation

Session 10 focused validation completed on 2026-06-06.

| Check                                           | Evidence                                                                                                                                                                             | Result |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ |
| `warroom_room_notice` conversion                | `apps/server/tests/warRoomNoticeBridge.test.ts`, `apps/web/tests/warRoomNoticeConvergence.test.ts`, and `apps/web/tests/warRoomStore.test.ts` passed room-notice conversion coverage | PASS   |
| Worker relay and resolution                     | `apps/warroom/tests/noticeBoardRelay.test.ts` passed                                                                                                                                 | PASS   |
| Protocol relay validation and catch-up ordering | `packages/protocol/tests/warroomNoticeRelay.test.ts` passed                                                                                                                          | PASS   |
| Unsafe relay history filtering                  | Worker and protocol relay suites passed blocked-field and filtered-history coverage                                                                                                  | PASS   |

## Persistence, Pruning, And Critical Retention

Session 10 validation completed on 2026-06-06.

| Check                             | Evidence                                                                                                                                                                                       | Result |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| Persisted notices survive restart | Stopped and restarted the real-mode server with the same temporary `FACTIONOS_HOME`; `GET /notice-board?includeResolved=true` returned `200` with `total: 3` and preserved related-file counts | PASS   |
| Non-critical stale pruning        | `apps/server/tests/noticeBoard.test.ts` focused suite passed; pruning test removed stale low-priority, stale resolved, and expired notices                                                     | PASS   |
| Critical retention                | `apps/server/tests/noticeBoard.test.ts` focused suite passed; critical unresolved notice remained after prune                                                                                  | PASS   |
| Route-level invalid filters       | `apps/server/tests/noticeBoardRoutes.test.ts` focused suite passed; invalid filters returned compact `invalid_request` envelopes                                                               | PASS   |

## Related-file Safety

Session 10 validation completed on 2026-06-06.

| Check                                           | Evidence                                                                                                                                                                   | Result |
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| Safe relative file is retained                  | Real-mode manual post retained `docs/api/README_api.md` as the only related file                                                                                           | PASS   |
| Unsafe related files rejected                   | `apps/server/tests/noticeBoardRoutes.test.ts` passed unsafe related-file cases for absolute paths, parent traversal, URLs, Windows absolute paths, and malformed path text | PASS   |
| Automatic lifecycle related files stay relative | `apps/server/tests/missionLifecycleNotices.test.ts` passed related-file filtering coverage                                                                                 | PASS   |

## Automatic Lifecycle Posts

Session 10 focused validation completed on 2026-06-06.

| Check                        | Evidence                                                                                                                             | Result |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------ |
| Automatic `status` posts     | `apps/server/tests/missionLifecycleNotices.test.ts` and `apps/server/tests/eventIngest.test.ts` passed status lifecycle coverage     | PASS   |
| Automatic `completion` posts | `apps/server/tests/missionLifecycleNotices.test.ts` and `apps/server/tests/eventIngest.test.ts` passed completion lifecycle coverage | PASS   |
| Dedupe and relay forwarding  | Focused lifecycle and event ingest suites passed dedupe and relay coverage                                                           | PASS   |

## Sensitive Payload Exclusion

Session 10 focused validation completed on 2026-06-06.

| Check                               | Evidence                                                                                                                                | Result |
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| No raw-event Notice Board spam      | `apps/server/tests/eventIngest.test.ts` passed lifecycle notices without raw-event spam                                                 | PASS   |
| Unsafe lifecycle summaries fallback | `apps/server/tests/missionLifecycleNotices.test.ts` passed unsafe summary fallback coverage                                             | PASS   |
| Unsafe Worker relay fields rejected | `packages/protocol/tests/warroomNoticeRelay.test.ts` and `apps/warroom/tests/noticeBoardRelay.test.ts` passed blocked-field coverage    | PASS   |
| Unsafe room notice text blocked     | `apps/web/tests/warRoomNoticeConvergence.test.ts` and `apps/web/tests/warRoomStore.test.ts` passed unsafe room-notice blocking coverage | PASS   |

## Focused Test Runs

| Group                                              | Command                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Result                     |
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
| Protocol Notice Board and War Room relay contracts | `npx vitest run packages/protocol/tests/notices.test.ts packages/protocol/tests/events.test.ts packages/protocol/tests/rest.test.ts packages/protocol/tests/warroomNoticeRelay.test.ts packages/protocol/tests/warroom.test.ts --project node`                                                                                                                                                                                                                                                                                                                                                                                            | PASS - 5 files, 53 tests   |
| Server, web, and Worker Notice Board behavior      | `npx vitest run apps/server/tests/noticeBoard.test.ts apps/server/tests/noticeBoardRoutes.test.ts apps/server/tests/websocket.test.ts apps/server/tests/warRoomNoticeBridge.test.ts apps/server/tests/eventIngest.test.ts apps/server/tests/missionLifecycleNotices.test.ts apps/web/tests/noticeBoardStore.test.ts apps/web/tests/NoticeBoard.test.tsx apps/web/tests/cockpitShell.test.ts apps/web/tests/CockpitShell.test.tsx apps/web/tests/warRoomNoticeConvergence.test.ts apps/web/tests/WarRoomPanel.test.tsx apps/web/tests/warRoomStore.test.ts apps/warroom/tests/noticeBoardRelay.test.ts apps/warroom/tests/warroom.test.ts` | PASS - 15 files, 155 tests |
| CLI commands and hook context behavior             | `npx vitest run apps/cli/tests/noticeCommands.test.js apps/hooks/tests/heroActiveNoticeContext.test.js --project node`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | PASS - 2 files, 21 tests   |

## Broad Gates

Session 10 broad gates completed on 2026-06-06 with Node 26.2.0.

| Gate                | Command                | Result                                                                                                 |
| ------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------ |
| Format              | `npm run format:check` | PASS - Biome checked 599 files                                                                         |
| Lint                | `npm run lint`         | PASS - Biome checked 601 files                                                                         |
| Workspace typecheck | `npm run typecheck`    | PASS - workspace typecheck completed for adapters, server, War Room, web, protocol, and public website |
| Full test suite     | `npm test`             | PASS - 194 files passed, 1 skipped; 2499 tests passed, 1 skipped                                       |

## Artifact Hygiene

Session 10 artifact checks completed on 2026-06-06.

| Check      | Scope                                        | Result                                                                        |
| ---------- | -------------------------------------------- | ----------------------------------------------------------------------------- |
| ASCII scan | Session 10 artifacts and updated stable docs | PASS - no non-ASCII characters found after normalizing `docs/ARCHITECTURE.md` |
| LF scan    | Session 10 artifacts and updated stable docs | PASS - no CRLF endings found                                                  |

## Blockers

None recorded.


---

# 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-session10-validation-documentation-and-handoff/phase17-validation-record.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.
