feat(l1): adhoc walker variant with debounced notes autosave

The session variant that Phase 1 L1 users actually hit (intake creates
adhoc sessions when no flow_id is provided). Single-pane note-taking
surface with 300ms-debounced autosave to walk_notes. Shares header
shape + Resolve/Escalate modals with the tree variant. Splits the
notes textarea by paragraph and persists each as a structured
AdhocNote entry. Stops saving once status leaves 'active'.

L1WalkPage now dispatches both variants.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-28 14:22:15 -04:00
parent c0bddc289e
commit d3fd9143d7
2 changed files with 165 additions and 7 deletions

View File

@@ -3,6 +3,7 @@ import { useParams, useNavigate } from 'react-router-dom'
import { PageMeta } from '@/components/common/PageMeta'
import { l1Api } from '@/api/l1'
import { L1WalkTreeVariant } from '@/components/l1/L1WalkTreeVariant'
import { L1WalkAdhocVariant } from '@/components/l1/L1WalkAdhocVariant'
import type { WalkSession } from '@/types/l1'
export default function L1WalkPage() {
@@ -42,16 +43,17 @@ export default function L1WalkPage() {
const handleDone = () => navigate('/l1')
// Phase 1: adhoc variant (T23) handles session_kind='adhoc'. Tree variant handles flow/proposal.
// For T22, only the tree variant is implemented. Adhoc sessions render a placeholder until T23 lands.
// Phase 1: adhoc variant handles session_kind='adhoc'. Tree variant handles flow/proposal.
if (session.session_kind === 'adhoc') {
return (
<div className="overflow-y-auto h-full">
<>
<PageMeta title="L1 Walk" />
<div className="max-w-4xl mx-auto px-6 pt-12 text-muted-foreground">
Ad-hoc walker pending (T23).
</div>
</div>
<L1WalkAdhocVariant
session={session}
onSessionUpdate={setSession}
onDone={handleDone}
/>
</>
)
}