Content Create
The Content Create flow lets users add a new project asset from a repository context menu. Classifications and subtypes load from an SDL catalog. The subtype dialog uses dual navigation: a job/role tree on the left and an orthogonal evolution lineage on the top-right.
Purpose
-
Fast first cut: Right-click a repository → Create… → choose a large classification only (Documentation, Configuration, Code, Plain text). Do not bury the user in a giant nested submenu.
-
Informed second cut: When a classification has more than one creatable type, open a dialog that explains each type’s role before writing a stub file.
-
Dual axes: Separate what the asset is for (job tree) from how dialects evolved or specialized (lineage graph), so successor formats like SDLang → KDL stay comparable without forcing evolution into the job hierarchy.
-
Data-driven: Labels, descriptions, extensions, templates, and lineage edges live in SDL so advice can ship without rewriting UI code.
Entry points
-
Repository browser: Right-click a repository row → Create… → flat classification submenu (ecosystem tags inferred from the project).
-
File manager: DevCentr menu → New File… / New Project… / Open folder — Win11 modern menu preferred, classic/Linux adapters as fallback (see Explorer Shell Integration).
-
CLI:
dev-center.exe --mode=new-file --path=<dir> [--tags=general,java](alsonew-project,new-installer,emit-ci,inplace-path,open).
Ecosystem filters
Each catalog type carries one or more ecosystem tags (general, js, jvm, java, dotnet, python, rust, go, d, cpp, docs, devops, data, …). The subtype dialog shows toggle chips for the active tag universe.
-
Show rule: A type is visible if any selected chip intersects its ecosystems (OR). Missing ecosystems on a type ≡
general. -
Inference:
inferEcosystemTags(path)maps project-map stacks and file heuristics (package.json,pom.xml, …) onto tags; always includesgeneral. If nothing is detected, chips default to{general}. -
CLI / API:
CreateContentOptions.initialTagsand--tags=populate chips; users can still toggle whenallowTagEditis true.
Flow
-
User right-clicks a repository and opens Create….
-
DevCentr shows only top-level
classificationentries from the catalog (tooltip =summarywhen present). -
If the chosen classification has exactly one creatable leaf type, create that stub immediately (no dialog).
-
Otherwise open the subtype dialog.
-
User selects a creatable type (left tree or lineage), confirms Create, and DevCentr writes a stub file under the repository root then opens it in a detected editor when possible.
Dual navigation (subtype dialog)
| Region | Models | Behavior |
|---|---|---|
Left — job / role tree |
Nested |
Primary hierarchy. Indent with a |
Top-right — lineage |
Orthogonal |
Secondary navigation. Each row shows a vitality LED, invented year, label, edge kind, and short note. LED colors: green= |
Bottom-right — detail |
Facts + description for the current selection |
Scrollable: vitality LED, role, invented year, last updated, extension, homepage / repository / specification link buttons, description. Create enabled only when creatable with an extension. |
Layout sketch:
┌──────────────┬─────────────────────────────────────┐ │ Job / role │ Lineage [LED][year] label [kind] │ │ type tree │ │ │ ├─────────────────────────────────────┤ │ │ Facts + links + description │ │ │ [Create] [Cancel] │ └──────────────┴─────────────────────────────────────┘
Catalog (source of truth)
-
Location:
app/src/modules/content_create/content-types.sdl -
Root tag:
contentTypes -
Loader:
modules.content_create.loader(sdlang-d)
Top-level classifications (expandable via SDL): Documentation, Configuration, Schema / API contract, Code, Tabular / data files, Plain text.
See Definition Files for ownership relative to services and language ecosystems.
Classification and type fields
| Field | Meaning |
|---|---|
|
Stable identifier (referenced by lineage edges). |
|
Human-facing name in menus and lists. |
|
Classification-only short blurb (menu tooltip). |
|
One-line job statement for the detail pane. |
|
Longer advisory copy (must stay aligned with general-knowledge comparison articles). |
|
File extension including the dot (e.g. |
|
Default basename without extension (e.g. |
|
Optional stub body written into the new file. |
|
When |
|
Calendar year the format/language appeared (shown in lineage and Facts). |
|
|
|
Project or marketing home URL (detail link button). |
|
Official source repository URL. |
|
Official specification or language-definition URL. For AsciiDoc: the de facto definition is the Asciidoctor-hosted AsciiDoc Language Documentation until the Eclipse AsciiDoc Language Spec is ratified ( |
|
|
|
One or more filter tags (e.g. |
Lineage edge kinds
| Kind | Meaning |
|---|---|
|
Incremental successor that stays in the same problem space. |
|
Stronger “prefer the newer form” narrative (e.g. SDLang → KDL as modern grammar). |
|
Hyperspecialization for a narrower job (LLM tokens, zero-copy binary, JSX docs). |
|
Sibling dialect relationship without clear succession. |
Each lineage block has scope equal to a classification id. Edges use from, to, kind, and optional note. The UI shows the subgraph for the open classification, optionally focused on the connected component of the current selection.
Create behavior
-
Write UTF-8 stub at
{repoRoot}/{suggestedName}{extension}(prompt or auto-suffix if the path exists). -
Use
templatewhen present; otherwise an empty file or a minimal heading derived fromlabel. -
Open with the first detected editor from
editor_detectorwhen available; otherwise leave the file on disk and notify the user. -
Do not scaffold full Pkl/CUE/Cap’n Proto projects in this pass—stub only.
Related docs
-
Product policy for human config: SDL Preference
-
Markup comparison: Documentation markup comparison
-
Data formats and paradigms: Structured data formats
-
Repository context menus: Repository Browser