Files
wekan/docs/Features/Menu-Implementation-Audit.md
Lauri Ojansivu b7589737f5 File docs/Features the way the WeKan menus are.
A feature's guide now sits under the menu it is used from, read from the
templates rather than from where somebody once put it: Header-Bar,
All-Boards, Pages, Board-Header (search and every Board View), Board-Sidebar
(Board Settings, Filter, Members, Labels, Archive), Rules, Swimlanes, Lists,
Cards, Member-Settings, Admin-Panel and Login-Page. Topics used from several
menus (editor, history, theme, translations, email, troubleshooting) are in
General.

- Each area has a README mapping its menu entries to their guides and to the
  template or server module that implements them. Board-Header/README.md
  lists all 40 Board View entries with the template boardBody.jade renders;
  five views (Table, Calendar Mode, Time, Timeline, Map) have no guide of
  their own yet and say so.
- Board-View.md listed 25 views while BOARD_VIEWS has 40; it now lists all
  of them with their English labels.
- Pages keep their file names. Where a released changelog links an old path,
  a "# Moved" page stays there and points to the new one; test-menu.sh skips
  folders holding only those.
- Undo was filed under Login; it is General/Undo now.
- Every link in docs, code comments, scripts and tests follows the move;
  docsLinksResolve checks them all.

Tests that read a doc follow it to its new place. boardViewSettings now fails
when Board-View.md or Board-Header/README.md differs from BOARD_VIEWS, or
names a template boardBody.jade does not render.

Thanks to xet7 !
2026-10-16 23:45:35 +03:00

6.1 KiB

Menu implementation audit

Audit run on 2026-09-23 against local macOS ARM64 bundles and FerretDB. The full baseline had 405 passes and 55 failures; see the detailed run results for every failing test. This is an implementation and test inventory, not a declaration that every menu feature works. A handler, a translated label or a documentation page alone does not establish working behavior.

Evidence and regression checks

node tests/helpers/menuAuditInventory.cjs generates a JSON inventory of every .js-* link/button in menu, popup, header and sidebar Jade templates. It lists source locations, matching event handlers and literal browser-spec references. The initial audit found 418 selectors; 270 have no literal browser-spec reference. Dynamic helpers can cover some of those; conversely a reference is not proof that a test exercises an action. These numbers are not a coverage percentage. Templates outside these families and dynamically generated menus require the separate feature suites below.

node tests/menuActionInventory.test.cjs rejects new disconnected actions. The 15 selector occurrences without direct click handlers are reviewed form-submit buttons, native links, drag handles or a styling class beside an action class. Its negative control proves an unknown disconnected action is rejected.

The audit found and repaired these implementation defects:

  • Trello HTTP imports bypassed the global import-disable switch and the shared transfer validator. The route now enforces both, for JSON and ZIP, and rejects malformed board shapes before creating records.
  • Organizations table select-all/unselect-all links had no event handler. Browser tests now click all three feature columns, check database state, reject invalid fields and refuse non-admin bulk writes. Rapid clicks queue instead of losing the later selection while a save is pending.
  • Jira Cloud v3 ADF descriptions became empty strings. Both Jira import paths now preserve text and paragraph boundaries without rendering trusted HTML.
  • CSV trailing empty rows created blank cards. The CSV/Excel creator now ignores wholly empty rows while retaining zero and rows with other content.
  • Wrong-shaped JSON could report success after creating an empty board. Source-specific shape checks now reject it before board creation.
  • WeKan JSON re-import dropped attachments without an addAttachment activity. Attachment records now supply the card association; older activity-only associations still work, without duplicating files.

Browser suites by menu area

These suites contain behavior checks, not just menu screenshots. Run the full suite to establish the result for a particular build; some existing tests failed in the baseline run and are not certified by this inventory.

Menu area Browser spec family
Boards, members, lists, swimlanes 01-boards-users, 02-*, 13-swimlanes, creation options
Cards, custom fields, descriptions, members 03-cards-operations, 16-card-members-description, 22-card-features
Search, filters, sorting 04-search, 09-my-cards-filter, 39-allboards-sort-search-pagination
Views, layouts, dates 06-views-layout, 44-calendar-date-display
Attachments and links 07-attachments-links, 42-board-comments-attachments
Labels, dates, voting, watching 11-labels-duedates, 14-voting-watchers
Board settings and actions 15-board-actions, 33-board-domains
Admin Panel pane validation inventory
Organizations and Teams 30-ldap-orgs-teams, 32-org-team-feature-toggles, menu-action-audit
Import and export 25-excel-pdf, existing transfer suites, import-export-format-audit

The broad baseline found failures involving membership display, card fields, remote updates, filters, table/swimlane views, voting and other controls. Some assertions target old layouts; others involve direct database changes or real behavior. They require individual reproduction. Do not interpret that run as a successful all-features validation.

Import/export findings

Fixture provenance distinguishes current documented API shapes from native exports and unverified adapter samples. Fixtures use dummy Unicode and multiline text, comments, checklist entries, dates and file metadata. The binary sample contains non-text bytes.

The new browser suite checks supported adapter text, malformed JSON, invalid source shapes, CSV/Markdown/Excel text, rendered cards, all twelve external export links, and rejection of unrelated users' export tokens. The Trello ZIP → WeKan JSON → WeKan import round trip compares comments, checklist items and exact attachment bytes. This does not prove preservation of every board field.

Confirmed limitations requiring further implementation:

  • General external import adapters do not preserve all comments, files, custom fields, relationships and history. API attachment metadata alone is not file content; no test downloads private provider files or calls vendor services.
  • General external exports collect titles, descriptions, labels, dates and selected structure. They omit comments, checklists and attachment bytes. They are not full backups or verified native restore archives.
  • Root WeKan import advertises ZIP but its file reader rejects ZIP; the separate scoped ZIP endpoint requires an existing target board. Whole-board ZIP import must be repaired and tested independently.
  • Asana bulk JSONL.gz export is not supported; the adapter accepts task API JSON.
  • Zenkit's current native JSON export compatibility is unverified because the vendor documentation does not provide its concrete schema. The fixture is explicitly adapter-shaped.
  • Paginated issue/task API responses require all pages and related resources. A one-page file cannot prove that an entire project was transferred.

Format-Coverage.md describes the broader target contract, including loss accounting; it is not evidence that those promises are already implemented. For disaster recovery use the full backup documentation.