Skip to content

undo a few changes#5

Open
Greensand321 wants to merge 223 commits into
claude/review-flowboard-lQTTZfrom
main
Open

undo a few changes#5
Greensand321 wants to merge 223 commits into
claude/review-flowboard-lQTTZfrom
main

Conversation

@Greensand321

Copy link
Copy Markdown
Owner

undo some of the changes in the branch

Greensand321 and others added 30 commits April 9, 2026 09:20
…ually

- Archive entire columns (with all their cards) via ⊡ button in column header
- Archive individual cards via 📦 Archive button in card modal footer
- Archive browser modal (📦 Archive in top nav) shows archived columns and cards
  with Restore and Delete actions per item
- Restoring a column also clears archive flags on all cards within it
- Archived items are fully filtered from the board, card counts, and stats
- Archived columns are excluded from the card modal's column picker
- All archive actions integrate with undo/redo stack

https://claude.ai/code/session_01VxiEThbmeb8Y6ro3A68Mnd
…n-SVfAr

Add archival feature to FlowBoard — archive columns and cards individ…
Replace flat lists with a horizontally scrollable row of column panels
that use the same .col / .col-hdr / .col-body / .card CSS as the live
board, making the archive immediately recognizable.

- mkArchivePanel(): renders a column panel using the column's real PAL
  color and header style. Fully archived columns get an amber 🗄 Archived
  badge plus ↩ / × column-level actions. Context panels (active columns
  with individually archived cards) show the column name and count only.
- mkArchiveCard(): renders a .card with the same border-left color,
  title, priority badge, tags, progress bar, and due-date badge as the
  live board. Appends ↩ Restore and 🗑 buttons. Restore is omitted for
  cards inside a fully archived column (whole-column restore is the
  right action there).
- showArchiveModal(): builds the modal with DOM nodes directly (no HTML
  string), widens to min(92vw, 960px), and uses .group-cols for
  horizontal scroll. Panels sorted newest-archived first. Includes a
  legend row distinguishing the two panel types. Empty state preserved.

https://claude.ai/code/session_01VxiEThbmeb8Y6ro3A68Mnd
…n-SVfAr

Redesign archive modal to mirror the board's visual layout
Creates Section 60 Checklist.html from the section00-template, populated with all
60.001 required information items for Cover Drawing (30 items) and Right of Way
Plan Drawings – General (42 items), with source bold formatting preserved via
HTML strong tags.

https://claude.ai/code/session_017f8GsiJFXxhAyvEViGmJxs
…klist-uF70W

Add Section 60 Right Of Way Plans Checklist
Creates Section 50 Checklist.html from the section00-template, populated with
all content from sections 50.001 General (1 item), 50.002 Required Information
(26 items covering ESPCP cover drawing requirements), and 50.002 Additional
Items (1 item noting optional delineation elements).

https://claude.ai/code/session_017f8GsiJFXxhAyvEViGmJxs
…cklist-uF70W

Add Section 50 Erosion, Sedimentation and Pollution Control Checklist
Replaces the one-line placeholder with a complete overview covering both tools:
FlowBoard (features, sync, backups, themes) and the PPG compliance checklists
(Sections 24, 50, 60). Includes a combined workflow showing how the two tools
complement each other, a quick-start guide, and a clear statement of the target
audience (GDOT civil engineers and consultants).

https://claude.ai/code/session_017f8GsiJFXxhAyvEViGmJxs
…cklist-uF70W

Rewrite README with full product marketing copy
Moves the uploaded demo images into assets/screenshots/ for clean repo
organization and adds a two-column light/dark comparison table in the
FlowBoard section of the README so visitors get an immediate visual of
the tool.

https://claude.ai/code/session_017f8GsiJFXxhAyvEViGmJxs
…cklist-uF70W

Add FlowBoard screenshots and embed in README
Comprehensive engineer-facing spec covering all 9 pages/modals, data model,
color palettes, animations, drag-and-drop mechanics, Firebase sync system,
undo/redo, and implementation notes derived from the reference flowboard.html.

