UUID-only task_id: remove timestamp-style run IDs
Status: Proposal
Date: 2026-02-13
Audience: Core backend + frontend maintainers
Overview
PlanExe currently uses two ID styles for executions:
- Timestamp-style:
PlanExe_19841231_195936 - UUID-style:
920da16e-f1fa-4ed6-bd5f-882d50950bec
This proposal standardizes on UUID only and removes generation/support for the timestamp-style ID.
Why change
Mixed ID formats create ambiguity and extra branching in code paths, tests, and docs. UUID-only identifiers are simpler, globally unique, and already align with TaskItem.id semantics in multi-user flows.
Decision
- New execution IDs are always UUIDs.
- Stop generating
PlanExe_YYYYMMDD_HHMMSSIDs. - Remove toggles that choose between timestamp vs UUID.
- Keep route parameter name compatibility (
run_id) only where needed for now, but value format is UUID.
Required code changes
1) ID generation (source of truth)
/Users/neoneye/git/PlanExeGroup/PlanExe/worker_plan/worker_plan_api/generate_run_id.py
- Remove
RUN_ID_PREFIX = "PlanExe_"dependency for run creation. - Change
generate_run_id(...)to always return a plain UUID string. - Remove the timestamp branch and
use_uuidswitch behavior. - Update function docstring to describe UUID-only behavior.
/Users/neoneye/git/PlanExeGroup/PlanExe/worker_plan/worker_plan_api/tests/test_generate_run_id.py
- Remove timestamp-format test (
test_generate_run_id_timestamp). - Update UUID test to validate plain UUID format (no
RUN_ID_PREFIXexpectations).
2) Worker API request model and run creation
/Users/neoneye/git/PlanExeGroup/PlanExe/worker_plan/app.py
- In
StartRunRequest, removeuse_uuid_as_run_id. - In
create_run_directory, call UUID-onlygenerate_run_id(...). - Keep existing
/runs/...endpoints if desired for transport compatibility, but all returned IDs are UUIDs. - Review purge defaults that currently use
RUN_ID_PREFIXand switch to UUID-safe behavior.
3) Frontend multi user cleanup
/Users/neoneye/git/PlanExeGroup/PlanExe/frontend_multi_user/src/app.py
- Remove unused
Config.use_uuid_as_run_idand any dead references. - Verify all references to task execution identifiers assume UUID-only values.
4) Purge behavior and old assumptions
/Users/neoneye/git/PlanExeGroup/PlanExe/worker_plan/worker_plan_internal/utils/purge_old_runs.py
- Current purge uses prefix matching. With UUID-only IDs, prefix assumptions should be removed or replaced.
Suggested direction:
- Default to purge by age only, or
- Use configurable regex for UUID directories/files.
5) Documentation updates
Update docs that mention PlanExe_... run IDs to UUID-only examples.
Likely touchpoints:
/Users/neoneye/git/PlanExeGroup/PlanExe/docs/token_counting.md/Users/neoneye/git/PlanExeGroup/PlanExe/docs/plan.md(if run-id examples remain)- Any API examples in worker/frontend docs using prefixed timestamp IDs
Naming note (optional but recommended)
Even if route path names stay /runs/{run_id}, the semantic model has shifted to UUID task IDs. A follow-up rename pass can improve clarity:
run_id->task_idrun_id_dir->task_dir
This is mostly mechanical and can be staged after UUID-only rollout.
Rollout plan
- Implement UUID-only generation + remove toggles.
- Update purge behavior.
- Update tests/docs.
- Run one migration pass for any tooling that assumes
PlanExe_prefix.
Acceptance criteria
- No new run/task IDs use timestamp format.
- No UI or API option exists to request timestamp IDs.
- Multi-user flow create UUID directory names.
- Tests and docs contain UUID-only examples.