subject: project-editor-routing

predicate: is

object: flat routes under /edit/:section (no projectId — a project is the domain-resolved tenant); /builder and /project-editor redirect to /edit/general

status: active

kind: decision

confidence: high


subject: locale-sync

predicate: is-implemented-by

object: LocaleSyncService, which generically adds/removes a locale key across static page translations and navigation labels without per-field hardcoding

kind: implemented


subject: draft-publish-flow

object: client-side only (ProjectEditorFacade.status/dirty/save/publish) because no backend draft/publish endpoint exists yet; PUT /builder/bootstrap/draft and POST /builder/bootstrap/publish are the documented backend gap

kind: constraint


subject: html-editing

predicate: uses

object: MarketplaceHtmlEditorComponent, a contentEditable + toolbar component with no external rich-text dependency; emits raw HTML, never sanitizes during editing


subject: navigation-tab

predicate: supports

object: header navigation and flat-list footer navigation (add/remove/reorder/edit); grouped-column footer navigation is read-only until a future sprint


subject: config-schema-and-validation

object: a field-schema registry (schema/editor-schema.ts, EditorSchemaService) driving centralized, severity-tagged validation (ProjectValidator composing pure schema/validators/primitives functions) and debounced undo/redo (schema/history.util) in ProjectEditorFacade; section templates stay hand-authored (metadata-augmented, not schema-rendered)