Feature modules: the list on item rows, and tree: pages | hidden with auto-open, container tabs and a prompt that is a screen #347
Labels
No labels
bug
enhancement
needs-triage
ready-for-agent
ready-for-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/deckle#347
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Mockups (definitions agreed 2026-10-24):
Depends on #346 (the shared item row). Second of three.
What changes
The module list (
ModuleScreen.tsx).btn .btn--primary, sentence case; disabled in a non-default language with the reason in a.note--infoabove the panel, not a tooltip..page(960px, centred) holding one.panel: head with the module's title and one descriptive line,panel__toolswith the search field, the filters, and the sort menu for every layout (column-header sorting goes; the URL'ssortand the server are unchanged); body: the entries as item rows stacked on the sunken ground; foot: the shared.pager(count left, Previous/Next small bordered, page numbers).title→.item__label(a real link, heading ink);status→ badges in the head (okPublished,info+dot Modified,dashedUnpublished,warnDisabled; two badges when two facts hold); the page's slug as.item__id; every other declared column → the summary line in column order, drawn by the existingFieldValueViewrules (dateTime short, tags as chips, bool Yes/No, image as thumb). Thecardslayout keeps its grid andcardroles; both layouts remain valid YAML (decision E, H).pageactions.ts(the entry editor's items; the list calls, never re-derives). The ⋮ keeps the translation items (Translate to …, Delete translation…). An untranslated row in a non-default language has no actions; its title is italic with the default language's code tag and the Translation state (the language switch's dot + words, Translate… ghost button) sits in the head..empty: "No yet." + what to do + a bordered New button), no match (.empty+ ghost "Clear search"), loading and error on the shared recipes. No.pane__hintopacity anywhere on this screen..list-table*,.module-toolbar*,.module-pager*,.module-empty*,.module-tag(s),.module-lang-tag,.module-l10n*,.module-card*(the cards layout draws.item+ image), the.docheader__btnrecipe on this screen.tree: pages | hidden(new module key)tree(defaultpages,hidden; anything else a load error named in the schema banner);harness migrate's canonical form writes the key only whenhidden(existing files stay byte-identical); GET /api/modules carries it.docs/api.mdGET /api/modules;AGENTS.md"Editor modules": the key in the reference YAML and the "In the editor" paragraph rewritten (see below). The canonical-form and unknown-key tests cover it.featureModuleDefsetsnav: PAGE_TREE_NAVonly forpages. Withhiddenthe shell already drops the column and the rail toggle (ModuleDef.navoptional).FeatureModulemode +routerepair): what a tree-hidden module shows when the URL names no container of its own —docs/adr/entry and state the behaviour in AGENTS.md);.emptynaming the container page type and pointing at the Page module.returnsemantics unchanged.tree: pagesmodule): the prompt mode mounts the docheader and shows a.panellisting the containers with a bordered "Open" each;TreePane's rejected rows take--chrome-text-mutedinstead of opacity (.tree-row__label--disabled), chevrons stay live; the container's row is drawn normally with the module's icon.scaffold/features/forms/editor/modules/forms.yamlandscaffold/features/categories/editor/modules/categories.yamlgaintree: hidden; bothfeature.yamlversions bump; forms' hint "Build each form in the Forms module by selecting the Forms page in its tree and pressing New" is rewritten.docs/features.md"The forms bundle" / categories follow. An installed site keeps its files (harness adddoes not upgrade a receipted bundle): the skills say the key is a one-line edit.Documents, skills, owners (CLAUDE.md inventory)
scaffold/site/AGENTS.md"Editor modules" (key, "In the editor": tree beside the module or not, the prompt, auto-open, tabs, the sort menu, the list anatomy, no container badge);docs/api.mdGET /api/modules;docs/features.md; a new ADR;docs/architecture.mdwhere it narrates the module shell;docs/styleguide/styleguide.htmlonly if a sample is missing. The README gains nothing.create-feature(the module YAML it writes incl.tree, the screen it produces),setup-site(walking a customer through Forms),edit-contentwhere it names the tree-selection step,migrate-siteif it lists module limits.Badge.tsx gitBadgeState; translation dots/wordsstores/translationState; page actionspageactions.ts; containers/entries the server'scontainerFor/managedBy; the module key's validity the server's loader; the new "which container" ruleFeatureModule+routerepair. No client re-derivation; no "same as" comments.module.*,feature.selectPage/selectTypedPagereplaced by the new copy, EN and DE.Acceptance
harness add formssite: clicking the rail entry shows the list at once, no tree column, no rail toggle; News still shows the tree with muted non-container rows and the prompt panel.web/styles test (no literal, opacity only disabled),scaffold/skills_test.go,scaffoldcanonical-form test, module decoder unknown-key test,docs/docs_test.go, theinternal/serverroute test (unchanged routes),agentsdoc_testif touched.grep -rn "list-table\|module-toolbar\|module-pager\|module-empty\|pane__hint" web/src/components/ModuleScreen.tsxfinds nothing.