Files
taskgraph_ts/tasks/implementation/graph/taskgraph-class.md

49 lines
2.5 KiB
Markdown

---
id: graph/taskgraph-class
name: Implement TaskGraph class skeleton with graphology DirectedGraph
status: completed
depends_on:
- schema/enums
- schema/input-schemas
- schema/graph-schemas
- error/error-hierarchy
- setup/project-init
scope: moderate
risk: medium
impact: phase
level: implementation
---
## Description
Create the `TaskGraph` class in `src/graph/index.ts` that wraps `graphology.DirectedGraph`. This is the data class that holds the graph instance and provides the foundation for construction, mutation, and query methods. At this stage, implement the constructor, `raw` getter, and the overall class structure. Actual construction and analysis methods come in dependent tasks.
## Acceptance Criteria
- [x] `src/graph/index.ts` exports `TaskGraph` class
- [x] Constructor creates an internal `graphology.DirectedGraph` with options `{ type: 'directed', multi: false, allowSelfLoops: false }`
- [x] `get raw(): Graph` returns the underlying graphology instance
- [x] Constructor accepts optional `TaskGraphSerialized` for initializing from serialized data (delegates to `fromJSON` pattern)
- [x] Class stores edge key format: `${source}->${target}` (per ADR-006)
- [x] No parallel edges constraint enforced by `multi: false` graph option
- [x] No self-loops constraint enforced by `allowSelfLoops: false` graph option
- [x] Internal `_edgeKey(source, target): string` method producing deterministic keys
- [x] Re-exported from `src/index.ts`
## References
- docs/architecture/api-surface.md — TaskGraph class API
- docs/architecture/graph-model.md — construction paths, edge direction, constraints
- docs/architecture/decisions/006-deterministic-edge-keys.md — edge key format
## Notes
Implementation placed in `src/graph/construction.ts` (as per existing module structure). The class is re-exported via `src/graph/index.ts` and `src/index.ts`. Static methods `fromTasks` and `fromRecords` are stubs (throw) pending dependent task implementation. `fromJSON` is fully implemented since the constructor needs it for deserialization.
## Summary
Implemented TaskGraph class skeleton wrapping graphology DirectedGraph.
- Modified: `src/graph/construction.ts` (full class with constructor, raw getter, _edgeKey, fromJSON, stubs for fromTasks/fromRecords)
- Modified: `src/graph/index.ts` (added TaskGraphInner type export)
- Modified: `test/graph.test.ts` (added 20 new tests for class skeleton, preserved 22 existing fixture tests)
- Tests: 42 in graph.test.ts (all passing), 204 total across suite (all passing)