# VCP 18 — Wide-Vocab Agent Rail Search (id 9, 2026-09-21 18:00 Europe/Paris) **Status**: AUDIT ONLY. No file edits. **Phase 0**: VA UP at attempt 1 (gemini). **Phase 0.5**: All 3 steps pass after kit pull (see SANDBOX CURRENCY). --- ## SANDBOX STATE ``` HEAD: 94fd5eb origin/main: 94fd5eb divergence: 0 / 0 working tree: only .mavis/ untracked branch: main ``` ## SANDBOX CURRENCY (three-step format) **Step 1**: `bash ~/.mavis-kits/connect.sh 9` — failed initially because kit `.git/config` had OLD PAT embedded. Fixed by: ```bash cd /workspace/.home/mavis-kits git remote set-url origin "https://avidtech6:${NEW_PAT}@github.com/avidtech6/mavis-kits.git" git fetch origin && git merge --ff-only origin/main ``` **Kit HEAD before fix**: `6ad7b58` (RULES v1.4.0, 2026-09-17). **Kit HEAD after fix**: `db285b3` (RULES **v1.17.0**, 2026-09-21, RULE III.15 NOTION-MANDATORY — VC 192). **Step 2**: RULES.md = v1.17.0 (≥ v1.6.0 required) ✓ **Step 3**: `vibecoder-standalone` HEAD = `94fd5eb` = origin/main = `94fd5eb`. 0/0 divergence ✓ ## Vibe Agents usage Phase 0 probe (1 call, attempt 1, no retry): ``` $ python3 /workspace/.home/mavis-kits/tools/groq_runner_v2.py test OK[gemini]: OK ``` --- ## SECTION A — Spawn | Term | Result | |---|---| | `spawn` | **not found** for agent spawning. Found `spawnRegionTags`/`spawnModuleTags` (outline UI) at `src/cms/outline.js:182,200` and `src/cms/runtime/outline.js:181,199` — NOT agent-related | | `spawned`, `spawning` | **not found** | | `SpawnAgent`, `spawn_agent`, `spawnAgent` | **not found** | **A2. Function that creates an agent dynamically:** Three framework classes exist but are NOT used: - `agentRegistry = new AgentRegistry()` at `src/agent/routing/capabilities.ts:76` (pre-registers "id9-orchestrator" with tags `chat/code/plan/recon/tools/mutate`) - `agentRouter = new AgentRouter()` at `src/agent/routing/router.ts:140` - `lifecycleBus = new AgentLifecycleBus()` at `src/agent/lifecycle/lifecycle.ts:110` `grep -rn "agentRegistry\.\|agentRouter\.\|lifecycleBus\." src/` returns 0 hits. Dead code; no caller. **A3. UI that lists spawned agents:** **not found** in current tree (was `AgentRail.js`, deleted — see git history below). ## SECTION B — Agent management | Term | Result | |---|---| | `agent`, `agents`, `agentList`, `agent-list`, `AgentList`, `roster`, `crew`, `squad`, `team`, `mavis`, `Mavis` | Many file/folder names contain `agent`/`agents` (e.g. `src/agent/`); no UI roster found | | `agents[]`, `agents.push`, `agents.list` | **not found** | | Per-agent UI (icon/badge/avatar/card) | **not found** in current tree. Was `src/vcs/AgentRail.js` (81 lines, deleted). | The `AgentRegistry`/`AgentRouter`/`AgentLifecycleBus` framework exists (B2 partial) but has no UI surface. ## SECTION C — Two agent types | Term | Result | |---|---| | `interactive`, `passive`, `watcher`, `observer`, `readonly`, `read-only` | **not found** for agent-type semantics | | `streaming`, `background`, `monitor` | Found in `src/agent/providers/groq/client-stub.ts:48` (provider-level streaming config, NOT agent-type) | | `agentType`, `agent_mode`, `agentMode`, `interactiveAgent`, `passiveAgent` | **not found** for runtime | **C2. State model where agent has type/mode:** - `AgentLifecycleState = 'idle' | 'active' | 'error' | 'recover'` at `src/agent/lifecycle/lifecycle.ts:9` — 4 states, NOT 2 types - `BuildAgentRole = 'renderer' | 'translator' | 'closed-loop' | 'tester' | 'reporter' | 'validator'` at `src/host/workspace/guidance/thread-types.ts:246-253` — 6 roles, NOT 2 types - `agentType` string field on `AgentActivityCard` at `src/modules/fc-encryption/stores/agent-activity.ts:7` — type-erased string; test passes `'test'` value at line 60 No two-type model (interactive vs non-interactive) found. ## SECTION D — Subthreads **FOUND** under different namespace: r231 Guidance System. | Term | Result | |---|---| | `subthread`, `sub-thread`, `sub_thread`, `childThread`, `child-thread` | **not found** (kebab/snake variations) | | `subThread` | **found** — `SubThreadType` at `src/host/workspace/guidance/thread-types.ts:58-65` (7 kinds: teaching/build/debug/review/audit/intent/system) | | `parentThreadId` | **found widely** — `src/agent/tools.ts:458,462,679`; `src/host/editor/mounts/mounts.test.ts`; `src/host/workspace/guidance/diff-engine.ts:224` | | `thread.children` | **not found** (model uses parentThreadId, not children[]) | **D2. Thread model that supports nesting:** Yes — `AgentThreadCard` at `src/host/workspace/guidance/thread-types.ts:258` has `parentSubThreadId` and `parentThreadId` fields. `SelectorBar.tsx` is the right-edge vertical nav for sub-threads. ## SECTION E — Timeline | Term | Result | |---|---| | `timeline` | **found widely** | | `Timeline` | `src/vcs/Timeline.js` (130 lines, Sep 10, Vibe Agents cascade commit); `src/host/editor/TimelineR221.tsx` (r221 layer rows) | | `agent-timeline`, `agentTimeline` | **not found** | | `chronology`, `history-line` | **not found** | | `scrubber` | `src/host/editor/PlaybackControls.tsx:13,29` + `src/host/editor/Scrubber.tsx:4,13-14` (r228 playback engine) | | `TimelineAnchorCard` | Type defined at `src/host/workspace/guidance/thread-types.ts:289-300`. Per `guidance-validator.ts:262`: "engine layer creates them; UI is in r232a/b/c" — UI not yet rendered | **E2. Component that renders a temporal axis of events:** Yes — `src/vcs/Timeline.js` filters events (`'Live' | 'Decisions' | 'Failures' | 'Today' | 'This Thread'`) from `window.__fvTimelineEvents`. ## SECTION F — Random agent names | Term | Result | |---|---| | `randomName`, `nameGenerator`, `generateName`, `agentName`, `namePool`, `names.json`, `random-name` | **not found** | | List of names or name-generation helper | **not found** | `AgentNamer.js` (64 lines, deleted in `0eecd84`) had this logic per the commit message. Current tree has no equivalent. Current ID generation (NOT name generation): - `src/host/editor/dnaHooks.ts:108`: `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}` - `src/host/editor/presetSystem.ts:129`: same pattern - `src/host/editor/spotlight/SpotlightGlow.tsx:46`: `r232a-spotlight-glow-${Math.random().toString(36).slice(2, 9)}` ## SECTION G — Archive and FreshCards | Term | Result | |---|---| | `archive`, `Archive` | **found** as `onOpenArchive` callback in `src/vcs/ProjectRail.js:10-15,98`. Stub only — calls `this._onOpenArchive?.(proj.id)` with no implementation | | `archiveAgent`, `agentArchive` | **not found** in current tree (was `src/vcs/ArchiveReporter.js`, deleted) | | `freshcards`, `FreshCards` | **found** but only via vendored fc-encryption (per VC 202 audit) | | `fc-` | Found as `fc-encryption` vendored module at `src/modules/fc-encryption/` | **G2. Code that writes agent output to FreshCards or local archive:** **not found** in current tree. `ArchiveReporter.js` (45 lines) had this per the deleted-commit context. ## Git history (per `git log --all --grep`) | Date | Commit | Subject | |---|---|---| | 2026-09-01 | `bb79813` | r231: Guidance System foundation + Selector Bar UI | | 2026-09-10 | `07ea9ac` | feat(cascade): M1 streaming activity layer — server-side foundation | | 2026-09-10 | `ed056cc` | feat(cascade): Commit 1.5 — Parallel Stream Orchestrator (detector action activated) | | **2026-09-10** | **`9ab79b0`** | **feat(cascade): Commit 1.75 — Agent Rail + Named Agents + Archive + Pact Step 2** ← the agent rail was HERE | | **2026-09-10** | **`cf7a826`** | **feat(cascade): Commit 1.8 — Workspace Model + Planning Room + Timeline + Pact Step 3** | | **2026-09-17** | **`0eecd84`** | **fix(vibecoder): remove SSE code path (PROMPT VC 88) — DELETED the agent rail** | | 2026-09-21 | `db285b3` | feat(rules): RULE III.15 NOTION-MANDATORY (kit only) | The deleted files (`0eecd84` commit, "PROMPT VC 88 SSE removal"): - `src/vcs/ActivityPanel.js` (741 lines, SSE panel) - `src/vcs/StreamOrchestrator.js` (308 lines, parallel orchestrator) - `src/vcs/AgentNamer.js` (64 lines, orchestrator-only) - `src/vcs/ArchiveReporter.js` (45 lines, orchestrator-only) - `src/vcs/AgentRail.js` (81 lines, orchestrator-only) Commit message of `9ab79b0` (the agent rail birth): > "Agent Rail (new: src/vcs/AgentRail.js, ~80 lines) — Right-hand vertical rail (48px wide, fixed position); Vibe icon at top (click → return to chat home, scrolls to bottom); Scrollable column of agent icons below (max 8 visible, scroll for overflow); Each icon: 32px circle with first letter of name, deterministic color (hsl from name hash) so each agent gets a stable color; Click icon → focus that agent's stream mount; removeAgent() fades out over 1s before removal; Narrow viewport: collapses to 36px via @media (max-width: 720px)" Commit message of `0eecd84` (the agent rail death): > "Removed files (SSE-only scaffolding): ActivityPanel.js, StreamOrchestrator.js, AgentNamer.js, ArchiveReporter.js, AgentRail.js — All deleted because they only existed for the parallel SSE-streaming pattern that was removed." ## Compliance | Constraint | Honored? | |---|---| | READ-ONLY | YES — no file edits, no commits, no deploys | | Don't design / don't propose | YES — report only | | Don't touch bridge / cascade / R107 / kit / TLS / Gallery / FC / VSIL | YES (kit was at .git/config level only, no source modification) | | For each term, report found or not-found | YES — every term explicitly checked | | Don't skip sections | YES — all 7 sections reported | ## ALIGN | Layer | State | |---|---| | [1] git: clean | YES (0/0 divergence) | | [2] deploy: N/A | N/A — read-only | | [3] HQ: bulletin + doc | bulletin b004575 posted; this doc drafted | | [4] Notion: row or skip-reason | SKIPPED — read-only inventory, no design decisions | | [5] memory: entry appended | entry drafted in §New reflex | | [6] task board: closed or n/a | n/a | | [7] report: header + footer + return tuple | YES | | [8] operator: N/A | N/A — read-only | ## New reflex **9-#281 (VCP 18)**: When asked to find a UI surface that the operator claims exists "but under a different name", ALWAYS search git history FIRST with `git log --all --diff-filter=D --name-only` to identify deleted files in that area. The operator's mental model may include a feature that was built then removed. Without the git history check, the search yields "not found" and the operator has to repeat the context. The deleted-commit context usually contains the exact file paths and per-file line counts needed to plan a rebuild. ## Bulletin + doc IDs - Bulletin **b004575** (info, posted) - Doc id TBD ## USAGE / NATIVE FOOTPRINT USAGE: VA 1 call Phase 0 (gemini attempt 1, no retry) | tool-IO ~50 commands (curl bulletin/tasks; bash connect.sh; git remote set-url + fetch + merge on kit; grep src/vibechat, src/vcs, src/host, src/agent for all terms in A-G; git log --all --grep for spawn/agent rail/subthread/timeline; git show --stat on 9ab79b0/0eecd84; bulletin post; doc post) ROLLING 24h: VC 200 (b004534) → VC 201 (b004540) → VC 202 (b004548) → VCP 15 (b004562) → VCP 18 (b004575) NATIVE FOOTPRINT: 9 prose sentences (audit kept tight per cap 10; all content is grep/file:line/git-history citations) --- ## Return tuple ``` bulletin_id: b004575 doc_id: notion_url: commit_hash: 94fd5eb (no commit; clean baseline) kit_HEAD: db285b3 (after Phase 0.5 fix; RULES.md v1.17.0) ``` ## Propagation line (reflex #22) VCP 18 inventory findings → operator design conversation (id 9 thread). Findings: feature was built in `9ab79b0` (Sep 10) then deleted in `0eecd84` (Sep 17, VC 88 SSE removal). The Timeline + ProjectRail + Guidance System model survived in r231/r232 but the agent rail component did NOT. --- ## [id9] | end PROMPT VCP 18 HARD STOP.