Skip to content

feat(framework): a task identity file linking delivery to its backlog item #649

Description

@blafourcade

Outcome

A delivery folder declares where it comes from and which step produced which file, without repeating anything the backlog item already holds.

Scope

  • Includes: metadata.json in the task folder, carrying a unit_id — the identity of the unit of work, distinct from the run_id of a session in feat(framework): an aidd-telemetry plugin whose hooks journal every session #620, one upward link, and a journal of the steps that ran with the files each produced.
  • Includes: written by the skills that create and advance the folder, at step boundaries — a handful of writes over a task's life, human-readable and correctable.
  • Excludes: status of any kind. The artefact's frontmatter owns it, and a step with an end time is finished by deduction.
  • Excludes: the folder's file listing. produced is provenance, not an inventory.
  • Excludes: tokens, cost, model, duration. Those come from telemetry.
  • Excludes: any downward link. Readers index the folders and group by the upward one.

The file

{
  "schema_version": 1,
  "unit_id": "01J9X4M2K7QRVB",
  "task_id": "2026_08_14_telemetry-v1",
  "backlog": "ai-driven-dev/framework#617",
  "branch": "feat/telemetry-v1",
  "pull_request": "ai-driven-dev/framework#651",
  "opened_at": "2026-08-14T08:40:12Z",
  "closed_at": null,
  "steps": [
    { "skill": "aidd-pm:04-spec",   "from": "...", "to": "...", "produced": ["spec.md"] },
    { "skill": "aidd-dev:01-plan",  "from": "...", "to": "...", "produced": ["plan.md", "phase-1.md"] },
    { "skill": "aidd-dev:08-debug", "from": "...", "to": "...", "produced": [] }
  ]
}

steps is a journal, not a checklist: entries repeat, and arrive out of order. Three debug runs mid-implementation give three entries. The flow is read afterwards, never constrained beforehand.

One field, one support

backlog points at the artefact on whatever support it lives: an issue reference where the backlog lives with the ticket provider, a project-relative path where it lives in Markdown. This is what persistence.md already prescribes — "Use native fields when supported; otherwise use explicit ids or project-relative paths" — and its companion rule is why nothing is copied: "Never mirror one Story across supports."

Neither the type of work nor the originating ticket is repeated here. The backlog artefact carries them in type, work_kind and source.

A folder with no backlog artefact is a normal state: backlog is null, and only then does the file carry its own source and type.

Done When

  • From a run file, the chain to the epic is walkable with no missing edge.
  • No field in the file duplicates one that exists on the backlog artefact, asserted field by field.
  • A story delivered in two folders produces two files pointing at it, and the story is unchanged.
  • A folder created without a backlog artefact is valid and readable.
  • Three invocations of the same skill produce three step entries, not one.
  • Nothing writes a downward link.

Completion Evidence

A real feature whose cost, sessions, steps, produced files and originating ticket are reachable from one another in both directions of reading.

Relations

Field Value
parent #648
depends_on #620

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Fields

    Priority

    High

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions