Skip to content

feat(cloud-folder): a cloud folder in the container, host mode (cloud-folder 1.0.0, devcontainer-cli 1.12.0) - #82

Merged
nabil-becker merged 1 commit into
mainfrom
feature/cloud-folder-feature/1
Oct 27, 2026
Merged

nabil-becker merged 1 commit into
mainfrom
feature/cloud-folder-feature/1

Conversation

@nabil-becker

Copy link
Copy Markdown
Owner

What

Step 1 of the cloud-folder Feature (cloud-folder-feature): the new cloud-folder Feature 1.0.0 with host mode and cloud-folder:status, and devcontainer-cli 1.12.0, whose launcher bind-mounts DCF_HOST_CLOUD_FOLDER at the fixed path /mnt/cloud-folder-host; the Feature links its mountPoint there at build time, so a consumer sets the path once. Also the proposal (docs/proposals/cloud-folder.md, decided), ADR 0031 and the records since #80.

Why

A consuming repository needs one folder in the container for material that must never go in git, without a hand-written host bind mount and, later (sync, mount), without a Windows host at all. Steps 2 (sync, login) and 3 (mount, auto, FUSE on request) follow.

Checklist

New Feature? Follow "Adding a Feature" in CONTRIBUTING.md first (CI matrices, test/_global, README row).

  • Every commit is signed off (Signed-off-by:, DCO) - automatic after task repo:setup
  • version bumped in src/<id>/devcontainer-feature.json (semver)
  • Downloads remain checksum-verified; nothing unverified is piped into a shell (no downloads in this step)
  • install.sh is idempotent and does not assume a remoteUser
  • Tests updated (test/<id>/test.sh, scenarios.json) and task test FEATURE=<id> passes: updated; the Docker scenarios have not run (no daemon in the devhost), CI is their first run
  • taskfile.yml present and registered via installTaskfile (new Features)
  • task lint passes: every step passes on the tracked files; locally the PowerShell step also scans the git-ignored material.ignore/ (psscriptanalyzer-tracked-files)
  • NOTES.md updated if behaviour or options changed, and task docs run so src/<id>/README.md is current

🤖 Generated with Claude Code

…-folder 1.0.0, devcontainer-cli 1.12.0)

cloud-folder-feature, step 1 of the decided proposal (docs/proposals/cloud-folder.md, ADR 0031):

- New Feature cloud-folder 1.0.0: host mode; mountPoint is linked at build
  time to the launcher's fixed mount /mnt/cloud-folder-host; cloud-folder:status
  fails when the folder is missing, not mounted or unwritable.
- devcontainer-cli 1.12.0: the launcher (bash and PowerShell) bind-mounts
  DCF_HOST_CLOUD_FOLDER at /mnt/cloud-folder-host when set; the bootstrap
  template maps it in containerEnv.
- Registered in the README, CI matrices and the global test (17 Features).
- Records: the proposal, ADR 0031, backlog and ledger since #80.

Co-Authored-By: Claude Opus 5.5 <claude-opus-5-5@noreply.invalid>
Signed-off-by: devhost agent <devhost-agent@noreply.invalid>
@nabil-becker
nabil-becker merged commit f2da03b into main Oct 27, 2026
73 checks passed
@nabil-becker
nabil-becker deleted the feature/cloud-folder-feature/1 branch October 27, 2026 17:51
nabil-becker added a commit that referenced this pull request Oct 27, 2026
## What

Step 2 of the cloud-folder Feature (`cloud-folder-feature`): `sync`
mode. rclone 1.75.2 pinned and checksum-verified; the Feature's own
volume for the rclone config (mode 600) and sync state;
`cloud-folder:login`, `cloud-folder:sync` (bisync), a timer started from
`postStartCommand`, `status` for sync mode and a `shutdown-check` that
refuses a stop while a sync runs or local changes are unsynced. `host`
mode installs no rclone. Also corrects ADR 0031 and the proposal
(bisync's default keeps both versions of a conflict; `sharepoint` is a
choice inside rclone's `onedrive` backend), and the records since #82.

## Why

Unprivileged sync is what works on a cluster that refuses FUSE and needs
no Windows host. Step 3 (`mount`, `auto`, FUSE on request) follows.

## Checklist

New Feature? Follow "Adding a Feature" in
[CONTRIBUTING.md](../CONTRIBUTING.md#adding-a-feature) first (CI
matrices, `test/_global`, README row).

- [x] Every commit is signed off (`Signed-off-by:`, DCO) - automatic
after `task repo:setup`
- [x] `version` bumped in `src/<id>/devcontainer-feature.json` (semver):
1.1.0
- [x] Downloads remain checksum-verified; nothing unverified is piped
into a shell (pinned sha256 for 1.75.2, `SHA256SUMS` for other versions)
- [x] `install.sh` is idempotent and does not assume a `remoteUser`
- [ ] Tests updated (`test/<id>/test.sh`, `scenarios.json`) and `task
test FEATURE=<id>` passes: unit tests pass (83 + 136); the Docker
scenarios (`pinned_version`, `host_only`, `sync_local`) have not run (no
daemon in the devhost), CI is their first run
- [x] `taskfile.yml` present and registered via `installTaskfile` (new
Features)
- [ ] `task lint` passes: every step passes on tracked files; locally
the PowerShell step also scans the git-ignored `material.ignore/`
(`psscriptanalyzer-tracked-files`)
- [x] `NOTES.md` updated if behaviour or options changed, and `task
docs` run so `src/<id>/README.md` is current

By hand after the release: a real sign-in, a file each way, and a stop
mid-sync.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Signed-off-by: devhost agent <devhost-agent@noreply.invalid>
Co-authored-by: devhost agent <devhost-agent@noreply.invalid>
Co-authored-by: Claude Opus 5.5 <claude-opus-5-5@noreply.invalid>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant