KeiSeiKit-1.0/_primitives/_rust/kei-task/atoms/schemas/add-dependency-input.json
Parfii-bot 793b91bc43 feat(convergence/p1): kei-entity-store engine + schema fragments + kei-task pilot
Layer A + B of convergence wave. Extract common SQLite-CRUD + graph
logic into kei-entity-store engine; introduce JSON Schema fragments;
pilot-migrate kei-task to verify parity.

New crate _primitives/_rust/kei-entity-store/ (1151 LOC):
- src/schema.rs — EntitySchema + FieldDef + enabled_verbs + fts_columns
  + edge_table + custom_migrations
- src/engine.rs — Store::open with WAL pragma + migration runner
- src/verbs/ — 8 data-driven verb modules (create/get/list/search/
  update/delete/link/rank) uniform JSON-in/JSON-out signature
- src/error.rs — typed VerbError enum
- tests/verb_smoke.rs — 10/10 green

New _schemas/fragments/ (83 LOC JSON):
- entity-base.json, titled.json, titled-content.json, edge.json

kei-task pilot migration:
- TASK_SCHEMA: EntitySchema static (67 LOC, was 58)
- store.rs becomes thin shim over engine::Store
- atoms/create.rs + atoms/search.rs delegate to engine verbs
- atoms/schemas/*.json use $ref to _schemas/fragments/ (DRY)
- Task-specific secondary tables (milestones, task_deps) stay via
  schema.custom_migrations; cycle-detection in deps.rs stays
  hand-rolled (domain logic, not generic CRUD)
- 9/9 tests green — full behavioural parity

Convergence delta:
- kei-task touched files: 342 → 389 LOC (+47 for JSON marshalling
  boundary; net wash on pilot)
- BUT each remaining 5 sibling crate can shrink ~400-500 LOC on migration
- Expected total reduction when all 6 migrated: ~2500 LOC across the cluster

Follow-ups declared:
- Migrate kei-chat-store, kei-content-store, kei-social-store to engine
- Migrate kei-sage (needs string-id edge variant; currently generic
  link/rank assume int ids)
- Migrate kei-crossdomain
- Expose list/delete atoms in kei-task (engine supports, atoms not yet)
- Fold kei-curator as engine::hygiene module (per P4 audit)
- Fold kei-search-core entities, keep workflow as thin kei-search-pipeline

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 04:46:47 +08:00

38 lines
1.1 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "kei-task/atoms/schemas/add-dependency-input.json",
"title": "kei-task::add-dependency input",
"description": "Writes one edge into the task DAG. Uses the shared `edge` fragment; restricts `edge_type` (`dep_type` here) to the task-specific enum and renames to `dep_type` for backwards compatibility.",
"type": "object",
"required": ["from", "to"],
"properties": {
"from": {
"type": "integer",
"minimum": 1,
"description": "Source task id (the task that has the dependency)"
},
"to": {
"type": "integer",
"minimum": 1,
"description": "Target task id (the task being depended on)"
},
"dep_type": {
"type": "string",
"enum": [
"blocks",
"feeds_into",
"subtask_of",
"milestone_of",
"assigned_to",
"depends_on"
],
"default": "blocks",
"description": "Task-specific refinement of the generic `edge.edge_type`"
}
},
"additionalProperties": false,
"examples": [
{ "from": 42, "to": 17, "dep_type": "blocks" },
{ "from": 3, "to": 1 }
]
}