Break the @alkdev/taskgraph architecture specs into dependency-ordered implementation tasks across 8 component directories: setup, schema, error, graph, analysis, cost-benefit, frontmatter, api, and review. Each task has clear acceptance criteria referencing specific architecture docs. Three review tasks serve as quality gates at critical junction points (schemas-and-errors, graph-complete, complete-library). The dependency graph is validated acyclic with 9 topological levels enabling significant parallelism across independent work streams.
3.4 KiB
3.4 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |
|---|---|---|---|---|---|---|---|---|
| graph/construction | Implement TaskGraph construction methods (fromTasks, fromRecords, fromJSON, addTask, addDependency) | pending |
|
broad | high | phase | implementation |
Description
Implement the four construction methods in src/graph/construction.ts and integrate them as static methods on TaskGraph. These are the primary ways to create a graph instance from structured data. Each method has distinct semantics for edge handling, error behavior, and validation.
Per graph-model.md, the preferred internal approach is to build a serialized graph JSON blob and call graph.import() for paths 1 and 2 (better performance than N individual addNode/addEdge calls).
Acceptance Criteria
TaskGraph.fromTasks(tasks: TaskInput[]): TaskGraph:- Transforms
TaskInput[]into node data + edge data, builds serialized blob, callsgraph.import() - Each
dependsOnentry creates an edge with defaultqualityRetention: 0.9 dependsOntargets not matching any task ID become orphan nodes with default attributes- Duplicate task IDs throw
DuplicateNodeError - Uses
mergeNodefor idempotent node merging (same ID gets merged attributes) - Duplicate
dependsOnentries for the same pair create only one edge (idempotent viaaddEdgeWithKey)
- Transforms
TaskGraph.fromRecords(tasks: TaskInput[], edges: DependencyEdge[]): TaskGraph:- Edges must reference tasks that exist in the
tasksarray — throwsTaskNotFoundErrorfor dangling references - Per-edge
qualityRetentionfrom theDependencyEdgeobjects - Duplicate task IDs throw
DuplicateNodeError - Duplicate edges (same prerequisite→dependent pair) throw
DuplicateEdgeError
- Edges must reference tasks that exist in the
TaskGraph.fromJSON(data: TaskGraphSerialized): TaskGraph:- Validates input against
TaskGraphSerializedschema (using TypeBoxValue.Check) - Uses
graph.import()on the validated data - Orphan nodes in JSON are preserved
- Validates input against
addTask(id: string, attributes: TaskGraphNodeAttributes): void:- Throws
DuplicateNodeErrorif ID already exists - Adds node to internal graphology instance
- Throws
addDependency(prerequisite: string, dependent: string, qualityRetention?: number): void:- Throws
TaskNotFoundErrorif either endpoint doesn't exist - Throws
DuplicateEdgeErrorif edge already exists - Uses
addEdgeWithKeywith deterministic key${prerequisite}->${dependent} - Default
qualityRetention: 0.9if not provided
- Throws
fromTasks/fromRecordsstripnull→undefinedfor categorical fields duringTaskInput→TaskGraphNodeAttributestransformationTaskInputfieldstags,assignee,due,created,modifiedare not stored on graph nodes (belong to caller)- Unit tests for each construction method: happy path, error cases, edge cases (empty arrays, cycles not rejected at construction time)
- All construction methods use deterministic edge keys per ADR-006
References
- docs/architecture/graph-model.md — construction paths, TaskInput→attributes transformation, error handling table
- docs/architecture/api-surface.md — TaskGraph class, fromTasks/fromRecords/fromJSON/addTask/addDependency
- docs/architecture/decisions/006-deterministic-edge-keys.md — deterministic edge keys
Notes
To be filled by implementation agent
Summary
To be filled on completion