You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PickLab currently writes generated run artifacts to <project>/.picklab/runs/ by default. Screenshots and manifests then appear in the target repository's source-control view, even though they are runtime output rather than project source.
PickForge already defaults per-project runtime data outside repositories. PickLab should follow the same model under the shared Pickforge company root.
Use the platform home-directory equivalent on non-Linux systems. Keep each project's runs isolated with a stable project ID derived from its canonical path.
Keep project configuration at <project>/.picklab/config.json; only generated runtime artifacts move by default.
Compatibility
New runs write only to the resolved storage location.
Existing <project>/.picklab/runs/ data remains readable by artifact list/show/report/resource flows.
Do not automatically move or delete existing runs.
Preserve PICKLAB_HOME as the PickLab-root override; its default becomes ~/.pickforge/picklab.
Document any one-time behavior affecting existing ~/.picklab global config, agents, or sessions. Prefer a non-destructive read fallback rather than silently orphaning them.
Acceptance criteria
A default screenshot/run creates no generated files inside the target repository.
Default runs are isolated under ~/.pickforge/picklab/projects/<projectId>/runs/.
The same canonical project path resolves to the same project ID; different paths do not collide.
CLI and MCP artifact create/list/show/report/resource flows use the same resolver.
project-local restores the current <project>/.picklab/runs/ behavior when explicitly configured.
custom rejects ambiguous/unsafe configuration (for example, a missing path or a relative path if absolute paths are required).
Existing project-local runs remain discoverable without an automatic migration.
PICKLAB_HOME overrides work in tests and real CLI/MCP usage.
README/config examples explain the default, project-local opt-in, custom storage, legacy behavior, and source-control impact.
docs/releases/UNRELEASED.md records the user-visible default change.
Agent plan
Goal: move generated PickLab runs out of repositories by default while preserving explicit local storage and non-destructive access to legacy runs.
Checklist:
Add a core storage resolver for home/project-local/custom modes and stable per-project IDs.
Route run creation and artifact lookup through the resolver across core, CLI, and MCP.
Add legacy project-local read fallback without legacy writes or automatic deletion/moves.
Handle the ~/.picklab → ~/.pickforge/picklab default-root transition for config, agents, and sessions without silently losing existing state.
Add regression tests for default repo cleanliness, project isolation, overrides, explicit local mode, custom paths, and legacy discovery.
Update README, config examples, and unreleased notes.
Run focused tests, then bun run typecheck, bun run test, and bun run build.
Open one focused PR and complete review.
Validation:
bun run test packages/core/test/paths.test.ts packages/core/test/run.test.ts packages/core/test/config.test.ts
focused CLI/MCP artifact tests added by this change
bun run typecheck
bun run test
bun run build
manual smoke from a temporary Git repository: create a run and verify git status --short stays clean
PR plan: one PR. The resolver, writers, readers, compatibility behavior, and docs are tightly coupled; splitting would leave an inconsistent storage contract.
Feature flag: not needed if this ships as one backward-compatible change in the next release.
Current status: Planned
Next action: implement the storage resolver and regression tests.
Problem
PickLab currently writes generated run artifacts to
<project>/.picklab/runs/by default. Screenshots and manifests then appear in the target repository's source-control view, even though they are runtime output rather than project source.PickForge already defaults per-project runtime data outside repositories. PickLab should follow the same model under the shared Pickforge company root.
Proposed outcome
Default PickLab run storage to:
Use the platform home-directory equivalent on non-Linux systems. Keep each project's runs isolated with a stable project ID derived from its canonical path.
Storage modes:
home(default): Pickforge company root aboveproject-local(explicit opt-in):<project>/.picklab/runs/custom(explicit absolute path)Keep project configuration at
<project>/.picklab/config.json; only generated runtime artifacts move by default.Compatibility
<project>/.picklab/runs/data remains readable by artifact list/show/report/resource flows.PICKLAB_HOMEas the PickLab-root override; its default becomes~/.pickforge/picklab.~/.picklabglobal config, agents, or sessions. Prefer a non-destructive read fallback rather than silently orphaning them.Acceptance criteria
~/.pickforge/picklab/projects/<projectId>/runs/.project-localrestores the current<project>/.picklab/runs/behavior when explicitly configured.customrejects ambiguous/unsafe configuration (for example, a missing path or a relative path if absolute paths are required).PICKLAB_HOMEoverrides work in tests and real CLI/MCP usage.docs/releases/UNRELEASED.mdrecords the user-visible default change.Agent plan
Goal: move generated PickLab runs out of repositories by default while preserving explicit local storage and non-destructive access to legacy runs.
Checklist:
~/.picklab→~/.pickforge/picklabdefault-root transition for config, agents, and sessions without silently losing existing state.bun run typecheck,bun run test, andbun run build.Validation:
bun run test packages/core/test/paths.test.ts packages/core/test/run.test.ts packages/core/test/config.test.tsbun run typecheckbun run testbun run buildgit status --shortstays cleanPR plan: one PR. The resolver, writers, readers, compatibility behavior, and docs are tightly coupled; splitting would leave an inconsistent storage contract.
Feature flag: not needed if this ships as one backward-compatible change in the next release.
Current status: Planned
Next action: implement the storage resolver and regression tests.