Releases: johannes-kaindl/kuro-gamification
Release list
1.1.0
Added
- TaskNotes pomodoro field-mismatch hint. If the TaskNotes
community plugin is installed and stores pomodoro sessions in daily notes
(pomodoroStorageLocation: "daily-notes") under a frontmatter key that differs from Kuro's
pomodoroFrontmatterKey, the settings tab now shows a hint with a one-click fix instead of the
bonus silently never firing. No warning if TaskNotes isn't installed, uses its own plugin
storage, or the keys already match.
Changed
- README (EN + DE) restructured to the workspace README gold standard
(_docs/templates/README-obsidian-plugin.md): features first, context paragraph under the
badge row, install in three ways (Community · Manual · From source), a Contributing section,
and thesrc/-layout details moved out of the README intoAGENTS.md(PROF-OBS-05). - README command references now match the actual command names ("Adjust XP manually…" /
"XP manuell anpassen…"), and the palette is referenced without a hardcoded hotkey. - README.de.md brought to parity with the English version — it was still missing the
Community-Plugins install path, the aesthetic-CSS section and the contributing pointer,
and described the XP curve as linear rather than linear-quadratic.
Fixed
- Nested
kuro-statusexample in both READMEs was written with a three-backtick outer fence,
which terminated the block early; it now uses a four-backtick fence. - Pomodoro bonus XP was never awarded when TaskNotes
writes its session history to daily notes (pomodoroStorageLocation: "daily-notes"). That
mode stores an array of session objects in the frontmatter field, but the XP engine only
understood a plain number there and silently treated the array as "no pomodoros". It now
counts completed work sessions from that array (breaks and interrupted sessions excluded);
a plain numeric field still works exactly as before. The two Pomodoro settings that had no
description at all now explain both accepted formats.
1.0.6
Fixed
- Last remaining CSS-lint warning ("Avoid !important") on the reduce-animations a11y override
removed — the selectors already carry one extra class (.kuro-no-animation, added to an
ancestor) over the rules they override, so they win on specificity alone without!important.
1.0.5
Fixed
-
Real Developer Dashboard review findings (from the actual submission scan, beyond what the
localeslint-plugin-obsidianmd@0.3.0could catch): replaced thebuiltin-modulesnpm
dependency with Node's built-innode:modulebuiltinModules;document.createElement/
el.createEl('div', …)replaced withdoc.body.createEl(...)/el.createDiv(...)in
fileIo.tsand the codeblock processor; removed theui-monospaceCSS value (unsupported by
Obsidian's baseline). -
The CRT/phosphor aesthetic CSS is no longer a tracked
.cssfile in the repo (was
assets/kuro-gamification.css, never bundled with the plugin) — it's now a markdown doc
(docs/aesthetic-css.{en,de}.md) with the same CSS as a code block, so it no longer gets
swept into the store's CSS lint (!important/clip-pathwarnings) despite never shipping. -
Settings tab now implements
getSettingDefinitions()(Obsidian ≥ 1.13's declarative settings
API, required for entries to appear in Obsidian's global settings search) alongside the
existingdisplay(), which now walks the same declarative definitions for Obsidian < 1.13 —
a single source of truth, no behavior change on the pre-1.13 path.minAppVersionstays 1.8.7
(no bump needed; only the TypeScript types moved to a newerobsidiandevDependency). Known
trade-off: the native ≥ 1.13 renderer shows all sections flat and expanded — it has no concept
of the collapsible, collapsed-by-default sections used below 1.13 for overload reduction.
Internal
eslint-plugin-obsidianmdupgraded 0.3.0 → 0.4.1 — the older version doesn't even implement
several rules the real scanner enforces (prefer-create-el,settings-tab/prefer-setting-definitions).tsconfig.jsongainedskipLibCheck: true— the newerobsidiantype definitions (1.13.x)
have an internal inconsistency (Menu/Modal/PopoverSuggestvs.HistoryHandler) that only
surfaces without it; irrelevant to our own source, which is still fully checked.
1.0.4
Fixed
minAppVersionraised from 1.5.0 to 1.8.7 — the actually-lowest floor that covers every API
the plugin calls (Workspace.revealLeaf,Vault.getAllFolders,getLanguage).- Every command's display name no longer duplicates the plugin name — Obsidian already prefixes
command-palette entries with it, so commands used to show up doubled ("Kuro Gamification: Kuro: ..."). - UI language detection now uses Obsidian's
getLanguage()instead of readinglocalStorage
directly. - The "no data yet" message inside an embedded
kuro-statuscode block was a hardcoded German
string, shown regardless of the user's language — now properly localized. - Popout-window-safe globals:
window/injectedDocumentinstead ofglobalThis/global
document.createElement/element.style.displayin a few remaining spots. console.info(disallowed by the store guideline) replaced withconsole.debugin the logger.
Internal
- Added
eslint-plugin-obsidianmdas an additive guideline gate (npm run lint:obsidian) next to
biome — mirrors the real Community Plugin review scanner locally.
1.0.3
1.0.2
1.0.1
Documentation
- README (EN+DE) now covers all workspace-required sections: Requirements, Usage, Configuration, How it works.
- Release badge switched from static to a dynamic Codeberg release badge.
Internal
- Release tooling now delegates to the workspace-central
../tools/release/(release/version-bump/preflight) instead of a vendored, stale copy inscripts/.
1.0.0
First public release. Neurodivergence-friendly gamification for your notes —
off-by-default for everything that could escalate.
Core engines
- XP engine: per-checkbox + completion bonuses (50/75/90 %), habit toggles, pomodoro bonus, weekly review/planning bonus, manual adjustments.
- Streak engine with monthly-regenerated freeze tokens (default 2/month). Streak-bonus tiers at 3/7/14/30 days.
- 10 levels
SIGNAL LOST→K U R Oon a linear-quadratic XP curve (200 … 18000). - Deterministic loot: 5 tiers (Common/Rare/Epic/Legendary/Mythic), seeded shuffle, 50+ default rewards, custom-pool override.
- Lore reveal: narrative fragment per level, custom-lore override.
- Pure-function engines with no Obsidian-API coupling.
Adoptable for others
- Pack library (
📚 Packshub): install / activate / delete / reset / import loot-, lore- and habit-content packs from one place; activating a pack is a single, progress-safe operation. - LLM-assisted pack import: users generate their own loot/lore
KuroPackwith a documented prompt and their own LLM, then import validated, progress-safe JSON — no form editors. Bundled themes: Gothic / Plain / Cozy. - Validated import:
PackValidatorrejects malformed packs with stable, localized issue codes. - Guided onboarding: welcome modal + empty-state guidance; existing users are exempted via a migrate guard.
- Bilingual: German (default) + English, all user-facing strings via the i18n module.
Surfaces
- Sidebar status view,
kuro-statusMarkdown code-block processor, 10+ commands in the Command Palette, status-bar item (off-by-default), reduce-animations toggle (a11y). - Forward-compatible data store (deep-merge against defaults, schemaVersion-tagged), export/import via clipboard JSON.
Quality & release readiness
- Submission gate (
SubmissionGate): puremanifest.json/LICENSEvalidation runs in the test suite, so a store-incompatible manifest failsnpm test— the biome-only equivalent of the communityeslint-plugin-obsidianmdmanifest/license rules. - 209 unit tests across engines, data store, i18n, pack library and the submission gate.
- License: AGPL-3.0-or-later for code (
LICENSE), CC BY-SA 4.0 for docs (LICENSE-DOCS); dual-licensing documented inLICENSING.md, contributions underCLA.md. - TypeScript strict mode, ES2018 target, zero runtime dependencies, esbuild bundling, biome linter,
tscbuild gate.
Notes
- The
assets/kuro-gamification.csssnippet (CRT/phosphor aesthetic) is not bundled in the plugin — install it separately as a Vault CSS snippet. - TaskNotes integration is soft (transparent via
vault.modify); no hard dependency.