49 lines
2.5 KiB
Markdown
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) |