https://claude.ai/code/session_01SXRYeiXpndK6y9y9Bo3Ls7
…mpt-Tw6gQ

Add detailed FlowBoard website implementation prompt
…n00-template-to-section-50-checklist

Add Section 50 ESPCP cover drawing checklist
Greensand321 and others added 30 commits June 11, 2026 23:27
Setting a subtask due date activates auto-sync (card.dueAuto), making
the card's due date track the earliest due date among incomplete
checklist items. Manually editing the card's own due date deactivates
auto-sync until a subtask due date is set again. Sync recomputes when
items are checked/unchecked, removed, cleared in bulk, or when the card
is marked done, clearing the card due date once no incomplete subtask
has one.

https://claude.ai/code/session_018VDyn2uBS2obJUMrjQNWGY
Auto-sync card due date with earliest incomplete subtask due date
Checking off/removing checklist items that triggered the new
due-date auto-sync previously did a full renderCM() (rebuilding the
whole card modal), causing a visible blink. Extract the due-date
badge and deadline controls into _mkDueLabelHtml/_mkDueActionsHtml/
_mkDueCalHtml plus a refreshCMDue() that patches just those DOM nodes,
and use it instead of a full re-render in toggleCMItem, removeCMItem,
toggleAllItems, clearCompleted, and pickCalDay.

https://claude.ai/code/session_018VDyn2uBS2obJUMrjQNWGY
Fix card modal flicker when due-date auto-sync changes card.due
Previously, once every incomplete subtask was checked off, the sync
cleared card.due AND deactivated dueAuto. Unchecking an item with a
due date afterward then had no effect until the user manually edited
the due date (which reactivates dueAuto). Now dueAuto stays active in
that case, so unchecking immediately resumes auto-sync.

https://claude.ai/code/session_018VDyn2uBS2obJUMrjQNWGY
Fix due-date auto-sync not resuming after all items checked off
card.dueAuto is now recomputed fresh on every sync (true whenever any
checklist item has a due date set, regardless of completion), instead
of being a sticky flag that could get stuck false. This permanently
fixes the case where checking off every due-dated item and then
unchecking one didn't restore the card's due pill.

When dueAuto is active and no incomplete item currently has a due
date, the card modal now shows a "Due dates complete" badge instead
of an empty header, and the deadline control becomes a read-only
"synced" indicator (since the date is fully derived from checklist
items in that state) rather than a date picker that would silently
get overridden.

Also run the sync once at board-load time and when opening a card, so
any previously-stuck cards self-correct automatically.

https://claude.ai/code/session_018VDyn2uBS2obJUMrjQNWGY
Self-heal due-date auto-sync and add "Due dates complete" status
Shows only cards that have a due date set on the card itself or on
any checklist item.

https://claude.ai/code/session_018VDyn2uBS2obJUMrjQNWGY
… change

Extends the filter-out delay to 300ms and uses the FLIP technique to
smoothly slide remaining columns/groups into their new positions after
items fade out, instead of snapping into place.
…not the bottom

Previously checking an item jumped it to the absolute end of the list,
below all other completed items. Now it lands right after the last
incomplete item, so the most recently completed items surface at the top
of the done section for easy review. Unchecking still moves an item to
the bottom of the incomplete block, using the same boundary calculation.
The card modal stops propagation on its own clicks, so the old bubble-phase
document listener never saw clicks inside the modal and the sort menu stayed
open. Move dismissal to the capture phase (fires before the modal swallows the
event), add scroll/resize/Escape dismissal, exclude the trigger button and the
menu itself, and properly remove all listeners on close to stop the leak.
… time

- notify() default duration 2600ms -> 7800ms (triple), and now clears any
  pending hide-timeout on a new call so a fast second toast isn't cut short
  by the first one's timer.
