# Release v0.24.x - Changelog

Released: YYYY-MM-DD

## Overview

Bidirectional peer registration — adding a peer on one instance now automatically registers the connection on both sides.

## Features

### Bidirectional peer discovery
- **Announce-on-add** — when you add a peer, your instance announces itself to the remote so both sides know about each other
- **Announce-on-probe** — every 30s health probe re-announces to the remote, keeping both sides in sync even after restarts
- **Deduplication** — peers are matched by `instanceId` (primary) or `address:port` (fallback) to prevent duplicate entries
- **New endpoint** `POST /api/instances/peers/announce` — receives peer announcements with Zod-validated `instanceId`, `port`, and optional `name`
- **instanceId tracking** — peer records now store the remote's `instanceId` from health responses for reliable identity matching

### Navigation completeness
- **Added missing CoS nav links** — Jobs and Streaks sub-pages now appear in the sidebar under Chief of Staff, matching the tab bar

## Improvements

### Consolidated redundant autonomous jobs
- **JIRA Sprint Manager** — merged "JIRA App Maintenance" and "JIRA Ticket Implementation" into a single phased job that triages sprint tickets first, then implements the top-priority ready ticket
- **Brain Review** — merged "Brain Inbox Processing" and "Brain Project Review" into a single job that processes inbox items and reviews active projects in one pass

### Script jobs for autonomous job system
- **Script job type** — autonomous jobs can now be marked as `type: 'script'` to execute directly without spawning an AI agent
- **Autobiography prompt converted** — the autobiography story prompt job now runs as a simple cron-like script instead of invoking an LLM, saving resources for jobs that don't need AI processing
- **Handler registry** — script jobs reference registered handler functions via `scriptHandler` field, enabling easy addition of more scripted jobs
