ouroboros/docs/development
Ouroboros 867e6d1474 Name roster rows by a route-derived handle, never a stored label
A subagent row was identified everywhere by its stored `subagent_id`. Presets
mint that id by position (`primary-builder`, `fast-scout`, ...) and Duplicate
inherited it (`fast-scout_copy_pls35j`), so once the owner re-pointed a row the
id lied to the model and to the owner exactly like the display `name` retired
on 2026-08-30 did. The stored id is now a hidden join key (reviewer references,
snapshots, custody and history keep following the row through it) and every
model- and owner-facing surface names a row by its HANDLE: the route target as
stored plus the facets set on that row (effort, non-default access, `@pin`,
processing), e.g. `codex=gpt-6-astra/xhigh`. It is a pure function of ONE row,
so a new sibling never renames a neighbour and a snapshot or history record
recomputes its own name without the live roster.

- One resolver (`subagent_runtime.resolve_configured_row`) serves
  `schedule_subagent` and `delegate_start`: a handle, else a stored id as a
  permanent silent alias; a string naming two rows is a typed
  `subagent_selector_conflict`. The actor-first start resolves its argument
  before comparing it with the bound snapshot, so a handle accepted at
  scheduling is no longer refused at the physical start.
- Saves refuse two rows with an identical engine (Settings save, onboarding
  draft and completion; effective defaults, so an omitted session access IS
  `full`). Reads stay tolerant: twins saved earlier still load and are told
  apart as `<handle>~<subagent_id>`. In the editor Duplicate mints a neutral
  key and is born a draft whose card names its twin until an engine field
  changes.
- The model catalog, unavailable-route alternatives, the startup receipt, the
  start result and the dated execution facts carry handles; history is named
  from each record's OWN identity (an old record without one shows its
  recorded route target), never mapped through today's roster.
- The Review-lanes picker and its "ran as" line show the handle instead of
  `#<stored id>`; a JS twin of the projection is pinned to the Python one by a
  shared parity table, and a browser test opens the real picker at 1 and 10
  rows, desktop and phone width.

Co-authored-by: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com>
2026-09-21 01:55:48 +03:00
..
01-role-and-authority.md Merge current ouroboros documentation ownership changes 2026-09-18 02:59:41 +03:00
02-naming-and-boundaries.md fix(followup): a zone beside a run_at without an offset still asks for something 2026-09-19 10:44:33 +03:00
03-module-size-and-complexity.md docs: fit the existing module-size chapter budget 2026-09-20 23:31:32 +03:00
04-core-governance-artifacts.md docs: reconcile authored context rules and generated inventories 2026-09-18 23:54:34 +03:00
05-review-and-commit-protocol.md Integrate workflow review improvements with the current development branch 2026-09-18 14:31:09 +03:00
06-rules-by-change-class.md Name roster rows by a route-derived handle, never a stored label 2026-09-21 01:55:48 +03:00
07-managed-update-rule.md Integrate consolidated reference books and landed headroom cleanup 2026-09-18 03:52:34 +03:00
08-mutation-attribution-rule.md Preserve exact review and predecessor evidence through author continuation 2026-09-18 16:31:26 +03:00
09-process-custody-rule.md Keep Android documentation linked to the common delegation owner 2026-09-18 02:20:28 +03:00
10-platform-abstraction-rule.md Consolidate reference books and add documentation checks 2026-09-18 01:54:01 +03:00
11-design-system.md Merge remote-tracking branch 'managed/ouroboros' into claude/completion-mirror-20260920 2026-09-20 19:43:20 +03:00
12-mcp-client-integration.md Integrate landed release repairs and compressed reference books 2026-09-18 04:21:17 +03:00
13-gateway-boundary-pattern.md Consolidate reference books and add documentation checks 2026-09-18 01:54:01 +03:00
14-build-and-ci.md Add scripts/run_tests.py, the one fast local test battery 2026-09-19 02:13:01 +03:00