Commit Graph

17 Commits

Author SHA1 Message Date
meels
c374099a12 fix: lift the readable-line-width cap from JS, not CSS alone
The CSS-only fix lost a specificity fight: Obsidian qualifies the sizer
with its view class, outranking a bare .markdown-preview-sizer:has(...)
declaration with no !important. The cap stayed, the container query
correctly saw a ~700px container, and the grid collapsed to one column.

widenHost() now lifts the cap inline at render time, which cannot lose on
specificity and does not depend on Obsidian's class names staying stable.
The CSS rules remain as belt-and-braces, now with the view-class variants
and !important.
2026-07-28 15:24:55 +02:00
meels
5de50b155a chore: renormalize line endings under the new .gitattributes
Line-ending only. Verified: 3667 insertions against 3667 deletions with
zero content difference under --ignore-cr-at-eol.
2026-07-28 15:20:55 +02:00
meels
51c85e6994 chore: stop line-ending churn, track the enabled plugin
Obsidian writes CRLF on Windows, so git reported untouched files as
modified. That matters because `git diff HEAD` is the review surface
after a headless ingest and is useless if everything shows as changed.
`* -text` stores bytes as-is.
2026-07-28 15:20:33 +02:00
meels
e92c93d6f3 fix: let the dashboard use the full pane width
Obsidian caps note content at --file-line-width (~700px) with readable
line length on, which squeezed the two-pane grid into a column. Widen
only the sizer that contains a dashboard via :has(), so every other note
keeps its readable width, and cap the dashboard itself at 1600px.

Also swap the collapse breakpoint to a container query. A media query
measures the window, so a wide window with the dashboard in a narrow
split pane kept two cramped columns; the container query responds to the
pane. The media query stays as a floor for a narrow window.
2026-07-28 15:19:57 +02:00
meels
9eb29bb41e Add sync coverage button, preflight-disable buttons, fix output wrapping (I2, I3, I6)
- I2: .wd-row now wraps and .wd-output takes the full row width, so streamed
  output no longer gets crushed beside the button on the filename's line.
- I3: split .webinar-dash into token scope + a new .wd-bar toolbar above a
  .wd-grid two-pane layout. Extracted renderAll (called from onload) which
  renders a global "Sync coverage" button, generalised runIngest's subprocess
  handling into a shared runClaude keyed by run id, and added spawnGate to
  preflight-disable both the sync and per-file ingest buttons when claude
  can't be spawned (no desktop Obsidian / no child_process). A successful
  ingest or sync now re-renders the dashboard instead of requiring reopen.
- I6: the right pane now shows the tracked script path and last-synced date
  from the coverage file's metadata, and flags when cfg.script disagrees
  with it.
- Minors: documented the unescaped-pipe split regex, added role="img" to the
  coverage meter alongside its aria-label.
2026-07-28 14:57:11 +02:00
meels
3bc1afa9f1 Fix ingest subprocess dropping the filename argument (C1)
spawn(..., { shell: true }) made Node concatenate argv without quoting;
cmd.exe re-tokenized it and the ingest prompt arrived as a bare "ingest"
with the filename silently discarded, while the run still reported
success. claude.exe is a real executable here, so no shell is needed:
drop shell: true and pass argv directly. isSafeFilename is unchanged
(still correct defence in depth) but its comment now reflects that the
spawn path carries no injection surface today.
2026-07-28 14:55:04 +02:00
meels
fa1e14c8d1 fix: reject cmd.exe caret and control chars; fix subprocess lifecycle bugs in runIngest 2026-07-28 14:34:43 +02:00
meels
79d3240aa2 feat: spawn headless claude ingest with filename validation 2026-07-28 14:15:49 +02:00
meels
2bb0be0a64 feat: render coverage meter and station-grouped table 2026-07-28 14:07:44 +02:00
meels
0304757982 feat: parse the script coverage table 2026-07-28 13:45:24 +02:00
meels
3e28180f8b fix: include txt/pdf raw sources in queue, match dark accent to theme
- readPipeline no longer filters raw/sources to .md only; CLAUDE.md
  documents txt and pdf as valid raw source types, and hiding them from
  the queue silently was the same invisibility bug the dashboard exists
  to remove.
- Dark-mode accent now tracks the installed tesanti theme (same signal
  red, no base-color lift) instead of contradicting it; status colors
  (ok/warn/danger) keep their lifted dark values for AA contrast on
  small text, per design-system separation of status tokens from the
  brand accent.
2026-07-28 13:39:18 +02:00
meels
1045082df6 feat: render source pipeline in left pane 2026-07-28 13:23:40 +02:00
meels
7958d225d5 fix: prevent double-counting orphaned pages in conflicting scenarios 2026-07-28 13:17:51 +02:00
meels
80ef971d1a fix: handle duplicate raw-path claims by routing to orphaned 2026-07-28 13:13:33 +02:00
meels
027dcb4e4e feat: derive source pipeline from raw path claims 2026-07-28 13:06:28 +02:00
meels
af247326b3 feat: scaffold webinar-dash plugin with config block 2026-07-28 13:01:52 +02:00
meels
b75730fda3 chore: initial commit of vault before dashboard work 2026-07-28 13:00:04 +02:00