Files
taskgraph_ts/tasks/implementation/schema/input-schemas.md
glm-5.1 b415d8c86b feat(schema/input-schemas): define TaskInput, DependencyEdge schemas and Nullable re-export
- Add TaskInput schema with all fields per architecture (id, name, dependsOn,
  categorical fields as Optional(Nullable(...)), metadata fields)
- Add DependencyEdge schema with from, to, qualityRetention fields
- Re-export Nullable helper from task.ts for convenience
- Add type aliases: TaskInput, DependencyEdge via Static<typeof>
- Add 49 tests covering validation, nullable fields, edge cases, type correctness
2026-04-27 11:02:40 +00:00

2.1 KiB

id, name, status, depends_on, scope, risk, impact, level
id name status depends_on scope risk impact level
schema/input-schemas Define TaskInput, DependencyEdge, and Nullable helper completed
schema/enums
narrow low component implementation

Description

Define the TaskInput and DependencyEdge input schemas in src/schema/task.ts, plus the Nullable generic helper. TaskInput uses Type.Optional(Nullable(...)) for categorical fields to support both absent and explicitly-null values (YAML frontmatter distinction).

Acceptance Criteria

  • src/schema/task.ts exports Nullable helper: const Nullable = <T extends TSchema>(T: T) => Type.Union([T, Type.Null()]) — Re-exported from enums.ts
  • TaskInput schema defined with all fields per schemas.md:
    • id: Type.String(), name: Type.String(), dependsOn: Type.Array(Type.String())
    • Categorical fields: Type.Optional(Nullable(TaskXxxEnum)) for status, scope, risk, impact, level, priority
    • Metadata fields: tags, assignee, due, created, modified
  • DependencyEdge schema: from: Type.String(), to: Type.String(), qualityRetention: Type.Optional(Type.Number({ default: 0.9 }))
  • Type aliases derived: type TaskInput = Static<typeof TaskInput>, type DependencyEdge = Static<typeof DependencyEdge>
  • Re-exported from src/schema/index.ts

References

  • docs/architecture/schemas.md — TaskInput, DependencyEdge, Nullable definitions
  • docs/research/typebox-patterns.md — section 6 (Nullable helper pattern)

Notes

Nullable was already defined in src/schema/enums.ts by the schema/enums task. It is re-exported from src/schema/task.ts for convenience, satisfying the acceptance criteria. All other schemas (TaskInput, DependencyEdge) are brand new.

Summary

Implemented TaskInput and DependencyEdge input schemas in src/schema/task.ts, plus re-exported Nullable helper.

  • Modified: src/schema/task.ts (implemented TaskInput, DependencyEdge schemas with type aliases)
  • Modified: test/schema.test.ts (added 49 tests for TaskInput, DependencyEdge, Nullable re-export, type alias verification)
  • All 126 tests passing, lint clean.