コンテンツにスキップ

仕様・利用条件・制約

このパッケージが共通型・純粋なグラフ計算・インメモリアダプターの正本です。 DBアダプター、スキーマ/DDL、HTTP、グラフを使うAI実行はdata-engineまたはアプリ側に残します。 TaskGraphAdapterは共通インターフェースで、接続先や保存機能ではありません。 engineの従来のグラフ入口は同じ関数・クラスを再exportします。

TaskNodeは一意のid、title、statusを持ち、durationHoursの既定は1時間です。 TaskEdgeはpredecessorIdからsuccessorIdへ接続し、lagHoursの既定は0です。 status、dueDate、assigneeなどのメタデータで計算対象や日程が自動変更されることはありません。 TypeScript型は入力JSONの検証器ではありません。境界で入力を検証・正規化してください。

CPMが解くのはfinish-to-start依存だけです。dependencyType省略、FS、FINISH_TO_START を受け付けます。SS/FF/SFなどはFSとして処理せず例外にします。 共通型が他のシステムの種別を表現できても、この計算器が対応するとは限りません。

durationは有限の非負数(0も可)、lagは有限数、IDは一意、依存の両端は実在する必要があります。 CPMには非循環グラフが必要です。負のlagは先行着手の値として受け付けます。 開始時点の下限は0で、日付・営業日・祝日・タイムゾーン・人員の制約は計算しません。 業務固有のlag制限やカレンダーはアプリ側が扱います。 calculateCriticalPathとsimulateDelayImpactはこれらの条件を検証しますが、 隣接リスト・循環検出・ソートの低水準関数は正規化済みデータを前提とし、包括的な入力検証器ではありません。 循環はdetectCycles/validateAcyclicで調べられ、CPMは循環を拒否します。空のCPM入力は所要時間0です。

criticalPathTaskIdsはトポロジカル順の全ゼロslackタスクです。 同率の複数経路を含むことがあり、常に単一経路ではありません。 slackは0.01時間単位へ丸めて分類します。ブロッカー優先度はヒューリスティックで、 リソース割当の最適解ではありません。循環があってもブロッカー分析自体は継続します。

simulateDelayImpactは対象タスクの所要時間を有限・非負の時間数だけ増やして再計算します。 実際のカレンダー上の開始時刻の延期や保存は行いません。後続の最早開始の変化、全体の遅延、 再計算後のゼロslackタスクを返します。純粋な分析関数は元のtasks/edgesを変更しません。

InMemoryTaskGraphAdapterは配列またはasyncのloadDataを受け取り、分析ごとに読み込みます。 loaderの例外は伝播します。setDataは内部配列の置き換えで、DBへの保存ではありません。 constructor/setDataは配列を浅くコピーしますが、task objectの深い分離や凍結はしません。 loadGraphも参照を返します。計算中に外部から変更せず、必要ならアプリ側で分離した 整合的なsnapshotを渡してください。transaction・認可・永続化・複数プロセスの同期はありません。

循環探索には再帰を使い、到達可能性の繰返し計算もあるため、巨大グラフやリアルタイムの性能保証は ありません。代表的な規模で対象runtimeの処理時間を測り、入力上限を設定してください。 包括的な業務スケジューラーやタスク実行器として扱わないでください。

bun run verifyで依存境界、テストを含む型検査、単体テスト、ESM/CJSビルド、 Node/Bunの独立tarball consumer、Node型の有無双方の厳密なNodeNext型解決、browser bundleを検証します。 CPM・lag・遅延の既知結果、不正な依存や循環を検証し、実DB/HTTP/AIサービスは使用しません。 JSDoc・README・機能ガイドはこのリポジトリが正本です。apps/docsは同じworkspaceの文書を直接参照します。 ローカルプレビューは明示的な未公開版です。npm CIと初回公開手順はRELEASING.mdを参照してください。

負のFS lagは先行開始を表し、後続より長く続く先行taskも全体完了までに終わる制約を持ちます。後退計算の遅い終了時刻は全体所要時間を上限にします。同率のcritical pathではslack 0の全task IDを返すため、一覧が単一の直線経路とは限りません。

日付ベースの別APIの仕様: planning.