Skip to content

fix: confine runtime file writes and preserve synced issue status - #61

Merged
Robert0622 merged 1 commit into
mainfrom
feat/sync-upstream-5b686e2
Oct 20, 2026
Merged

Robert0622 merged 1 commit into
mainfrom
feat/sync-upstream-5b686e2

Conversation

@Robert0622

Copy link
Copy Markdown
Collaborator

What changed

  • Runtime filesystem confinement (security). Runtime-managed writes — agent hooks and hook settings, MCP provider configs, the git askpass helper, the repository baseline record, .git/info/exclude blocks and sandbox environment files — now go through a workspace-rooted handle (os.OpenRoot). A symlinked or traversing path inside a task workspace can no longer redirect these writes outside the workspace. New helpers live in internal/runtime/managed_files.go.
  • Tracker sync keeps platform status. The first import still initializes an issue's status from the external tracker. Repeated syncs (automatic, manual, scheduled or single-item) now keep the platform status, close source and automation state, and only refresh external content and the recorded external state. An external close still blocks execution through the external state.
  • Free collaboration creation. A group can now be created from projectId + input alone. repositoryIds is optional ([] means no repositories, omitted means all), and sandboxProfileId or workflowId can supply the environment and initial roles. The task list can be filtered to tasks the current user is responsible for.
  • Task sidebar. Tasks are grouped as running / recently ended / earlier, with failure counts. The sidebar is resizable, [] and full-width 【】 title tags are both supported, and long titles are truncated with a tooltip.

Scope

  • Platform core / API / runner
  • Public adapter / deployment
  • Classic
  • Portable
  • Shared behavior contract
  • Installer / CLI
  • Documentation only

Compatibility

  • POST /api/task-groups is backward compatible: existing {workflowId, projectId, input} bodies behave as before.
  • Repeated tracker syncs no longer overwrite the platform status of existing issues. This changes behavior for anyone who relied on external reopen/close re-mapping platform status.
  • No schema migration.

Validation

go build ./...                                   # pass
go vet ./...                                     # pass
go test -p=2 ./... -count=1 -timeout=180s        # pass (includes new web/collaboration_creation_test.js via node)
python3 scripts/check-public.py                  # pass
bash scripts/scan-secrets.sh                     # pass, no leaks found
bash local/scripts/validate.sh                   # not run (LoopForge Local unchanged)
bash local/scripts/smoke-install.sh              # not run (LoopForge Local unchanged)
bash local/scripts/e2e.sh                        # not run (LoopForge Local unchanged)

Safety

  • I did not include credentials, internal endpoints, production data, or organization-specific infrastructure.
  • I preserved user files and unrelated changes.
  • I updated generated Classic host bundles when applicable. (not applicable)
  • I documented third-party content and licensing changes when applicable. (not applicable)

- Confine runtime-managed file operations (hooks, MCP config, git askpass,
  baseline, excludes, sandbox environment) to the workspace root using
  os.OpenRoot, rejecting symlink and path-traversal escapes.
- Keep the platform status, close source and automation state of existing
  issues on repeated tracker sync; only refresh external content and the
  recorded external state.
- Free collaboration: create a group without an SOP, choose repositories
  ([] for none) and a sandbox profile; filter tasks by responsible user.
- Task sidebar: running / recently ended / earlier groups with failure
  counts, resizable width, [] and full-width title tags, readable items.
@Robert0622
Robert0622 merged commit 91f2b42 into main Oct 20, 2026
14 checks passed
@Robert0622
Robert0622 deleted the feat/sync-upstream-5b686e2 branch October 20, 2026 07:12
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