ZDDC/tests
ZDDC e2179d167b feat(browse): capability/role/tier-driven, context-correct menu system
Reworks the browse menu/tree interaction into a declarative, contextually
honest model and moves view settings onto a toolbar — the menu is the UI to
the system, so it should be familiar, inviting, and only ever offer what
applies.

New declarative menu model (browse/js/menu-model.js):
- Every action is one descriptor with a TYPE predicate (appliesTo) and a
  CAPABILITY predicate (enabled)+tooltip. Row/pane menus are projections over
  it; separators are derived from group changes. Designed data-shaped so a
  future server-sourced manifest (zddc.zip) can supply/extend it.
- Hybrid visibility: type-inapplicable actions are OMITTED (New folder on a
  file, Expand on a file); permission/role/tier-gated actions are SHOWN
  DISABLED with a reason — so a lower tier sees what a higher role unlocks.
- Roles are NOT hardcoded: ordinary actions gate on the verbs the server
  returns (node.verbs / path_verbs), so any operator-defined role works. Only
  the two intrinsically-special tiers are recognised by name — site admin
  (is_super_admin) and project/subtree admin (path_is_admin), surfaced as the
  "Edit access rules…" item; both come from the existing /.profile/access.
- The headline fix: New folder / New markdown file no longer appear on file
  rows (they target a folder or the current dir).

events.js: deletes the ~350-line inline buildTreeRowMenu/buildPaneMenu/
SORT_BY_ITEMS; opens menus via menuModel projections through one openRowMenuFor
/openPaneMenu path shared by right-click, the hover kebab, and the keyboard
menu key (ContextMenu / Shift+F10). Injects action impls via menuModel.configure
to avoid a circular dep. Prefetches the scope /.profile/access (memoised) on
load/rescope/refresh/popstate so menus never fetch at open time.

Discoverability + a11y: a per-row ⋯ kebab (tree.js + new icon-ellipsis sprite,
revealed on hover/selection/focus) opens the same menu; keyboard menu key
supported.

Toolbar: Sort + Show-hidden moved OUT of per-row right-click menus into the
tree-pane toolbar, plus New folder / New file buttons (act on the current dir,
greyed with a reason when create access is lacking). Help copy updated.

Icons: dropped the 3 stray emoji from menu items (consistent, VS Code/Finder
style); only new sprite is the kebab's icon-ellipsis.

Tests: +5 browse specs (file row omits New-folder; folder row shows it; a
read-only server node greys Rename with a "write access" tooltip via a pure
menuModel unit; toolbar Sort/Show-hidden drive state + New buttons present;
kebab and Shift+F10 both open the menu). All 23 browse+conflict+diff green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 07:21:02 -05:00
..
data test,docs(zip): browse/archive zip-transmittal coverage + fixture + docs 2026-05-12 12:35:48 -05:00
fixtures test,docs(zip): browse/archive zip-transmittal coverage + fixture + docs 2026-05-12 12:35:48 -05:00
lib test: server-backed Playwright harness + /.tokens spec 2026-05-08 10:09:54 -05:00
archive-cascade.spec.js feat: lockstep release infra + cascade/.archive fixes + profile perf + page redesign 2026-05-01 20:11:38 -05:00
archive.spec.js test,docs(zip): browse/archive zip-transmittal coverage + fixture + docs 2026-05-12 12:35:48 -05:00
browse.spec.js feat(browse): capability/role/tier-driven, context-correct menu system 2026-06-04 07:21:02 -05:00
build-label.spec.js fix: clear the 14 stale Playwright baseline failures 2026-05-21 11:24:30 -05:00
classifier.spec.js Initial commit 2026-04-27 11:05:47 -05:00
conflict.spec.js feat(browse): lost-update protection for editors + shared conflict dialog 2026-06-03 16:24:15 -05:00
diff.spec.js feat(browse): markdown version-history viewer with diff + restore 2026-05-28 12:49:00 -05:00
form-safety.spec.js feat(form): ui:mirrorFrom — reflect a sibling field into a read-only field 2026-05-21 15:44:43 -05:00
landing.spec.js fix: clear the 14 stale Playwright baseline failures 2026-05-21 11:24:30 -05:00
logo.spec.js refactor: nest lifecycle slots per-party + add virtual top-level aggregators 2026-05-21 07:57:45 -05:00
schema.spec.js Initial commit 2026-04-27 11:05:47 -05:00
tables.spec.js feat(tables): read-only cells, show server-derived fields on create, clearer conflict 2026-05-21 15:34:22 -05:00
toast.spec.js feat(shared): non-blocking toast helper available to every tool 2026-05-09 19:04:41 -05:00
tokens.spec.js test: server-backed Playwright harness + /.tokens spec 2026-05-08 10:09:54 -05:00
transmittal-drag-drop.spec.js Initial commit 2026-04-27 11:05:47 -05:00
transmittal-init-check.spec.js Initial commit 2026-04-27 11:05:47 -05:00
transmittal-validation.spec.js test(transmittal): cover the publish-time validation gate 2026-05-21 16:49:23 -05:00
transmittal.spec.js Initial commit 2026-04-27 11:05:47 -05:00
zddc-filter.spec.js Initial commit 2026-04-27 11:05:47 -05:00
zddc-source.spec.js test(shared): smoke tests for the zddc-source.js FS-Access polyfill 2026-05-09 18:49:11 -05:00
zddc.spec.js Initial commit 2026-04-27 11:05:47 -05:00