• Fills the gap: where does a DevLoop project actually live, and how does a user
    create one? Previous docs assumed everything goes under
    data/companies/{cid}/projects/{pid}/ with no user control.
    
    Design:
    - A DevLoop "project" = one directory + project.json + git history;
      the directory is the project root, the anchor for everything
    - 3 modes:
      - sandbox (default, v1): root auto-generated under data/.../projects/{pid}/
      - linked-new (v1): user picks any empty path, e.g. ~/code/auto-todo
      - linked-existing (v2): bind to existing git repo subdirectory
    - 3 creation entry points:
      - REST: POST /api/devloop/projects with optional {mode, target_path}
      - CLI: scripts/devloop-new.js with --path / --name / --requirement / --list
      - UI: Dashboard "+ NEW PROJECT" modal with mode radio + path picker
    - New pathResolver service (path-resolver.js): single source of truth for
      resolveProjectRoot(pid). All paths derive from it; nothing hardcodes
      data/companies/... anymore
    - linked projects registered in ~/.devloop/linked-projects.json
    - memory stays at company level (~/data/companies/{cid}/memory/) even for
      linked projects — privacy + cross-project knowledge isolation
    - Strict sandbox: blacklist /, /etc, /System, ~/.ssh, ~/.aws etc. for
      target_path; writeAllowList relative to root_path
    
    Pages changed:
    - arch-project-root.html (NEW, 15-section comprehensive design)
    - sdd-model.html       (M-1 ProjectMeta + mode + root_path fields)
    - sdd-control.html     (C-1 POST /projects accepts mode + target_path)
    - assets/shell.js      (sidebar adds arch-project-root)
    - assets/search-index.json + build-manifest.json (rebuilt)
    
    Adds ~2 days to P0 (pathResolver + schema migration), ~1.5 days to P1
    (CLI + mode params), ~1 day to P4 (UI modal). Total 10 → 10.5 weeks.
    
    Key insight: linked-new mode means a user can DevLoop code straight into
    ~/code/auto-todo, then `git push origin main` to ship — without manually
    exporting from the sandbox. The sandbox-vs-linked choice is path-transparent
    to LoopController and all Agents.
    
    Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
    yibo authored
     
    Browse File »