@@ -156,6 +156,9 @@ PyAutoPrompt/
156156├── issued/ ← prompts that have been routed via /start_dev
157157│ └── autolens_workspace_developer/ ← per-target subdirs preserved
158158│
159+ ├── z_features/ ← multi-task epic trackers (one tracker → many sub-prompts)
160+ │ └── complete/ ← archived trackers (all sub-prompts shipped)
161+ │
159162├── z_vault/ ← deferred prompts (z_ prefix sorts last in listings)
160163│
161164├── autoprompt/ ← prompts about THIS repo's own infrastructure
@@ -241,6 +244,48 @@ Each task is an H2 section:
241244 Long-form description of what landed, gotchas, follow-ups.
242245```
243246
247+ ### ` z_features/ ` (multi-task epics)
248+
249+ ` z_features/ ` holds ** umbrella trackers** for multi-task epics — single
250+ markdown files listing a sequence of sub-prompts that ship as their own PRs
251+ under ` autofit/ ` , ` autogalaxy/ ` , etc. The tracker itself never becomes an
252+ issue; only its sub-prompts do.
253+
254+ ```
255+ z_features/
256+ ├── latent_refactor.md ← tracker (lists sub-prompt links)
257+ ├── ellipse_fitting_jax.md
258+ ├── ...
259+ └── complete/ ← archived trackers (all sub-prompts shipped)
260+ ```
261+
262+ Use this pattern when a single ask decomposes into 5+ dependent sub-tasks.
263+ ` /start_dev z_features/<tracker>.md ` runs in ** audit-only mode** — it reports
264+ which sub-prompts are not-yet-issued / in-flight / shipped, and offers to
265+ move the tracker to ` z_features/complete/ ` once everything has landed.
266+
267+ ** Naming convention for clean audit:** the audit derives task-name
268+ candidates from each sub-prompt's ` issued/ ` filename stem with ` _ ` →` - ` . For
269+ the audit to auto-match against ` complete.md ` headings, ** the task slug in
270+ ` active.md ` / ` complete.md ` must equal the issued filename's stem after
271+ that transform** .
272+
273+ | Issued filename | Task slug that matches | Task slug that does NOT match |
274+ | ---| ---| ---|
275+ | ` issued/latent_module_autogalaxy.md ` | ` latent-module-autogalaxy ` ✓ | ` latent-autogalaxy-module ` ✗ |
276+ | ` issued/latent_smoke_test.md ` | ` latent-smoke-test ` ✓ | ` smoke-test-latent ` ✗ |
277+ | ` issued/latent_variables_tutorial_expand_autofit.md ` | ` latent-variables-tutorial-expand-autofit ` ✓ | ` latent-tutorial-autofit ` ✗ |
278+
279+ The third row is the trap — if ` /start_dev ` renames the prompt on move
280+ (e.g. appends a repo suffix for disambiguation) and ` active.md ` 's task slug
281+ diverges from the issued stem, the audit will report the sub-prompt as
282+ "in flight" forever and never archive the tracker. The cure is to either:
283+
284+ - Pick the task slug at ` /start_dev ` time to match the eventual issued
285+ filename stem, or
286+ - Manually archive the tracker (` mv z_features/<name>.md z_features/complete/ `
287+ + ` prompt_sync_push ` ) when you know it's all shipped.
288+
244289---
245290
246291## Tracking and inspection
0 commit comments