diff --git a/discussion/index.ndjson b/discussion/index.ndjson index 9a497be0..2b036e95 100644 --- a/discussion/index.ndjson +++ b/discussion/index.ndjson @@ -11,4 +11,4 @@ {"type":"discussion","id":"DSC-0010","status":"done","ticket":"studio-code-editor-workspace-foundations","title":"Establish Code Editor workspace foundations in Studio without LSP","created_at":"2026-03-30","updated_at":"2026-03-31","tags":["studio","editor","workspace","multi-frontend","lsp-deferred"],"agendas":[],"decisions":[],"plans":[],"lessons":[{"id":"LSN-0026","file":"discussion/lessons/DSC-0010-studio-code-editor-workspace-foundations/LSN-0026-read-only-editor-foundations-and-semantic-deferral.md","status":"done","created_at":"2026-03-31","updated_at":"2026-03-31"}]} {"type":"discussion","id":"DSC-0011","status":"done","ticket":"compiler-analyze-compile-build-pipeline-split","title":"Split compiler pipeline into analyze, compile, and build entrypoints","created_at":"2026-03-30","updated_at":"2026-03-30","tags":["compiler","pipeline","artifacts","build","analysis"],"agendas":[],"decisions":[],"plans":[],"lessons":[{"id":"LSN-0025","file":"discussion/lessons/DSC-0011-compiler-analyze-compile-build-pipeline-split/LSN-0025-compiler-pipeline-entrypoints-and-result-boundaries.md","status":"done","created_at":"2026-03-30","updated_at":"2026-03-30"}]} {"type":"discussion","id":"DSC-0012","status":"done","ticket":"studio-editor-document-vfs-boundary","title":"Definir um boundary de VFS documental para tree/view/open files no Code Editor do Studio","created_at":"2026-03-31","updated_at":"2026-03-31","tags":["studio","editor","workspace","vfs","filesystem","boundary"],"agendas":[],"decisions":[],"plans":[],"lessons":[{"id":"LSN-0027","file":"discussion/lessons/DSC-0012-studio-editor-document-vfs-boundary/LSN-0027-project-document-vfs-and-session-owned-editor-boundary.md","status":"done","created_at":"2026-03-31","updated_at":"2026-03-31"}]} -{"type":"discussion","id":"DSC-0013","status":"open","ticket":"studio-editor-write-wave-supported-non-frontend-files","title":"Definir a wave inicial de edicao no Code Editor apenas para arquivos aceitos e nao relacionados ao FE","created_at":"2026-03-31","updated_at":"2026-03-31","tags":["studio","editor","workspace","write","read-only","vfs","frontend-boundary"],"agendas":[{"id":"AGD-0013","file":"AGD-0013-studio-editor-write-wave-supported-non-frontend-files.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31"},{"id":"AGD-0014","file":"AGD-0014-studio-editor-frontend-edit-rights.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31"}],"decisions":[{"id":"DEC-0010","file":"DEC-0010-studio-controlled-non-frontend-editor-write-wave.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31","ref_agenda":"AGD-0013"},{"id":"DEC-0011","file":"DEC-0011-studio-frontend-read-only-minimum-lsp-phase.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31","ref_agenda":"AGD-0014"}],"plans":[{"id":"PLN-0019","file":"PLN-0019-propagate-dec-0010-into-studio-and-vfs-specs.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0010"]},{"id":"PLN-0020","file":"PLN-0020-build-dec-0010-vfs-access-policy-and-save-core.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0010"]},{"id":"PLN-0021","file":"PLN-0021-integrate-dec-0010-editor-write-ui-and-workflow.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0010"]},{"id":"PLN-0022","file":"PLN-0022-propagate-dec-0011-into-studio-vfs-and-lsp-specs.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]},{"id":"PLN-0023","file":"PLN-0023-scaffold-flat-packed-prometeu-lsp-api-and-session-seams.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]},{"id":"PLN-0024","file":"PLN-0024-implement-read-only-fe-diagnostics-symbols-and-definition.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]},{"id":"PLN-0025","file":"PLN-0025-implement-fe-semantic-highlight-consumption.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]}],"lessons":[]} +{"type":"discussion","id":"DSC-0013","status":"open","ticket":"studio-editor-write-wave-supported-non-frontend-files","title":"Definir a wave inicial de edicao no Code Editor apenas para arquivos aceitos e nao relacionados ao FE","created_at":"2026-03-31","updated_at":"2026-03-31","tags":["studio","editor","workspace","write","read-only","vfs","frontend-boundary"],"agendas":[{"id":"AGD-0013","file":"AGD-0013-studio-editor-write-wave-supported-non-frontend-files.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31"},{"id":"AGD-0014","file":"AGD-0014-studio-editor-frontend-edit-rights.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31"}],"decisions":[{"id":"DEC-0010","file":"DEC-0010-studio-controlled-non-frontend-editor-write-wave.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31","ref_agenda":"AGD-0013"},{"id":"DEC-0011","file":"DEC-0011-studio-frontend-read-only-minimum-lsp-phase.md","status":"accepted","created_at":"2026-03-31","updated_at":"2026-03-31","ref_agenda":"AGD-0014"}],"plans":[{"id":"PLN-0019","file":"PLN-0019-propagate-dec-0010-into-studio-and-vfs-specs.md","status":"done","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0010"]},{"id":"PLN-0020","file":"PLN-0020-build-dec-0010-vfs-access-policy-and-save-core.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0010"]},{"id":"PLN-0021","file":"PLN-0021-integrate-dec-0010-editor-write-ui-and-workflow.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0010"]},{"id":"PLN-0022","file":"PLN-0022-propagate-dec-0011-into-studio-vfs-and-lsp-specs.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]},{"id":"PLN-0023","file":"PLN-0023-scaffold-flat-packed-prometeu-lsp-api-and-session-seams.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]},{"id":"PLN-0024","file":"PLN-0024-implement-read-only-fe-diagnostics-symbols-and-definition.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]},{"id":"PLN-0025","file":"PLN-0025-implement-fe-semantic-highlight-consumption.md","status":"review","created_at":"2026-03-31","updated_at":"2026-03-31","ref_decisions":["DEC-0011"]}],"lessons":[]} diff --git a/discussion/workflow/plans/PLN-0019-propagate-dec-0010-into-studio-and-vfs-specs.md b/discussion/workflow/plans/PLN-0019-propagate-dec-0010-into-studio-and-vfs-specs.md index 3827ea84..d9d48420 100644 --- a/discussion/workflow/plans/PLN-0019-propagate-dec-0010-into-studio-and-vfs-specs.md +++ b/discussion/workflow/plans/PLN-0019-propagate-dec-0010-into-studio-and-vfs-specs.md @@ -2,9 +2,9 @@ id: PLN-0019 ticket: studio-editor-write-wave-supported-non-frontend-files title: Propagate DEC-0010 into Studio editor and VFS specs -status: review +status: done created: 2026-03-31 -completed: +completed: 2026-03-31 tags: [studio, editor, vfs, specs, write-wave] --- diff --git a/docs/specs/studio/1. Studio Shell and Workspace Layout Specification.md b/docs/specs/studio/1. Studio Shell and Workspace Layout Specification.md index 19b415c1..e8751292 100644 --- a/docs/specs/studio/1. Studio Shell and Workspace Layout Specification.md +++ b/docs/specs/studio/1. Studio Shell and Workspace Layout Specification.md @@ -70,7 +70,7 @@ Baseline workspace architecture rules are: The shell must not encourage a workspace model where every interaction falls back to whole-workspace refresh. Detailed local workspace composition remains workspace-owned. -For example, `Code Editor`-local layout, navigator behavior, tab rules, passive placeholder surfaces, and read-only file behavior are not shell-global rules and must be defined by the workspace-local editor specification. +For example, `Code Editor`-local layout, navigator behavior, tab rules, passive placeholder surfaces, document access-mode behavior, and editor-local save surfaces are not shell-global rules and must be defined by the workspace-local editor specification. Project-session boundaries may still exist above a workspace when the state must remain alive while the project window stays open. diff --git a/docs/specs/studio/5. Code Editor Workspace Specification.md b/docs/specs/studio/5. Code Editor Workspace Specification.md index 0c8a9134..295f569c 100644 --- a/docs/specs/studio/5. Code Editor Workspace Specification.md +++ b/docs/specs/studio/5. Code Editor Workspace Specification.md @@ -8,7 +8,7 @@ Active - `prometeu-studio` - the Studio `Code Editor` workspace -- the first read-only editor workspace wave +- the first controlled editor write wave for supported non-frontend documents ## Purpose @@ -18,10 +18,11 @@ This specification stabilizes: - the baseline visual composition of the workspace, - the `Project Navigator` role and scope, -- the read-only file-opening model, +- the mixed editable and hard `read-only` file-opening model, - the responsive tab baseline, - the passive `Outline`, helper, and status-bar surfaces, -- and the explicit deferral of write and semantic/LSP behavior. +- the editor-local save surfaces, +- and the explicit deferral of semantic/LSP behavior. ## Authority and Precedence @@ -39,14 +40,16 @@ If this document conflicts with the global Studio shell specifications, the shel The `Code Editor` workspace must assume: - the Studio shell already mounts `Code Editor` as a baseline workspace, -- the current wave is read-only, +- the current wave allows editing only for the supported non-frontend document classes classified by `prometeu-vfs` as editable, +- frontend-scoped supported documents remain hard `read-only`, - all project files remain visible in the editor workspace even when only some are frontend-relevant, - `prometeu.json` plus the selected frontend may identify source roots worth tagging, - future semantic providers such as LSP may arrive later, -- and the current wave must not depend on write/save or semantic behavior to remain coherent. +- and the current wave must not depend on semantic behavior to remain coherent. This workspace may consume Studio project metadata and Studio-owned workspace framework primitives, but it must not infer a semantic-provider contract beyond keeping the path open for later integration. This workspace must consume project tree and document data through `prometeu-vfs` rather than through editor-owned direct filesystem readers. +This workspace must consume document access policy and save capability from `prometeu-vfs` rather than rederiving editability locally. ## Workspace Model @@ -54,7 +57,7 @@ The `Code Editor` workspace is: - project-aware, - file-oriented, -- read-only in this first wave, +- mixed-mode in this wave, with editable supported non-frontend documents and hard `read-only` frontend documents, - and explicitly not a semantic IDE surface yet. The workspace must help the user: @@ -62,13 +65,12 @@ The workspace must help the user: - see the full project tree, - identify frontend-relevant source roots visually, - open supported files into editor tabs, +- save editable non-frontend documents through editor-local commands, - understand the active file context, - and understand that semantic/editor-automation features are not part of this wave. The workspace must not pretend to offer: -- save/write behavior, -- dirty state, - merge behavior, - active outline semantics, - or LSP-backed coding assistance. @@ -89,8 +91,9 @@ The left editor column must be a vertical stack containing: The central editor work area must contain: +- a top command bar containing at least `Save` and `Save All`, - a tab strip at the top, -- and the read-only editor body below it. +- and the editor body below it. The lower helper region is present in this wave only as a passive placeholder. @@ -153,6 +156,7 @@ Rules: - Selecting a supported file that is not already open must open it in a new tab. - File opening must resolve document content through `prometeu-vfs`. - The editor must maintain opened-file content in memory for the active Studio session only. +- Frontend-scoped supported documents may coexist in tabs with editable non-frontend documents. - The tab strip must be responsive rather than fixed to one hardcoded tab count. - Overflow tabs must remain accessible through an IntelliJ-style overflow control. - The active tab must remain visible. @@ -166,16 +170,21 @@ The first wave must not define: - split editors, - or cross-session tab restoration. -## Read-only File Model +## Access-Mode and Save Model -The first `Code Editor` wave is read-only. +The first `Code Editor` write wave is controlled rather than universally editable. Rules: -- supported files may be opened into read-only in-memory buffers, -- the workspace must not write files, -- the workspace must not expose save behavior, -- the workspace must not define dirty tracking, +- the workspace must treat `prometeu-vfs` as the canonical source of document access mode for supported files; +- the workspace must not infer frontend scope from path heuristics, local UI state, or ad hoc extension checks; +- supported frontend-scoped documents must remain hard `read-only`; +- editable scope is limited to the supported non-frontend textual classes exposed by `prometeu-vfs` for this wave; +- the workspace must not allow local editorial mutation for hard `read-only` frontend documents; +- the workspace must expose save behavior only through an editor-local command bar containing at least `Save` and `Save All`; +- the global shell `Save` menu item must not be the save surface for this wave; +- save intent must route through `prometeu-vfs`, which remains the owner of persistence policy; +- a frontend hard `read-only` tab must show a top warning that the file cannot be edited or saved in this wave; - and the workspace must not define local merge/conflict behavior against disk changes. ## Outline Rules @@ -194,7 +203,7 @@ Rules: ## Status Bar Rules -The status bar must remain passive in this wave. +The status bar must remain mostly passive in this wave. Its left side must show the breadcrumb path of the active file, such as `proj > src > file.pbs`. @@ -204,12 +213,14 @@ Its right side must show: - line separator, - tabs/spaces mode, - file extension or language, -- and a read-only lock icon. +- and access-mode state. For this wave: - `L:C` may remain a visual placeholder, -- and the read-only lock icon is visual only and does not imply file-permission enforcement. +- editable non-frontend documents may show their current file-type state without implying build participation, +- hard `read-only` frontend documents must show an explicit `read-only` state, +- and the status-bar `read-only` surface should be shaped so it can evolve into a per-file toggle later without requiring a model rewrite. ## Session State Rules @@ -227,14 +238,17 @@ The following remain outside editor-owned session state: - project-session ownership of `prometeu-vfs`, - structural project-tree data returned by `prometeu-vfs`, - support classification rules, -- and document loading responsibilities. +- document loading responsibilities, +- save persistence policy, +- and build-facing document ownership. + +Editable documents may have session-local editorial snapshots while the project session remains open. +Those snapshots are editorial only and must not be treated as canonical build input by implication. Persisting that state across Studio executions is deferred. ## Non-Goals -- write/save behavior -- dirty tracking - merge/conflict resolution - watcher-driven automatic refresh - public `prometeu-vfs` event APIs @@ -244,12 +258,16 @@ Persisting that state across Studio executions is deferred. - LSP integration details - autocomplete, go-to-definition, symbols, rename, code actions, or semantic diagnostics while typing - a normative editor event contract in this wave +- frontend editing +- any implication that editor-owned in-memory snapshots participate in the build ## Exit Criteria This specification is complete enough when: -- the read-only first-wave scope is unambiguous, +- the controlled write-wave scope is unambiguous, - the `Project Navigator` and tab responsibilities are explicit, +- editor-local `Save` and `Save All` are part of the normative workspace contract, +- hard frontend `read-only` behavior is explicit in both warning and status-bar surfaces, - placeholder versus functional regions are clearly separated, -- and deferred write/semantic/LSP behavior is clearly outside the first-wave contract. +- and deferred semantic/LSP behavior is clearly outside the current contract. diff --git a/docs/specs/studio/6. Project Document VFS Specification.md b/docs/specs/studio/6. Project Document VFS Specification.md index f526f5da..dd2feaaf 100644 --- a/docs/specs/studio/6. Project Document VFS Specification.md +++ b/docs/specs/studio/6. Project Document VFS Specification.md @@ -8,7 +8,7 @@ Active - `prometeu-vfs` - `prometeu-studio` -- the Studio project-document boundary for the first Code Editor migration wave +- the Studio project-document boundary for the first controlled Code Editor write wave ## Purpose @@ -20,6 +20,8 @@ This specification stabilizes: - project-session ownership, - the filesystem-backed first-wave contract, - structural tree and document access responsibilities, +- canonical frontend scope and access policy ownership, +- editorial snapshot and save ownership for editable non-frontend documents, - the RPC-first public API baseline, - and explicit first-wave exclusions such as public event publication and watchers. @@ -47,7 +49,7 @@ If this document conflicts with shell-wide Studio rules, the shell specification - watcher-driven refresh in this wave, - public event API exposure in this wave, -- write or save semantics, +- build participation for editorial snapshots by implication, - or ownership over non-Studio domains such as packer assets. ## Module Role @@ -58,6 +60,8 @@ If this document conflicts with shell-wide Studio rules, the shell specification - the owner of project structural tree data for the covered scope, - the owner of project document resolution for the covered scope, - the owner of file support and unsupported-file classification for the covered scope, +- the owner of document access policy for the covered scope, +- the owner of save persistence for editable documents in this wave, - and the required path through which Studio accesses project-document filesystem state in this wave. `prometeu-vfs` is not: @@ -119,8 +123,36 @@ Rules: - opening a supported file in the Code Editor must go through `prometeu-vfs`; - the returned document content must describe only project-session document state for the opened project; -- this wave must not add save, dirty tracking, merge, or conflict semantics by implication; -- future in-memory overlays may be added only by later explicit decision. +- `prometeu-vfs` must classify each supported document as at least editable or hard `read-only`; +- unsupported documents must remain distinguishable from supported `read-only` and supported editable documents; +- `prometeu-vfs` must own editable in-memory editorial snapshots for the current Studio session; +- save operations for editable documents in this wave must persist those editorial snapshots to disk through `prometeu-vfs`; +- Studio consumers must treat `prometeu-vfs` access policy as canonical rather than rederiving editability locally; +- and editorial snapshots must remain outside build-facing document state. + +## Frontend Scope Contract + +Frontend scope must be decided canonically inside `prometeu-vfs`. + +Rules: + +- `FrontendSpec.allowedExtensions` is the source of truth for frontend scope in this wave; +- the VFS document contract must expose a canonical frontend-compatible `typeId` or equivalent scope marker derived from that source of truth; +- consumers must not infer frontend scope from raw dynamic language identifiers, path heuristics, or local UI extension checks; +- frontend-scoped supported documents must remain hard `read-only` in this wave; +- the initial editable non-frontend set is limited to the currently supported textual classes represented as `text`, `json`, `ndjson`, and `bash`; +- and no additional editable class may be inferred by implementation convenience during this wave. + +## Document Access Context + +`prometeu-vfs` must reserve a single access-context entity for document-access-related values. + +Rules: + +- the access-context entity may remain session-local in this wave; +- it must already support lookup and mutation under current demand; +- future persistence may be added later without redesigning the access model; +- and the current reservation must not be treated as authorization for build participation or broader product-wide state ownership. ## Support and Plugin Rules @@ -169,11 +201,12 @@ Rules: - public event publication - watcher-driven refresh -- write or save behavior - dirty tracking - merge or conflict handling - non-project content snapshots - a generic product-wide filesystem abstraction +- frontend editing +- treating editorial snapshots as canonical build input ## Exit Criteria @@ -182,5 +215,7 @@ This specification is complete enough when: - `prometeu-vfs` ownership is clearly separated from shell and workspace UI ownership, - the project-session lifecycle rule is unambiguous, - the structural tree contract is explicitly non-visual, +- frontend scope and access policy ownership are explicit, +- editable non-frontend snapshot and save ownership are explicit, - the RPC-first public API rule is explicit, - and deferred public events and watchers are clearly out of scope. diff --git a/docs/specs/studio/README.md b/docs/specs/studio/README.md index 58f779f0..9b6d380a 100644 --- a/docs/specs/studio/README.md +++ b/docs/specs/studio/README.md @@ -41,7 +41,7 @@ Specs should normally be fed by: 1. agendas that frame the open Studio topic, 2. decisions that close the product or interaction choice, -3. pull-request plans that define propagation, +3. plans that define propagation, 4. then spec integration. If a spec edit would require guessing unresolved UI behavior, stop and surface the missing decision first. @@ -64,6 +64,17 @@ Recommended order: 1. shell and workspace layout; 2. shared UI foundations; 3. components module policy; -4. project document VFS boundary; -5. assets workspace behavior; +4. assets workspace behavior; +5. project document VFS boundary; 6. code editor workspace behavior. + +## Current Wave Notes + +The current `Code Editor` wave is not globally read-only anymore. + +Normative reminders: + +- editable scope is limited to supported non-frontend textual documents classified by `prometeu-vfs`; +- frontend-scoped supported documents remain hard `read-only`; +- the editor-local `Save` and `Save All` surfaces belong to the `Code Editor` workspace rather than the shell; +- editorial in-memory snapshots remain outside build-facing state.