Announcements
Announcements are the PI's broadcast channel. They are short posts every member can see, pinnable to the top of the stream. Members read. PIs compose and post directly from the Lab Overview, with no password prompt and no timed session to unlock first.
Who can post
Posting is PI only. The compose form does not render for member accounts, and the underlying write is rejected for any account without account_type === "lab_head". Reading is open to every member. Everyone in the lab sees the same announcement stream.
Posting an announcement
The composer lives in the Post an announcement section on the Lab Overview page. A logged-in PI can type and post immediately. There is no password and no edit-session unlock. The PI's account sign-in is the only gate.
- Type the message in the text area. Drafts are persisted to
sessionStorageas you type, so an accidental tab close or refresh does not lose an in-progress announcement. - Optionally check Pin to top to keep the announcement at the head of the stream regardless of post date.
- Click Post announcement. The post goes out immediately and every lab member receives a notification.
Pin, edit, and delete
Once an announcement is published, the author has three actions on it.
- Pin / Unpin. A pinned announcement floats to the top of the stream regardless of post date. Unpinning lets it slide back into chronological order.
- Edit. Opens the composer pre-filled with the current text. Save to update. When the text changes, every recipient's notification preview refreshes to match the new body.
- Delete. Removes the announcement after a native confirm prompt. Recipients' notification rows for that announcement are also cleaned up so the bell count stays accurate.
Only the original author can edit or delete an announcement. A second PI cannot edit another PI's post. They can post their own follow-up.
Draft persistence
The composer persists in-progress text to sessionStorage as you type. The draft is keyed by the PI's username, so each PI keeps their own draft independently of any other PI. The draft restores automatically when the composer mounts again in the same browser session. It does not survive a fresh browser session, which is intentional since a long-dead draft is rarely worth resurfacing.
The audit trail
Announcement writes (post, edit, delete, pin toggle) can append a row to the lab-root audit file at _pi_audit.json. Because announcements are lab-scoped rather than owned by any single member, the audit entry lives at the lab root rather than in a per-user folder. See Audit log for the entry schema and the trail viewer.
Announcements vs. comments
Announcements and comments are both async, but they serve different purposes.
- Post an announcement when the message is for the whole lab, should persist for at least a few days, and benefits from being on the lab's shared front page. Examples include a freezer outage notice, a lab meeting rescheduled, or an equipment ordering deadline.
- Post a comment when the message is about a specific record. The comment stays tied to its host, appears in context inside the record popup, and does not need to appear on the front page. See Comments.