chore: archive 15 completed OpenSpec changes
Move the following audited-and-implemented changes into openspec/changes/archive/2026-06-12-completed-changes-archive/: - backend-frontend-refactoring - config-profile-git-mounts - config-profile-includes-ui - config-profile-multi-repo-mounts - container-monitoring-notifications - git-mount-url-validation - home-path-expansion - mobile-terminal-ux - mount-specificity-ordering - notification-center - persistent-terminal-sessions - session-list-overhaul - ssh-key-mounting - terminal-fullscreen-unified-header - tool-session-progress-and-updates Also regenerated .pi-map*.md files for openspec/changes so the remaining active changes (multi-session-terminal-ux, reorganize-long-files, working-copies, workspace-first-ui) reflect the new layout.
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
||||
# archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs (index)
|
||||
dir: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs
|
||||
|
||||
## role
|
||||
Contains archived specification documents for a configuration profile feature that manages Git repository mounts, preserved as a historical snapshot from June 12, 2026.
|
||||
## parent
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/.pi-map.md
|
||||
## children
|
||||
- archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md
|
||||
- archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances/.pi-map.md
|
||||
## files
|
||||
## links
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/.pi-map.md
|
||||
## workflows
|
||||
-
|
||||
## dirty
|
||||
-
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
# archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs
|
||||
dir: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs
|
||||
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/.pi-map.index.md
|
||||
|
||||
## role
|
||||
Contains archived specification documents for a configuration profile feature that manages Git repository mounts, preserved as a historical snapshot from June 12, 2026.
|
||||
## files
|
||||
## arch
|
||||
Flat directory structure storing archived specification files with no active code, serving as a read-only reference for completed system changes.
|
||||
## tags
|
||||
-
|
||||
## symbols
|
||||
-
|
||||
## workflows
|
||||
-
|
||||
## dirty
|
||||
-
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts (index)
|
||||
dir: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts
|
||||
|
||||
## role
|
||||
Defines requirements for mounting git repositories into containers via configuration profiles, enabling version-controlled configuration and content injection.
|
||||
## parent
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/.pi-map.md
|
||||
## children
|
||||
-
|
||||
## files
|
||||
- spec.md
|
||||
## links
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md
|
||||
## workflows
|
||||
-
|
||||
## dirty
|
||||
-
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts
|
||||
dir: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts
|
||||
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md
|
||||
|
||||
## role
|
||||
Defines requirements for mounting git repositories into containers via configuration profiles, enabling version-controlled configuration and content injection.
|
||||
## files
|
||||
- spec.md | Defines requirements for adding git repository mounting capabilities to config profiles in a container management system | dep: git, container runtime, config profile system, UI/profile editor
|
||||
## arch
|
||||
Specification-driven requirements document using structured markdown with sections for overview, requirements, and use cases, serving as a design contract for a container platform feature.
|
||||
## tags
|
||||
git, spec, defines, requirements, adding, repository, mounting, capabilities
|
||||
## symbols
|
||||
-
|
||||
## workflows
|
||||
-
|
||||
## dirty
|
||||
-
|
||||
+149
@@ -0,0 +1,149 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Config profiles can reference git repositories for file mounting
|
||||
The system SHALL allow config profiles to include git repository mounts that bind repository paths into containers.
|
||||
|
||||
#### Scenario: Create profile with git mount
|
||||
- **WHEN** a user creates or updates a config profile with `git_mounts` entries
|
||||
- **THEN** the profile stores each git mount with:
|
||||
- `remote_url`: Direct git URL (e.g., "https://github.com/user/repo.git", "git@github.com:user/repo.git")
|
||||
- `source_path`: Path within the repository to mount (e.g., ".", "configs/")
|
||||
- `target_path`: Absolute path inside the container (e.g., "/home/user")
|
||||
- `branch`: Optional branch or tag name (defaults to "main")
|
||||
|
||||
#### Scenario: Git mount validation
|
||||
- **WHEN** a profile with git mounts is saved
|
||||
- **THEN** the system validates that:
|
||||
- `remote_url` is a valid git URL (starts with https://, git@, or ssh://)
|
||||
- `source_path` is a relative path (no leading `/`)
|
||||
- `target_path` can be absolute (starts with `/`) or relative (resolved against working directory, defaulting to `/home/user`)
|
||||
- `target_path` does not contain path traversal sequences (`..`)
|
||||
- No database lookup or repository existence check is performed (validation is deferred to clone time)
|
||||
|
||||
#### Scenario: Profile with git mounts is resolved
|
||||
- **GIVEN** a config profile with git mounts
|
||||
- **WHEN** the profile is resolved for instance startup
|
||||
- **THEN** the resolved profile includes the git mounts as configured
|
||||
- **AND** repository cloning happens at instance startup time, not at profile resolution
|
||||
|
||||
#### Scenario: Git mount is applied at instance startup
|
||||
- **GIVEN** a resolved profile with git mounts
|
||||
- **WHEN** an instance is started with this profile
|
||||
- **THEN** for each git mount:
|
||||
- The repository is cloned from `remote_url` to a temporary location
|
||||
- The source path within the cloned repository exists
|
||||
- A bind mount is created from `clone_path/source_path` to `container:target_path`
|
||||
- **AND** if the clone fails or path is missing, a warning is logged and the mount is skipped
|
||||
|
||||
### Requirement: Git mounts support glob patterns
|
||||
The system SHALL support glob patterns in `source_path` for matching multiple files.
|
||||
|
||||
#### Scenario: Mount files matching glob pattern
|
||||
- **GIVEN** a git mount with `source_path: "configs/**/*.json"`
|
||||
- **WHEN** the instance is started
|
||||
- **THEN** the system expands the glob pattern within the repository
|
||||
- **AND** creates individual bind mounts for each matched file
|
||||
- **AND** preserves directory structure relative to `target_path`
|
||||
|
||||
#### Scenario: Glob pattern matches nothing
|
||||
- **GIVEN** a git mount with `source_path: "nonexistent/**/*"`
|
||||
- **WHEN** the instance is started
|
||||
- **THEN** the system logs a warning that no files matched the pattern
|
||||
- **AND** the mount is skipped
|
||||
|
||||
#### Scenario: Glob pattern limit exceeded
|
||||
- **GIVEN** a git mount with `source_path: "**/*"` matching 500 files
|
||||
- **WHEN** the instance is started
|
||||
- **THEN** the system limits expansion to 100 files
|
||||
- **AND** logs a warning: "Glob pattern matched 500 files, limited to 100"
|
||||
|
||||
### Requirement: Git mounts trigger automatic cloning
|
||||
The system SHALL automatically clone referenced repositories to a persistent storage location on every new container creation. Each instance gets its own fresh clone.
|
||||
|
||||
#### Scenario: Repository cloned on container creation
|
||||
- **GIVEN** a git mount with a `remote_url`
|
||||
- **WHEN** a new container is created with this profile
|
||||
- **THEN** the system clones the repository from the URL to an instance-specific directory
|
||||
- **AND** the clone proceeds as part of instance startup
|
||||
- **AND** instance startup continues once clone completes
|
||||
|
||||
#### Scenario: Existing clone updated on new container creation
|
||||
- **GIVEN** a repository that was previously cloned for this instance
|
||||
- **WHEN** a new container is created with this profile
|
||||
- **THEN** the system pulls the latest updates from the remote_url
|
||||
- **AND** checks out the specified branch (or default branch if not specified)
|
||||
- **AND** uses the updated clone for the bind mount
|
||||
|
||||
#### Scenario: Clone failure handling
|
||||
- **GIVEN** a git mount referencing a repository with an invalid SSH key
|
||||
- **WHEN** the instance attempts to clone
|
||||
- **THEN** the clone operation fails
|
||||
- **AND** an error is logged with details
|
||||
- **AND** the mount is skipped
|
||||
- **AND** instance startup continues with remaining mounts
|
||||
|
||||
#### Scenario: Per-instance isolation
|
||||
- **GIVEN** a git mount referencing a repository
|
||||
- **WHEN** multiple instances are created using the same profile
|
||||
- **THEN** each instance gets its own independent clone
|
||||
- **AND** changes made in one container do not affect other containers
|
||||
|
||||
### Requirement: Git mounts support branch pinning
|
||||
The system SHALL support pinning git mounts to specific branches or tags.
|
||||
|
||||
#### Scenario: Mount specific branch
|
||||
- **GIVEN** a git mount with `branch: "develop"`
|
||||
- **WHEN** the instance is started
|
||||
- **THEN** the system attempts to checkout the "develop" branch in the repository
|
||||
- **AND** the bind mount uses the files from the checked-out branch
|
||||
|
||||
#### Scenario: Branch fallback to default
|
||||
- **GIVEN** a git mount with `branch: "nonexistent"`
|
||||
- **WHEN** the instance is started
|
||||
- **THEN** the system logs a warning that the branch does not exist
|
||||
- **AND** falls back to the repository's current/default branch
|
||||
- **AND** the bind mount proceeds with the fallback branch
|
||||
|
||||
### Requirement: Git mounts are visible in profile UI
|
||||
The system SHALL display git mounts in the config profile editor.
|
||||
|
||||
#### Scenario: View git mounts in profile editor
|
||||
- **GIVEN** a config profile with git mounts
|
||||
- **WHEN** the user views the profile in the UI
|
||||
- **THEN** the git mounts section displays each mount with:
|
||||
- Git URL
|
||||
- Source path within repository
|
||||
- Target path in container
|
||||
- Branch/tag (if specified)
|
||||
|
||||
#### Scenario: Add git mount via UI
|
||||
- **WHEN** a user adds a git mount in the profile editor
|
||||
- **THEN** they can:
|
||||
- Enter a git URL directly (https://, git@, or ssh://)
|
||||
- Specify the source path (with autocomplete or validation)
|
||||
- Specify the target path in the container
|
||||
- Optionally enter a branch/tag name
|
||||
|
||||
#### Scenario: Remove git mount via UI
|
||||
- **WHEN** a user removes a git mount from the profile editor
|
||||
- **THEN** the mount is removed from the profile
|
||||
- **AND** existing instances using this profile are unaffected
|
||||
|
||||
### Requirement: Git mounts are visible in profile preview
|
||||
The system SHALL include git mounts in the profile preview/resolve output.
|
||||
|
||||
#### Scenario: Preview shows git mount details
|
||||
- **GIVEN** a config profile with git mounts
|
||||
- **WHEN** the user requests a profile preview
|
||||
- **THEN** the preview includes a "git_mounts" section showing:
|
||||
- Repository name and URL
|
||||
- Source path (with expanded glob matches if applicable)
|
||||
- Target path in container
|
||||
- Resolved branch name
|
||||
- Clone status (will clone on container creation)
|
||||
|
||||
#### Scenario: Preview warns about missing repository
|
||||
- **GIVEN** a config profile with a git mount referencing a non-existent repository
|
||||
- **WHEN** the user requests a profile preview
|
||||
- **THEN** the preview shows a warning: "Repository [name] not found"
|
||||
- **AND** indicates that the mount will be skipped at startup
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances (index)
|
||||
dir: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances
|
||||
|
||||
## role
|
||||
Defines requirements for git repository mount processing during tool instance startup.
|
||||
## parent
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/.pi-map.md
|
||||
## children
|
||||
-
|
||||
## files
|
||||
- spec.md
|
||||
## links
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md
|
||||
map: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances/.pi-map.md
|
||||
## workflows
|
||||
-
|
||||
## dirty
|
||||
-
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances
|
||||
dir: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances
|
||||
|
||||
index: archive/2026-06-12-completed-changes-archive/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md
|
||||
|
||||
## role
|
||||
Defines requirements for git repository mount processing during tool instance startup.
|
||||
## files
|
||||
- spec.md | Defines requirements for git repository mount processing during tool instance startup, including config profile resolution, bind mount creation, auto-cloning, and failure handling.
|
||||
## arch
|
||||
Specification-driven requirements document using markdown-based technical specification pattern.
|
||||
## tags
|
||||
mount, spec, defines, requirements, git, repository, processing, tool
|
||||
## symbols
|
||||
-
|
||||
## workflows
|
||||
-
|
||||
## dirty
|
||||
-
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Instance startup processes git mounts from config profiles
|
||||
The system SHALL process git repository mounts from resolved config profiles during instance startup.
|
||||
|
||||
#### Scenario: Instance startup with git mounts
|
||||
- **GIVEN** a tool instance configured with a profile that has git mounts
|
||||
- **WHEN** the instance starts
|
||||
- **THEN** the startup pipeline:
|
||||
1. Resolves the config profile (including inherited profiles)
|
||||
2. Collects all git mounts from the resolved profile
|
||||
3. For each git mount, verifies the repository filesystem path exists
|
||||
4. Creates bind mount entries in the compose file for each valid git mount
|
||||
5. Logs warnings for any invalid or missing git mounts without failing startup
|
||||
|
||||
#### Scenario: Git mount bind mount creation
|
||||
- **GIVEN** a resolved git mount with:
|
||||
- repository filesystem path: `/data/repos/user/project/dotfiles`
|
||||
- source path: `.`
|
||||
- target path: `/home/user`
|
||||
- **WHEN** the instance compose file is generated
|
||||
- **THEN** a volume entry is added:
|
||||
```yaml
|
||||
volumes:
|
||||
- /data/repos/user/project/dotfiles:/home/user:ro
|
||||
```
|
||||
- **AND** the mount is read-only by default
|
||||
|
||||
#### Scenario: Repository auto-clone on startup
|
||||
- **GIVEN** a git mount referencing a repository that has not been cloned
|
||||
- **WHEN** the instance starts
|
||||
- **THEN** the system triggers a clone operation using the repository's remote URL and SSH key
|
||||
- **AND** the system waits for clone completion before proceeding
|
||||
- **AND** the bind mount is created from the cloned repository path
|
||||
|
||||
#### Scenario: Clone failure handling
|
||||
- **GIVEN** a git mount referencing a repository with an invalid SSH key
|
||||
- **WHEN** the instance attempts to clone during startup
|
||||
- **THEN** the clone operation fails
|
||||
- **AND** an error is logged with details
|
||||
- **AND** the mount is skipped
|
||||
- **AND** instance startup continues with remaining mounts
|
||||
- **AND** the instance status is not affected
|
||||
Reference in New Issue
Block a user