mirror of
https://github.com/razzant/ouroboros.git
synced 2026-10-03 12:18:39 +00:00
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> |
||
|---|---|---|
| .. | ||
| about | ||
| architecture | ||
| archive/first-generation | ||
| assets | ||
| benchmarks | ||
| development | ||
| examples/author_ui_kit | ||
| history/first-48-hours | ||
| install | ||
| inventories | ||
| paper | ||
| .nojekyll | ||
| 404.html | ||
| ANDROID_INSTALL.md | ||
| ANDROID_RECOVERY.md | ||
| ARCHITECTURE.md | ||
| CHECKLISTS.md | ||
| CHECKLISTS_ARCHIVE.md | ||
| CNAME | ||
| CREATING_SKILLS.md | ||
| DELEGATED_ADMISSION.md | ||
| DEPLOYMENT.md | ||
| DESIGN.md | ||
| DEVELOPMENT.md | ||
| DOMAIN_MAP.md | ||
| index.html | ||
| install.json | ||
| llms.txt | ||
| MODEL_SEND_OBSERVABILITY.md | ||
| PERSISTENCE.md | ||
| robots.txt | ||
| sitemap.xml | ||
| USAGE_COMPACTION.md | ||