- localStorage save failures now distinguish quota-exceeded vs blocked
  storage (private/incognito) vs unknown error, and report actual board/
  backup/auto-snap sizes so the message reflects what's really happening
  instead of a generic "storage may be full" guess.
- Firebase per-edit write failures were previously silent to the user (only
  the sync badge changed color, error logged to console). They now surface
  a toast with the Firebase error code/message and a note that the local
  copy is safe, distinguishing offline vs permission-denied vs other errors.
Extracts Flowboard's local+cloud persistence architecture (autosave,
undo/redo with crash recovery, manual + automatic snapshots, export/
import, diff viewer, whole-document cloud sync with a heuristic safety
gate) into a config-driven module that doesn't assume any particular
state shape or a global named S. A minimal demo task list proves the
module end-to-end; the DSK_CONFIG block at the top is the only section
meant to change when adopting this in another program.

Also fixes a known inefficiency from the original Flowboard
implementation: auto-snapshots are now stored as individually keyed
Firebase children instead of one whole-array overwrite per snapshot.

Includes a prominent integration warning listing 8 conditions (existing
undo system, non-matching state shape, partial-update cloud writers,
regulated data, multi-writer concurrency, existing soft-delete/
versioning, different storage-budget assumptions, non-function-based
mutations) under which an integrator should flag the conflict to a
human instead of silently implementing.
…al backup interface

Replaces the earlier minimal mockup with the real thing: the Backup &
Restore modal, auto/manual snapshot lists, Compare/diff viewer, and
their CSS (buttons, .bak-item/.auto-bak-item, .diff-* classes,
.overlay/.modal) are cloned from Flowboard's showBackupModal()/
showDiffPicker()/showSnapshotDiff(), not reimagined. Theme is fixed to
Flowboard's "pearl" light variables, no dark option, per request.

The DSK module underneath is unchanged in behavior; only its UI-facing
surface (setModal/closeModal, the modal HTML builders, triggerBadge,
diffExpand) was added so the generic DSK_CONFIG adapters now drive the
same interface instead of a scaled-down demo panel. Flowboard's
USB-drive section is intentionally omitted (hardware file-access
feature out of scope for this generic kit) and noted as such in a
comment rather than silently dropped.
Rebuild Data Safety Kit UI as a light-theme clone of Flowboard's actu…
…dd drag edge auto-scroll

Four fixes from the audited bug list, in order:

1. Card modals in light themes now tint with the card color
   (color-mix 8% toward white) instead of staying flat white — the tint
   was previously applied only when !isLight(), in both renderCM and
   setCMColor; extracted shared _cmModalBg() helper.

2. Checklist truncation preview is now robust: the hover handler moved
   from the text span to the whole row (the chevron/x/badge zone where
   the ellipsis visually sits previously had no handler at all), and the
   truncation test gained a sub-pixel Range measurement to catch text
   overflowing by less than 1px, which the integer scrollWidth
   comparison misses.

3. Description box gets a custom 34px grab handle (double the native
   ~17px resize corner), always visible, pointer-event based so it works
   with touch, persisting height through the existing EC.descH path. The
   native resize:vertical corner remains as a fallback.

4. Dragging a column or card near the edge of a scrollable container now
   auto-scrolls it (group row horizontally, limited column bodies and the
   board vertically) via a rAF loop that keeps scrolling while the
   pointer holds still in the 70px edge zone, refreshing the drop
   indicator as content moves under the pointer. Previously a drag could
   never reach an off-screen destination.
… scale setting

Due dates: when a card's due is auto-synced from checklist items, the
header now shows a ✕ button that clears every item's due date in one
click (guarded by confirm + a pre-action auto-snapshot). Previously a
synced due date could only be removed by opening each item's calendar
individually. Card due is cleared explicitly since the sync leaves the
stale derived date in place once no item has a due.

