Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.6 KiB
Vigil-close digest · screen
The morning surface where a closed vigil becomes a readable journal entry + activity recap. Pairs with brief Q §Q1–Q2 and brief I §I1 (daily digest).
When it fires
Vigil-detector closes a vigil when activity gap exceeds N hours (per v2 heuristics; defaults preserved). Closure fires vigil-journal-generator. When Quinn next opens CocotteAI after the close, this digest is the first message in chat-home from ai-copilot.
Layout
┌────────────────────────────────────────┐
│ ai-copilot · today, 06:18 │
│ │
│ ◐ Vigil closed at 04:42 │
│ eight hours, twenty drafts, six │
│ receipts. │
│ │
│ Journal — auto-drafted │
│ ┌──────────────────────────────────┐ │
│ │ A slow morning. Tryst stayed │ │
│ │ steady, OF held two warm threads,│ │
│ │ and the Berlin tease cooled │ │
│ │ overnight. Mood: even. Worth │ │
│ │ re-warming Friday. │ │
│ │ │ │
│ │ Mood: even Tags: #of #berlin │ │
│ │ Mentions: @felix, @sasha │ │
│ └──────────────────────────────────┘ │
│ [ feels right ] [ re-tag ] ⋮ │
│ │
│ Receipts │
│ · Bumped Tryst 6× · TS4Rent 6× │
│ · Posted 4 to X, 1 to OF │
│ · Drafted 12 DMs (sent 9, queued 3) │
│ · 1 retry: Tryst @ 03:14 → OK 03:16 │
│ │
│ 3 things want your eyes │
│ · @felix · OF · waiting since 02:11 │
│ · Tryst inquiry · waiting since 03:40 │
│ · OF post draft · 8pm slot │
│ │
│ [ open queue ] │
└────────────────────────────────────────┘
Three layered blocks
The card has a deliberate visual hierarchy: journal (hearth, generative) → receipts (working, terse) → call-outs (working, decision-bound).
Block 1 · Vigil header
- Phase glyph + duration + small counts (drafts / receipts).
- Hearth register, never urgent.
Block 2 · Journal (auto-drafted)
- Claude-drafted paragraph (per
JOURNAL_MODEL_VERSION). - Mood + tags + mentions ribbon below.
- Feedback affordances (per Q2 correction-loop):
feels right— implicit endorsement, model learns positively.re-tag— opens a small editor for mood + tags; correction lands in the journal-generator training loop.- overflow
⋮:add a note from me— Quinn-authored addendum, stored alongside.delete this entry— soft-delete; preserved for moderator/audit per Q open question.make it private from peers— never publishable upward (already the default; toggle reaffirms).
Block 3 · Receipts (audit summary)
- 4–6 lines, plain enumeration.
- Tap any line → opens audit drawer (brief I §I2) scoped to that slice.
- Working register — never decorative.
Block 4 · Call-outs (what wants Quinn's eyes)
- Up to 3 highest-priority items: inbox-warm-and-waiting, approval-queue-aging, scheduled-post-needs-final.
- Each line is tappable to its source (prospect drawer / approval card / content-plan drawer).
open queuebutton collapses these into the full approval queue drawer.
States
- Typical (shown above).
- Quiet vigil (low activity) — journal short, receipts collapsed to "kept steady, nothing notable", call-outs may be empty.
- Loud vigil (failures, escalations) — journal mood likely "uneven"; receipts list failure lines first; call-outs prioritize escalations.
- Journal generation failed — fallback:
Cocotte couldn't draft the journal this morning. Receipts below. Try again in chat.
- First-ever vigil (D-onboarding handoff) — journal block replaced by:
First vigil on record. She'll start journaling from here on.
- Vigil still open (Quinn opened the app mid-vigil) — different card entirely; this digest doesn't render until close.
- Privacy reminder (every Nth open; tunable) — appended footer:
Journals stay with you. Cocotte never sends them, never quotes them in outbound.
Privacy invariants (rendered as part of the screen contract, not just brief Q text)
- Journal text is
outbound_suppressed=trueat the adapter boundary — never echoed into a DM draft. - Mentions (@felix, @sasha) are tappable inside Quinn's drawers but never serialized into anything that ships to those prospects.
- The "make it private from peers" toggle is always already on for journals. The toggle exists so Quinn can confirm the invariant visually; it cannot be flipped off in P0.
Gestures
- Swipe down on the journal block: collapses to a one-line summary, leaves receipts + call-outs visible. Persists for the rest of the day.
- Long-press the journal block: opens journal-entry detail (B5-adjacent drawer) with full text, full mention list, history of corrections.
- Tap any mention chip: opens prospect drawer (B3) scoped to that prospect's cross-vigil mention history (per Q open question Q-Q3, default-on).
Edge cases
- Multiple vigils since last open (Quinn was away 2 days) — stack the digests, most recent first; offer "summarize all" affordance that asks ai-copilot to produce a meta-summary.
- Vigil closed but call-outs already actioned (Quinn handled them on web companion) — call-outs section shows "all caught up — nothing waiting."
- Tag conflict (journal-model tagged
#anxious, Quinn re-tagged#focusedlast vigil; this vigil's draft uses#anxiousagain) — small inline note:Last time you re-tagged a similar entry. Want the model to lean your way?