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:
Developer
2026-06-12 14:26:55 +00:00
parent 30549f4863
commit caadd59441
493 changed files with 3563 additions and 3490 deletions
@@ -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
-
@@ -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
-
@@ -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
-
@@ -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
-
@@ -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
@@ -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
-
@@ -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
-
@@ -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