UI scale: new "UI Scale" section in the settings panel with −/+ stepping
(60–150%) and an Auto mode that seeds the scale from the screen width
(0.85–1.1 across <1300 to ≥2400 px). Manual choice persists in
localStorage — deliberately per-device, not in synced prefs, since the
right scale differs between monitors (the reported home-vs-work problem).
Applied via body zoom at boot.
…phan purge

Option B storage/sync stopgap:

- CRITICAL correctness fix: a failed local (localStorage) write no longer
  falls through to push to the cloud. Previously save() bumped
  lastModified and ran the Firebase set() even when the local write threw
  quota-exceeded — leaving the device's disk behind the cloud and
  silently desyncing it on the next reload/tab-discard. This is the
  mechanism behind "sync stopped being reliable after switching devices."
  Now: on unrecoverable local failure the timestamp is reverted, the sync
  badge shows error, and nothing is pushed, keeping the cloud consistent
  with what the device can actually persist.

- Auto-cull safety valve: on a quota error, reclaim space (purge orphaned
  auto-snap stores, then trim every board's auto-snaps to the 3 newest)
  and retry the write once before surfacing a hard error. Manual
  snapshots are never touched.

- Honest usage gauge: the "storage nearly full" warning now measures TRUE
  origin-wide localStorage usage across all keys, not just the current
  board's 3 keys — so it can no longer stay green while other boards'
  backups fill the shared ~5MB quota.

- Orphan purge on load: auto-snapshot stores for boards no longer in the
  keys list are removed at startup (disposable auto-snaps only, keyed by
  share-key; user-created manual snapshots are never auto-deleted).

Verified headlessly: failed write reverts timestamp + skips cloud push +
shows error badge; successful auto-cull retry saves and notifies; gauge
counts other boards; orphan purge removes dead stores and keeps live ones.
…a real storage usage bar

Implements items 1-3 from the storage/sync report:

1. Persistent save-error banner: local-save failures now show a
   body-level banner (survives full board re-renders, unlike a toast)
   with real action buttons (Export Backup Now / Open Backups) instead
   of prose telling the user where to go. Auto-hides the next time a
   save succeeds; auto-dismissible manually. Quota failures also
   invalidate the cached capacity probe, since a failure despite a
   cached "plenty of room" reading means that reading was wrong.

2. Backups button now reflects real storage state: green/amber/red
   (70%/90% of measured ceiling) plus a red dot badge when an
   auto-cull has run and not yet been acknowledged. A small persisted
   cull log (fb4_cull_log/fb4_cull_ack, capped at 10 entries) drives
   both the badge and a banner inside the Backup modal itself
   ("Storage auto-cleanup ran on <date> — N old auto-snapshots
   removed"). Opening the modal acknowledges it and clears the red
   state.

3. Real storage usage bar in the Backup modal, backed by an empirical
   capacity probe (_probeStorageCapacity): binary-search-writes a
   throwaway key to find this browser/profile's actual localStorage
   ceiling instead of guessing a per-browser constant that drifts out
   of date across versions. Cached (fb4_cap_probe), runs lazily off
   the initial render tick on first Backup-modal open so it can't
   block the UI, with a manual "Recalculate" action. _storageStats()
   is now the single source of truth for usage/ceiling/percentage,
   replacing the old hardcoded 4MB threshold that was duplicated
   across the save() warning, so the toast, button color, and bar can
   no longer disagree with each other.

Verified headlessly: probe finds a plausible ceiling and cleans up its
own temp key; storage bar renders and Recalculate works; cull event
turns the button red with a badge and the modal shows the banner;
opening the modal acknowledges and clears both; the error banner
appears with working action buttons, survives a full render() wipe,
and hides itself on the next successful save.

Note: item 4 from the report (orphan auto-snapshot purge currently
runs silently and irreversibly on every boot) is NOT addressed here —
scoped out of this round per explicit instruction, but still an open
risk flagged for a follow-up.
Add persistent save-error banner, backups-button warning states, and …
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants