Task Hygiene + Naming Cleanup Proposal (Tasks SSOT)
Run: run_01c1da2e
HQ Agent: agt_admin
Scope: Propose a lightweight naming + column policy for tasks.json to reduce “inbox” sprawl. No edits required.
Goals (what “clean” looks like)
- Inbox stays small: the inbox is a temporary holding pen, not a workspace.
- Every task is immediately classifiable: owner (agent), project/lane, and next action are obvious.
- Columns mean “state,” not “priority.” Priority is encoded via tags and a small “Today” set.
- Naming makes scanning effortless: titles are consistent so duplicates and stale items are visible.
Column policy (simple, enforceable)
Use only these columns as canonical states:
- inbox — Untriaged. Must be clarified + assigned + moved within 24 hours.
- today — Chosen for execution today (max 3–5 per agent, max 10 total if you want a global cap).
- doing — Actively being worked now (hard cap 1–2 per agent to prevent “fake progress”).
- waiting — Blocked on someone/something external (client response, editor deliverable, credentials, approval).
- done — Finished.
Rules:
- No task lives in inbox without at least: projectId + tags + clear next action.
- If a task cannot be executed because it needs info/approval, it goes to waiting and the title/notes must say what it’s waiting on.
- “Someday/maybe” does not belong in inbox. Create a separate backlog project/column only if absolutely needed; otherwise keep as inbox→triage→waiting/today.
Naming convention (titles that prevent clutter)
Title template
Use this template in tasks[].title:
<LANE/PROJECT>: <Verb> <Object> — <Qualifier/Timebox>
Examples:
GROWIQ: Lock front-door offer — v1 (15 min)EQT: Audit pipelines/automations — punchlist onlyENVOTRADES: Editor brief — week of 2026-03-02CLIENT DEMO: Send preview — link + deadline
Prefix rules
- Always start with a stable prefix:
- Lane/product:
GROWIQ,EQT,BABA,FAIRLINE,ENVOTRADES,TRADING - Client work:
CLIENT <Name> - Ops:
OPS,ADMIN,FINANCE
- Lane/product:
Verb rules
- Start with an action verb:
Draft,Build,Audit,Ship,Fix,Decide,Send,Review. - Avoid vague verbs:
Handle,Work on,Do,Stuff.
Time qualifier rules (optional but powerful)
Add a suffix if it reduces ambiguity:
— v1/— v2— week of YYYY-MM-DD— (15 min)/— (60 min)— draft/offwhen the task must not go live
Notes policy (what belongs in notes vs title)
Put in notes:
- Links, credentials references (never paste secrets), file paths
- Definition of done (3 bullets max)
- Constraints (e.g., “no outbound sends until approval”)
- Context for handoff
Keep the title for scan speed.
Mini template for notes:
- Outcome: …
- DoD: (1)… (2)… (3)…
- Constraints: …
- Links/Paths: …
Tag policy (small controlled vocabulary)
Minimize tags and make them composable:
- Type:
build,audit,content,ops,client,planning - Risk/constraint:
approval-gated,draft-off,no-outbound,no-delete - Channel/system:
ghl,replit,youtube,instagram,tradingview
Rule: if a tag appears once, it’s probably noise. Promote only tags that recur.
Anti-sprawl operating rules (the real fix)
- Daily triage (10 minutes):
- Empty inbox: clarify, assign agentId if applicable, move to today/doing/waiting.
- Weekly hygiene (30 minutes):
- Merge duplicates (or mark one “superseded” in notes and move to done).
- Add missing prefixes.
- Convert multi-step monsters into 3–7 smaller tasks.
- WIP limit:
- Per agent: max
doing= 2. - Anything else must be
todayorwaiting.
- Per agent: max
- Waiting tasks require a “next check” line:
- e.g., “Next check: Tue” or “Next check after editor delivers v1.”
Quick cleanup pass you can do without changing data structure
If you do one manual sweep, do it in this order:
- Normalize prefixes in titles for anything in inbox.
- Move anything that depends on someone else to waiting (and add what it’s waiting on).
- Pick a short list for today.
- Enforce WIP: move non-active “doing” tasks back to today or waiting.
Optional (future) structure improvements (no requirement)
If you later want to reduce ambiguity further, consider adding fields to task objects:
owner(string) separate fromagentIdwhen humans are involveddueAtMsfor real deadlinesblockedBy(string)
Keep it optional—process discipline should solve 80% first.