bd: backup 2026-03-01 23:24

This commit is contained in:
zenchantlive 2026-03-01 15:24:49 -08:00
parent 55a04c73b8
commit 659d170cb3
3 changed files with 8 additions and 5 deletions

View file

@ -1,10 +1,10 @@
{
"last_dolt_commit": "vdao6f9o6oflkanqiad3k831ks2bvtgj",
"last_dolt_commit": "ig63pb4ma8420voike4vidr1lh0ni7k8",
"last_event_id": 0,
"timestamp": "2026-03-01T22:55:54.010965494Z",
"timestamp": "2026-03-01T23:24:48.4024319Z",
"counts": {
"issues": 419,
"events": 80,
"events": 83,
"comments": 0,
"dependencies": 521,
"labels": 606,

View file

@ -78,3 +78,6 @@
{"actor":"ZenchantLive","comment":null,"created_at":"2026-03-01T14:46:07Z","event_type":"status_changed","id":78,"issue_id":"beadboard-0fi.1","new_value":"{\"notes\":\"Identity UI pattern: editable chip. Shows actor name as pill in TopBar. Click → becomes text input. Blur or Enter → snaps back to chip. Placeholder 'your name' when empty. Uses local useState for editing vs display mode.\\n\\nIMPLEMENTATION PLAN (ready to execute next session):\\n\\n1. src/components/shared/unified-shell.tsx\\n - Add import: useState (already imported)\\n - Add actor state near top of component (after existing useState declarations):\\n const [actor, setActor] = useState\\u003cstring\\u003e(() =\\u003e\\n typeof window !== 'undefined' ? (window.localStorage.getItem('bb.humanActor') ?? '') : ''\\n );\\n - Add useEffect to persist on change:\\n useEffect(() =\\u003e {\\n if (typeof window !== 'undefined') window.localStorage.setItem('bb.humanActor', actor);\\n }, [actor]);\\n - Pass to TopBar: actor={actor} onActorChange={setActor}\\n\\n2. src/components/shared/top-bar.tsx\\n - Add to TopBarProps: actor?: string; onActorChange?: (name: string) =\\u003e void;\\n - Add editable chip component inline (no new file needed):\\n - Local state: const [editing, setEditing] = useState(false);\\n - When !editing: render \\u003cbutton onClick={() =\\u003e setEditing(true)} className='...'\\u003e\\n {actor || 'your name'}\\n \\u003c/button\\u003e\\n - When editing: render \\u003cinput autoFocus value={actor} onChange={e =\\u003e onActorChange?.(e.target.value)}\\n onBlur={() =\\u003e setEditing(false)} onKeyDown={e =\\u003e e.key === 'Enter' \\u0026\\u0026 setEditing(false)}\\n placeholder='your name' className='...' /\\u003e\\n - Place the chip in TopBar right section, before ThemeToggle\\n\\n3. Run: npm run typecheck \\u0026\\u0026 npm run lint \\u0026\\u0026 npm run test\\n4. Close beadboard-0fi.1 then start beadboard-0fi.2\",\"status\":\"open\"}","old_value":"{\"id\":\"beadboard-0fi.1\",\"title\":\"Add actor state to UnifiedShell and identity input to TopBar\",\"description\":\"TASK CONTEXT\\n- Bead ID: beadboard-0fi.1\\n- Title: Add actor state to UnifiedShell and identity input to TopBar\\n- Parent/Epic: beadboard-0fi\\n- Dependencies (must be done first): none (first in phase)\\n\\nTASK CONTRACT\\n- Goal: Add a single operator identity string to UnifiedShell state, initialize it from localStorage('bb.humanActor') for backwards compatibility, persist changes back to localStorage, and render an editable identity field in TopBar so the operator can set their name once and have it flow to both drawers.\\n- Success Criteria:\\n - UnifiedShell exposes actor: string and setActor: (name: string) =\\u003e void\\n - Initial value read from localStorage('bb.humanActor') if present, otherwise empty string\\n - On change, value written back to localStorage('bb.humanActor')\\n - TopBar renders a compact text input or editable chip showing current actor name\\n - TopBar receives actor and onActorChange props (check current TopBarProps in src/components/shared/top-bar.tsx before editing)\\n - npm run typecheck passes\\n- Scope:\\n - src/components/shared/unified-shell.tsx — add useState for actor, pass to TopBar\\n - src/components/shared/top-bar.tsx — add actor input UI and props\\n- Out of Scope:\\n - Passing actor to drawers (that is beadboard-0fi.2 and beadboard-0fi.3)\\n - Server-side persistence\\n - Validation or auth\\n\\nIMPLEMENTATION CONSTRAINTS\\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\\n- Reuse shared components and logic; avoid one-off forks.\\n- Keep changes targeted and minimal for this bead.\\n\\nVERIFICATION REQUIREMENTS\\n- Required commands:\\n - npm run typecheck\\n - npm run lint\\n - npm run test\\n- Report any remaining risks and follow-up beads explicitly.\",\"notes\":\"Identity UI pattern: editable chip. Shows actor name as pill in TopBar. Click → becomes text input. Blur or Enter → snaps back to chip. Placeholder 'your name' when empty. Uses local useState for editing vs display mode.\",\"status\":\"in_progress\",\"priority\":1,\"issue_type\":\"task\",\"owner\":\"jordanlive121@gmail.com\",\"created_at\":\"2026-02-28T22:03:38Z\",\"created_by\":\"ZenchantLive\",\"updated_at\":\"2026-03-01T22:38:00Z\"}"}
{"actor":"ZenchantLive","comment":null,"created_at":"2026-03-01T14:48:00Z","event_type":"status_changed","id":79,"issue_id":"beadboard-0fi.1","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"beadboard-0fi.1\",\"title\":\"Add actor state to UnifiedShell and identity input to TopBar\",\"description\":\"TASK CONTEXT\\n- Bead ID: beadboard-0fi.1\\n- Title: Add actor state to UnifiedShell and identity input to TopBar\\n- Parent/Epic: beadboard-0fi\\n- Dependencies (must be done first): none (first in phase)\\n\\nTASK CONTRACT\\n- Goal: Add a single operator identity string to UnifiedShell state, initialize it from localStorage('bb.humanActor') for backwards compatibility, persist changes back to localStorage, and render an editable identity field in TopBar so the operator can set their name once and have it flow to both drawers.\\n- Success Criteria:\\n - UnifiedShell exposes actor: string and setActor: (name: string) =\\u003e void\\n - Initial value read from localStorage('bb.humanActor') if present, otherwise empty string\\n - On change, value written back to localStorage('bb.humanActor')\\n - TopBar renders a compact text input or editable chip showing current actor name\\n - TopBar receives actor and onActorChange props (check current TopBarProps in src/components/shared/top-bar.tsx before editing)\\n - npm run typecheck passes\\n- Scope:\\n - src/components/shared/unified-shell.tsx — add useState for actor, pass to TopBar\\n - src/components/shared/top-bar.tsx — add actor input UI and props\\n- Out of Scope:\\n - Passing actor to drawers (that is beadboard-0fi.2 and beadboard-0fi.3)\\n - Server-side persistence\\n - Validation or auth\\n\\nIMPLEMENTATION CONSTRAINTS\\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\\n- Reuse shared components and logic; avoid one-off forks.\\n- Keep changes targeted and minimal for this bead.\\n\\nVERIFICATION REQUIREMENTS\\n- Required commands:\\n - npm run typecheck\\n - npm run lint\\n - npm run test\\n- Report any remaining risks and follow-up beads explicitly.\",\"notes\":\"Identity UI pattern: editable chip. Shows actor name as pill in TopBar. Click → becomes text input. Blur or Enter → snaps back to chip. Placeholder 'your name' when empty. Uses local useState for editing vs display mode.\\n\\nIMPLEMENTATION PLAN (ready to execute next session):\\n\\n1. src/components/shared/unified-shell.tsx\\n - Add import: useState (already imported)\\n - Add actor state near top of component (after existing useState declarations):\\n const [actor, setActor] = useState\\u003cstring\\u003e(() =\\u003e\\n typeof window !== 'undefined' ? (window.localStorage.getItem('bb.humanActor') ?? '') : ''\\n );\\n - Add useEffect to persist on change:\\n useEffect(() =\\u003e {\\n if (typeof window !== 'undefined') window.localStorage.setItem('bb.humanActor', actor);\\n }, [actor]);\\n - Pass to TopBar: actor={actor} onActorChange={setActor}\\n\\n2. src/components/shared/top-bar.tsx\\n - Add to TopBarProps: actor?: string; onActorChange?: (name: string) =\\u003e void;\\n - Add editable chip component inline (no new file needed):\\n - Local state: const [editing, setEditing] = useState(false);\\n - When !editing: render \\u003cbutton onClick={() =\\u003e setEditing(true)} className='...'\\u003e\\n {actor || 'your name'}\\n \\u003c/button\\u003e\\n - When editing: render \\u003cinput autoFocus value={actor} onChange={e =\\u003e onActorChange?.(e.target.value)}\\n onBlur={() =\\u003e setEditing(false)} onKeyDown={e =\\u003e e.key === 'Enter' \\u0026\\u0026 setEditing(false)}\\n placeholder='your name' className='...' /\\u003e\\n - Place the chip in TopBar right section, before ThemeToggle\\n\\n3. Run: npm run typecheck \\u0026\\u0026 npm run lint \\u0026\\u0026 npm run test\\n4. Close beadboard-0fi.1 then start beadboard-0fi.2\",\"status\":\"open\",\"priority\":1,\"issue_type\":\"task\",\"owner\":\"jordanlive121@gmail.com\",\"created_at\":\"2026-02-28T22:03:38Z\",\"created_by\":\"ZenchantLive\",\"updated_at\":\"2026-03-01T22:46:06Z\"}"}
{"actor":"ZenchantLive","comment":null,"created_at":"2026-03-01T14:55:56Z","event_type":"closed","id":80,"issue_id":"beadboard-0fi.1","new_value":"actor state in UnifiedShell, editable chip in TopBar, all checks pass","old_value":""}
{"actor":"ZenchantLive","comment":null,"created_at":"2026-03-01T14:56:05Z","event_type":"status_changed","id":81,"issue_id":"beadboard-0fi.2","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"beadboard-0fi.2\",\"title\":\"Wire actor from shell to ConversationDrawer (remove localStorage read)\",\"description\":\"TASK CONTEXT\\n- Bead ID: beadboard-0fi.2\\n- Title: Wire actor from shell to ConversationDrawer (remove localStorage read)\\n- Parent/Epic: beadboard-0fi\\n- Dependencies (must be done first): beadboard-0fi.1\\n\\nTASK CONTRACT\\n- Goal: ConversationDrawer currently reads and writes actor identity from localStorage('bb.humanActor') at lines 125 and 167. Replace these with an actor prop received from UnifiedShell so identity is controlled by a single source of truth.\\n- Success Criteria:\\n - ConversationDrawer accepts actor: string prop\\n - localStorage.getItem('bb.humanActor') call at line 125 removed — replaced with prop\\n - localStorage.setItem call at line 167 removed — UnifiedShell owns persistence\\n - Comments still include actor in the POST body\\n - npm run typecheck passes\\n- Scope:\\n - src/components/sessions/conversation-drawer.tsx — replace localStorage reads with prop\\n - src/components/shared/unified-shell.tsx — pass actor to ConversationDrawer call site\\n - Verify ConversationDrawer is called in unified-shell.tsx or sessions-page.tsx and update accordingly\\n- Out of Scope:\\n - ConversationDrawer UI changes\\n - ThreadDrawer (that is beadboard-0fi.3)\\n\\nIMPLEMENTATION CONSTRAINTS\\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\\n- Reuse shared components and logic; avoid one-off forks.\\n- Keep changes targeted and minimal for this bead.\\n\\nVERIFICATION REQUIREMENTS\\n- Required commands:\\n - npm run typecheck\\n - npm run lint\\n - npm run test\\n- Report any remaining risks and follow-up beads explicitly.\",\"status\":\"open\",\"priority\":1,\"issue_type\":\"task\",\"owner\":\"jordanlive121@gmail.com\",\"created_at\":\"2026-02-28T22:04:48Z\",\"created_by\":\"ZenchantLive\",\"updated_at\":\"2026-02-28T22:04:48Z\"}"}
{"actor":"ZenchantLive","comment":null,"created_at":"2026-03-01T14:57:27Z","event_type":"closed","id":82,"issue_id":"beadboard-0fi.2","new_value":"actor prop added, localStorage reads/writes removed, syncs from prop via useEffect","old_value":""}
{"actor":"ZenchantLive","comment":null,"created_at":"2026-03-01T14:57:28Z","event_type":"status_changed","id":83,"issue_id":"beadboard-0fi.3","new_value":"{\"status\":\"in_progress\"}","old_value":"{\"id\":\"beadboard-0fi.3\",\"title\":\"Wire actor from shell to ThreadDrawer postComment\",\"description\":\"TASK CONTEXT\\n- Bead ID: beadboard-0fi.3\\n- Title: Wire actor from shell to ThreadDrawer postComment\\n- Parent/Epic: beadboard-0fi\\n- Dependencies (must be done first): beadboard-0fi.1\\n\\nTASK CONTRACT\\n- Goal: ThreadDrawer currently posts comments with no actor field. Add an actor prop and include it in the comment POST body so comments from ThreadDrawer are attributed the same as ConversationDrawer comments.\\n- Success Criteria:\\n - ThreadDrawer accepts actor?: string prop\\n - Comment POST body includes actor field when prop is provided\\n - UnifiedShell passes actor to ThreadDrawer at its call site in unified-shell.tsx\\n - Posted comments visible in the thread show the correct actor attribution\\n - npm run typecheck passes\\n- Scope:\\n - src/components/shared/thread-drawer.tsx — add actor prop, include in POST\\n - src/components/shared/unified-shell.tsx — pass actor to ThreadDrawer call site\\n - Check thread-drawer.tsx postComment fetch call to find where to inject actor\\n- Out of Scope:\\n - Changing the comment API endpoint schema\\n - ConversationDrawer (that is beadboard-0fi.2)\\n\\nIMPLEMENTATION CONSTRAINTS\\n- Preserve existing backend/API contracts unless explicitly stated otherwise.\\n- Reuse shared components and logic; avoid one-off forks.\\n- Keep changes targeted and minimal for this bead.\\n\\nVERIFICATION REQUIREMENTS\\n- Required commands:\\n - npm run typecheck\\n - npm run lint\\n - npm run test\\n- Report any remaining risks and follow-up beads explicitly.\",\"status\":\"open\",\"priority\":1,\"issue_type\":\"task\",\"owner\":\"jordanlive121@gmail.com\",\"created_at\":\"2026-02-28T22:04:48Z\",\"created_by\":\"ZenchantLive\",\"updated_at\":\"2026-02-28T22:04:48Z\"}"}

File diff suppressed because one or more lines are too long