diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 98a47e8..eff25db 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "analysis-workflow", - "version": "0.5.0", + "version": "0.6.0", "description": "Conventions for analysis repos where humans (notebooks) and coding agents (scripts) work side by side: one task per session, worktree and directory; worktree-safe output paths; additive write-back to AnnData zarr working objects. Ships a skill, guard hooks and the analysis_workflow Python package.", "author": { "name": "quadbio" diff --git a/skills/analysis-workflow/SKILL.md b/skills/analysis-workflow/SKILL.md index e8dc8da..60a5a9c 100644 --- a/skills/analysis-workflow/SKILL.md +++ b/skills/analysis-workflow/SKILL.md @@ -80,8 +80,8 @@ repo, a short summary. 1. The agreed deliverables, and the README brought up to date, its jobs counted with the compute environment's tools. 2. Write back: dry run, sign-off on that diff, then `yes=True`. -3. An object other tasks will load is promoted to `data//processed/` at sign-off. Ask which subdirectory; - record the path. +3. An object other tasks will load is promoted to `data//processed/` at sign-off: a working object into + `working/`, anything else into a subdirectory with a descriptive name. Ask which subdirectory; record the path. 4. `analysis-workflow check layout`, then push. 5. Open the PR, its body from the PR template; then add it with a short summary to the README and push again. The body is edited until the merge, never after. @@ -93,10 +93,11 @@ repo, a short summary. | --- | --- | --- | | `raw/` | bytes as they arrived | nobody, after arrival | | `resources/` | curated inputs that are not data: gene lists, marker tables | a human, rarely | -| `processed/` | objects code loads, the working objects among them | notebooks; tasks by promotion | +| `processed/` | objects code loads: working objects in `working/`, others in descriptively named subdirectories | notebooks; tasks by promotion | | `results/` | a notebook's own outputs, prefixed with its stem | humans only | -**Working objects** are AnnData zarr stores, `_.zarr`, in which results accumulate. +**Working objects** are AnnData zarr stores, `processed/working/_.zarr`, in which results +accumulate. - Read only what you need: `ad.io.read_elem(zarr.open_group(path)["obs"])`, or `ad.experimental.read_lazy`. - Write back only through `commit_adata`: additions only. Never write an in-memory object over a working object. Changing or removing a key means a new dated copy; recomputing an existing key is a silent no-op. diff --git a/skills/analysis-workflow/assets/task_template/README.md b/skills/analysis-workflow/assets/task_template/README.md index a6c0da4..9740870 100644 --- a/skills/analysis-workflow/assets/task_template/README.md +++ b/skills/analysis-workflow/assets/task_template/README.md @@ -22,8 +22,8 @@ here too. --> -- Working object: `data//processed/.../.zarr`, and the label keys used -- Other artifacts consumed: `analysis////outputs/`, `data//processed/` +- Working object: `data//processed/working/.zarr`, and the label keys used +- Other artifacts consumed: `analysis////outputs/`, `data//processed//` ## Write-back