selectstarfromusers_obsidia.../CONTRIBUTING.md
Art Malanok 4f68f82e96 v0.1.4: address Obsidian Community automated review scorecard (code + styles)
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.
2026-05-26 17:08:12 -07:00

3.1 KiB

Contributing to Minimal Task Board

Thanks for taking a look! This plugin is small and focused. Contributions, bug reports, and feature ideas are all welcome.

Reporting bugs

Open an issue at https://github.com/selectstarfromusers/obsidian-task-manager/issues with:

  • Obsidian version (Settings → About)
  • Plugin version (in Settings → Community plugins → Minimal Task Board)
  • A short description of what you saw vs what you expected
  • A minimal repro: a few example task files (or screenshots) and the bucket/secondary-grouping settings you had configured
  • The full text of any error from View → Toggle developer tools → Console

Requesting features

Open an issue with the enhancement label and describe the workflow you're trying to support. Concrete examples beat abstract requests — "I want to triage 50+ tasks per day across 4 customer accounts" gives much better context than "make filtering better".

Local development

git clone https://github.com/selectstarfromusers/obsidian-task-manager
cd obsidian-task-manager
npm install
npm run dev          # watches src/ and rebuilds on change

Then symlink the plugin folder into a test vault's .obsidian/plugins/minimal-task-board/:

mkdir -p /path/to/test-vault/.obsidian/plugins
ln -s "$(pwd)" /path/to/test-vault/.obsidian/plugins/minimal-task-board

Enable the plugin under Settings → Community plugins, then Ctrl/Cmd+PReload app without saving after rebuilds.

Project layout

  • src/main.ts — plugin entry, view registration, settings load/save
  • src/types.ts — shared type definitions (TaskItem, BucketGroup, TasksPluginSettings, TaskFrontmatter)
  • src/data/ — task store, inline-task watcher, frontmatter writer
  • src/views/ — board / focus renderers, bucket component, task row
  • src/interactions/ — drag/drop, checkbox toggle, inline-task creation
  • src/settings.ts — settings tab UI
  • styles.css — all styles (CSS variables and specificity, no !important)

Style and review notes

  • Use Obsidian's DOM helpers (createDiv, createSpan, createEl, createSvg, activeDocument, activeWindow.setTimeout, this.registerDomEvent) rather than raw DOM globals — the Obsidian community automated review enforces this.
  • Frontmatter reads should narrow frontmatter to the TaskFrontmatter interface in src/types.ts rather than using any.
  • Keep styles in styles.css, not inline el.style.X assignments.
  • Don't introduce new third-party runtime dependencies without discussing first — the plugin is intentionally lightweight.

Pull requests

  1. Fork, branch off main, keep the change focused
  2. npm run build must succeed and produce a clean main.js
  3. Bump the version in manifest.json and add a matching entry in versions.json (use semver — patch bumps for fixes, minor for new features)
  4. Open the PR with a brief summary of the change, screenshots if UI, and any new settings explained
  5. Be patient — this is a hobby project, I'll get to it

License

By contributing you agree your changes are released under the MIT License (see LICENSE).