docs: ADR 0027 + story — project-wide style reference image #54
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "docs/adr-0027"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Docs-only. Records the decision behind a requested feature: a style reference image, set in a project's General settings, that gives every character and location generated for the project a similar look.
The decision (ADR 0027)
A project carries one optional style reference — an uploaded image plus its cached NovelAI vibe embedding.
VibeEmbedding(via the client'sEncodeVibeAsync) as a job on the generation queue (ADR 0010/0011 — the paid encode is a NovelAI call, so it runs on the one pipeline and is visible/cancellable). The embedding is cached, keyed by model + extraction level.It is deliberately distinct from the project preview image (a cover thumbnail for identification vs a generation input). The NovelAI client already exposes the needed primitives (
EncodeVibeAsync,VibeEmbedding, a request'sVibeTransfer, and preciseStyle/Characterreferences), and REQUIREMENTS §4 already anticipated "vibe transfer" as a later item under ADR 0011 — this makes the project-wide case concrete.Four rejected alternatives are recorded (per-request precise-reference instead of a cached vibe; style-via-tags-only; per-entity-only; reusing the preview image).
Story & wiring
stories/project-style-reference.md: set on the General page, encode as a visible queue job, apply to every generation — with acceptance criteria and the dependency that the apply step rides on the generation producers (ADR 0011), which are not built yet. A file-upload control is new to the design system (ADR 0023) and arrives with this.[MVP]line + a refined vibe-transfer[Later]line), and the project-workspace General-page section.No code; the implementation follows once approved.
🤖 Generated with Claude Code
Summary
Summary
Coverage
Kagura.BlazorAdapter - 86.6%
Kagura.Domain - 97.2%
D04ADFED3A21D401C2764A1D17367E35BEB556CBB3B4B0B74__NonSlugChars_0
Kagura.Infrastructure - 97.4%
n
Kagura.Kernel - 90%
Kagura.Server - 100%
Kagura.UI - 96.3%
Kagura.UseCases - 95.9%
🔮 fufu~ Jibril reviewed your code!
Oh? Oh! A docs-only PR — an ADR and a story for a project-wide style reference. Jibril LOVES reading architecture decisions, you know~ ♡ Knowledge is the most precious treasure! Let me see if this one is a jewel or a pebble...
Verdict: ✅ Looks good to me~
This is a beautifully structured ADR. It slots perfectly into the established pattern — same sections as ADR 0026 (Status → Context → Decision → Consequences → Rejected alternatives), same depth, same tone. The decision is coherent with the existing architecture family: vibe embedding cached as derived data (ADR 0005), encode as a visible queue job (ADR 0010/0011), journaled mutation (ADR 0020), composition with per-entity references (ADR 0006). Every single ADR cross-reference checks out — I verified them all, fufu~
The REQUIREMENTS §4 split is elegant: the old single
[Later]"vibe transfer surfaced in the UI" line becomes a concrete[MVP]project-style-reference line plus a refined[Later]for the per-project/per-entity strength controls. Clean and intentional. The story follows the sibling story format faithfully, and the wiring intoproject-workspace.md's General page is correctly placed between the meta-editing and delete lines.✅ What I liked~
data/projects/<slug>/assets/_style/reference.<ext>with a sidecar embedding is consistent with ADR 0005's data layout.No blocking issues, no code to scan, CI is green for the head SHA. Ship it~ ♡
Automated review by Jibril · 2026-07-11
CI/CD: passed for head SHA
0dbb14e5(coverage bot: 95% line / 85.8% branch — no code changed) · Local checks: skipped (docs-only)