You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- 2026-07-24: **Slice 4 done.** `BASE_MANAGE_ASSISTANT_PROMPT` hardened: any create/make/save/store/persist/add request is a persistence intent that must call `klicker_lecturer_element_create_draft_proposal`; never print a proposal or question as JSON in message text; draft-only scaffold tools are brainstorm-only prose; only an explicit do-not-save request keeps a draft in prose. Two new vitest cases lock the invariants and cover both `buildManageAssistantSystemPrompt` branches (tools available/unavailable). Eval matrix (live, standalone chat `/manage`, gpt-5.5): "Create a question about X" → card; "Save this as a draft" (after a prose draft) → card; "Add it to my pool" → card; "Make an MC question (5 options + feedback)" → prose twice on the first prompt version → per plan iterated once (added "make" to the verb list + explicit do-not-save exception) → card; "Draft one but do not save it" → prose, no card, no JSON leak (re-validated after iteration); "Store the one above" → card. Final matrix 6/6 (requirement ≥5/6 persistence + do-not-save prose). Token headroom measured via direct litellm gpt-5.5 call generating an equivalent 5-choice-MC-with-feedback JSON: 545 completion tokens (179 reasoning + ~366 payload for 1508 chars) vs `maxOutputTokens` 2048 → ~3.7x headroom, and no live proposal ever truncated — registry unchanged, no mini-commit needed. Ops note: a host-side edit of `manageAssistantRuntime.ts` mid-compile poisoned the Turbopack persistent cache (truncated parse survived touches and content changes); recovery required `devrouter stop .` + key-injected `devrouter ensure .` with `apps/chat/.next` removed while stopped — remove the cache only while the server is down. Checks: chat check green, 26 files / 124 tests. Next: Slice 4 reviews.
196
196
- 2026-07-24: Slice 4 reviews closed. agy (git-show-only on `ac937b5bc`): no blocking defects — prompt internally coherent, tests cover both branches, diff strictly prompt+tests; two low findings both resolved as keep-as-is (verb-list substring is deliberate invariant locking; the no-JSON rule vs raw-technical-detail rule tension is the intended UX constraint forcing card rendering). Simplification: accepted 3 of 6 — shrank the full-sentence post-tool assertion to a short fragment, asserted shared invariants only against the tools-unavailable branch (available branch covered by earlier tests), dropped a superfluous `as const`; rejected the rest per low confidence/own recommendation. Re-verified: 26 files / 124 tests green. Next: Slice 5.
197
197
- 2026-07-24: **Slice 5 done.** `Thread`/`ThreadWelcome` gained optional `capabilities?: string[]` + `limitsNote?: string`; new `ThreadWelcomeCapabilities` renders 3 icon bullets (Search/FilePenLine/MessageSquareText, matched by position) plus a more-muted one-line limits note between the greeting/contextLabel and the suggestions — nothing renders when the props are unset, so the student `[chatbotId]` path is byte-identical (Playwright `Y-chat` welcome assertion still guards it in CI). `manage-assistant.tsx` passes the 4 hardcoded EN strings per the chat app's convention. `manage.assistant.subtitle` sharpened: EN 'Manage' → 'AI assistant for your courses and question pool'; DE → 'KI-Assistent für Ihre Kurse und Ihren Fragepool' (formal Sie matches surrounding de.ts strings). Verified live: embedded drawer shows greeting → context pill → capabilities → limits note → 3 suggestions with no scrolling at drawer width, new subtitle fits the header pill on one line; standalone `/manage` tab shows the same explainer (screenshots slice5-drawer-welcome.png, slice5-standalone-welcome.png). Checks in-container: chat check + 26 files / 124 tests green, chat lint 0 errors (5 pre-existing warnings), prettier clean. Next: Slice 5 reviews.
198
+
- 2026-07-24: Slice 5 reviews closed. agy (git-show-only on `2777d9d6c`): no blocking defects — student welcome DOM strictly identical (props unset → falsy gate), no 28-rem overflow risk (max-w-sm block, shrink-0 icons), no hidden behavior change; three low findings: applied `aria-hidden` on the decorative bullet icons and a collision-proof `${text}-${index}` key; the render-path unit test is deferred to Slice 8's Playwright welcome assertions (apps/chat tests are node-environment only — component rendering is explicitly mocked out per manage-proposal-card.test.ts). Simplification: commit near-minimal; accepted making the icon-bullet pairing explicit — `capabilities` is now `ThreadWelcomeCapability[]` (`{icon, text}`) paired at the call site in manage-assistant.tsx, dropping the cross-file position-matched `CAPABILITY_ICONS` array, modulo wraparound, and non-null assertion. Re-verified: chat check green, 26 files / 124 tests, standalone `/manage` welcome renders identically (slice5-standalone-after-simplify.png). Next: Slice 6.
0 commit comments