Migrated from the legacy obsidianmd/obsidian-releases PR workflow to
the new https://community.obsidian.md portal. The new automated scan
flagged 128 findings on v0.1.3; this commit addresses the code, style,
and infrastructure findings.
Code (TypeScript)
- Replace document.createElement("div"|"span"|"input"|"datalist"|
"option") with Obsidian's createDiv/createSpan/createEl helpers
(~30 call sites across src/views/ and src/interactions/).
- Replace document.createElementNS(svg-ns, ...) with createSvg().
- Replace bare document.X / document.querySelector /
document.createTextNode with activeDocument.X for popout window
compatibility.
- Replace setTimeout/clearTimeout/window.setTimeout/window.clearTimeout
with activeWindow.setTimeout/clearTimeout (7 call sites).
- Introduce TaskFrontmatter interface in src/types.ts and narrow all
metadataCache.getFileCache(...).frontmatter accesses to it — fixes
the bulk of no-unsafe-* lint warnings.
- Type-safe loadData() in main.ts via Partial<TasksPluginSettings>.
- stripWikilinks() now accepts unknown and narrows internally.
- Use configured inlineTaskTag in the inline task regex (the `tag`
parameter was declared-but-unused).
- Prefix the unused sourceFile parameter on updateStub with `_`.
Styles
- Remove all !important declarations (5 occurrences); bump
specificity via .ot-view parent selector instead.
- Merge the duplicate .ot-task-row definition and guard touch-target
overrides under @media (pointer: coarse).
- Expand #fff -> #ffffff.
Infrastructure
- Add CONTRIBUTING.md (fixes "missing contributing guide" hygiene
flag on the portal scorecard).
Deferred for follow-up
- package-lock.json — couldn't generate from this session
(npmjs.org unreachable). Run `npm install` locally and commit
the lockfile to clear the last "no lockfile" finding.
- .github/workflows/release.yml — needs `workflow` OAuth scope to
push; will be added in a follow-up commit.
Why:
- Fix unhandled promises (void-prefixed calls in event listeners, setTimeout
callbacks, and sync handlers).
- Replace async-without-await signatures (loadTasks, onunload, onClose,
countTasksInBucket) with sync equivalents.
- Narrow nullish-coalesce stringify of keyof TaskItem to exclude TFile /
objects from "[object Object]" stringification.
- Replace innerHTML with DOM API in the empty-state renderer.
- Replace createEl("h2", ...) with setHeading() via Setting API for
settings sections.
- Move inline element.style.* assignments into styles.css classes.
- Use FileManager.trashFile() instead of Vault.delete() for stub cleanup.
- UI strings use sentence case ("Open tasks", "New bucket", "Secondary
grouping", "Getting started").
- Remove unused imports/bindings (BucketGroup, TaskRowCallbacks,
BucketConfig, originalOnComplete).
Co-authored-by: Isaac
- Wire toggleDoneWithSync: checking task on board now checks source note
- Add right-click/long-press context menu with "Move to..." bucket list
- Warn when changing bucket property in settings
- Handle stub filename collisions with random suffix
- Document #task position and multiple wikilink behavior
Co-authored-by: Isaac
Board and Focus view modes with customizable buckets, secondary
grouping by any frontmatter property, inline #task tracking from
notes with bidirectional sync, drag-and-drop, completion animations,
ARIA accessibility, and mobile-friendly touch targets.
Co-authored-by: Isaac