perttool 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/dist/analysis/graph.d.ts +41 -0
- package/dist/analysis/graph.d.ts.map +1 -0
- package/dist/analysis/graph.js +199 -0
- package/dist/analysis/graph.js.map +1 -0
- package/dist/analysis/precedence.d.ts +52 -0
- package/dist/analysis/precedence.d.ts.map +1 -0
- package/dist/analysis/precedence.js +187 -0
- package/dist/analysis/precedence.js.map +1 -0
- package/dist/analysis/resource.d.ts +96 -0
- package/dist/analysis/resource.d.ts.map +1 -0
- package/dist/analysis/resource.js +522 -0
- package/dist/analysis/resource.js.map +1 -0
- package/dist/application/analyze.d.ts +32 -0
- package/dist/application/analyze.d.ts.map +1 -0
- package/dist/application/analyze.js +144 -0
- package/dist/application/analyze.js.map +1 -0
- package/dist/application/check.d.ts +24 -0
- package/dist/application/check.d.ts.map +1 -0
- package/dist/application/check.js +43 -0
- package/dist/application/check.js.map +1 -0
- package/dist/application/format.d.ts +21 -0
- package/dist/application/format.d.ts.map +1 -0
- package/dist/application/format.js +52 -0
- package/dist/application/format.js.map +1 -0
- package/dist/application/mutate.d.ts +4 -0
- package/dist/application/mutate.d.ts.map +1 -0
- package/dist/application/mutate.js +175 -0
- package/dist/application/mutate.js.map +1 -0
- package/dist/application/next.d.ts +86 -0
- package/dist/application/next.d.ts.map +1 -0
- package/dist/application/next.js +310 -0
- package/dist/application/next.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2103 -0
- package/dist/cli.js.map +1 -0
- package/dist/conversion/mermaid-import.d.ts +26 -0
- package/dist/conversion/mermaid-import.d.ts.map +1 -0
- package/dist/conversion/mermaid-import.js +655 -0
- package/dist/conversion/mermaid-import.js.map +1 -0
- package/dist/conversion/mermaid.d.ts +38 -0
- package/dist/conversion/mermaid.d.ts.map +1 -0
- package/dist/conversion/mermaid.js +362 -0
- package/dist/conversion/mermaid.js.map +1 -0
- package/dist/editing/unified-diff.d.ts +7 -0
- package/dist/editing/unified-diff.d.ts.map +1 -0
- package/dist/editing/unified-diff.js +81 -0
- package/dist/editing/unified-diff.js.map +1 -0
- package/dist/formatter/source-formatter.d.ts +17 -0
- package/dist/formatter/source-formatter.d.ts.map +1 -0
- package/dist/formatter/source-formatter.js +210 -0
- package/dist/formatter/source-formatter.js.map +1 -0
- package/dist/help/registry.d.ts +37 -0
- package/dist/help/registry.d.ts.map +1 -0
- package/dist/help/registry.js +657 -0
- package/dist/help/registry.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/io/document-file.d.ts +9 -0
- package/dist/io/document-file.d.ts.map +1 -0
- package/dist/io/document-file.js +19 -0
- package/dist/io/document-file.js.map +1 -0
- package/dist/io/safe-write.d.ts +33 -0
- package/dist/io/safe-write.d.ts.map +1 -0
- package/dist/io/safe-write.js +280 -0
- package/dist/io/safe-write.js.map +1 -0
- package/dist/model/diagnostics.d.ts +43 -0
- package/dist/model/diagnostics.d.ts.map +1 -0
- package/dist/model/diagnostics.js +47 -0
- package/dist/model/diagnostics.js.map +1 -0
- package/dist/model/rational.d.ts +21 -0
- package/dist/model/rational.d.ts.map +1 -0
- package/dist/model/rational.js +84 -0
- package/dist/model/rational.js.map +1 -0
- package/dist/model/syntax.d.ts +67 -0
- package/dist/model/syntax.d.ts.map +1 -0
- package/dist/model/syntax.js +15 -0
- package/dist/model/syntax.js.map +1 -0
- package/dist/model/units.d.ts +18 -0
- package/dist/model/units.d.ts.map +1 -0
- package/dist/model/units.js +29 -0
- package/dist/model/units.js.map +1 -0
- package/dist/mutation/advance.d.ts +26 -0
- package/dist/mutation/advance.d.ts.map +1 -0
- package/dist/mutation/advance.js +261 -0
- package/dist/mutation/advance.js.map +1 -0
- package/dist/mutation/diagnostics.d.ts +10 -0
- package/dist/mutation/diagnostics.d.ts.map +1 -0
- package/dist/mutation/diagnostics.js +10 -0
- package/dist/mutation/diagnostics.js.map +1 -0
- package/dist/mutation/entity-editor.d.ts +16 -0
- package/dist/mutation/entity-editor.d.ts.map +1 -0
- package/dist/mutation/entity-editor.js +103 -0
- package/dist/mutation/entity-editor.js.map +1 -0
- package/dist/mutation/milestone.d.ts +5 -0
- package/dist/mutation/milestone.d.ts.map +1 -0
- package/dist/mutation/milestone.js +194 -0
- package/dist/mutation/milestone.js.map +1 -0
- package/dist/mutation/resource.d.ts +5 -0
- package/dist/mutation/resource.d.ts.map +1 -0
- package/dist/mutation/resource.js +145 -0
- package/dist/mutation/resource.js.map +1 -0
- package/dist/mutation/source.d.ts +22 -0
- package/dist/mutation/source.d.ts.map +1 -0
- package/dist/mutation/source.js +155 -0
- package/dist/mutation/source.js.map +1 -0
- package/dist/mutation/task.d.ts +10 -0
- package/dist/mutation/task.d.ts.map +1 -0
- package/dist/mutation/task.js +644 -0
- package/dist/mutation/task.js.map +1 -0
- package/dist/mutation/text-edits.d.ts +8 -0
- package/dist/mutation/text-edits.d.ts.map +1 -0
- package/dist/mutation/text-edits.js +33 -0
- package/dist/mutation/text-edits.js.map +1 -0
- package/dist/mutation/types.d.ts +153 -0
- package/dist/mutation/types.d.ts.map +1 -0
- package/dist/mutation/types.js +2 -0
- package/dist/mutation/types.js.map +1 -0
- package/dist/parser/document-parser.d.ts +6 -0
- package/dist/parser/document-parser.d.ts.map +1 -0
- package/dist/parser/document-parser.js +735 -0
- package/dist/parser/document-parser.js.map +1 -0
- package/dist/recommendation/explanation-types.d.ts +226 -0
- package/dist/recommendation/explanation-types.d.ts.map +1 -0
- package/dist/recommendation/explanation-types.js +2 -0
- package/dist/recommendation/explanation-types.js.map +1 -0
- package/dist/recommendation/explanation-validation.d.ts +4 -0
- package/dist/recommendation/explanation-validation.d.ts.map +1 -0
- package/dist/recommendation/explanation-validation.js +745 -0
- package/dist/recommendation/explanation-validation.js.map +1 -0
- package/dist/recommendation/explanation-values.d.ts +7 -0
- package/dist/recommendation/explanation-values.d.ts.map +1 -0
- package/dist/recommendation/explanation-values.js +283 -0
- package/dist/recommendation/explanation-values.js.map +1 -0
- package/dist/recommendation/explanation.d.ts +8 -0
- package/dist/recommendation/explanation.d.ts.map +1 -0
- package/dist/recommendation/explanation.js +1022 -0
- package/dist/recommendation/explanation.js.map +1 -0
- package/dist/recommendation/failure.d.ts +3 -0
- package/dist/recommendation/failure.d.ts.map +1 -0
- package/dist/recommendation/failure.js +4 -0
- package/dist/recommendation/failure.js.map +1 -0
- package/dist/recommendation/json.d.ts +3 -0
- package/dist/recommendation/json.d.ts.map +1 -0
- package/dist/recommendation/json.js +252 -0
- package/dist/recommendation/json.js.map +1 -0
- package/dist/recommendation/override-types.d.ts +117 -0
- package/dist/recommendation/override-types.d.ts.map +1 -0
- package/dist/recommendation/override-types.js +2 -0
- package/dist/recommendation/override-types.js.map +1 -0
- package/dist/recommendation/override.d.ts +7 -0
- package/dist/recommendation/override.d.ts.map +1 -0
- package/dist/recommendation/override.js +717 -0
- package/dist/recommendation/override.js.map +1 -0
- package/dist/recommendation/ranking.d.ts +7 -0
- package/dist/recommendation/ranking.d.ts.map +1 -0
- package/dist/recommendation/ranking.js +391 -0
- package/dist/recommendation/ranking.js.map +1 -0
- package/dist/recommendation/types.d.ts +83 -0
- package/dist/recommendation/types.d.ts.map +1 -0
- package/dist/recommendation/types.js +2 -0
- package/dist/recommendation/types.js.map +1 -0
- package/dist/semantic/validator.d.ts +4 -0
- package/dist/semantic/validator.d.ts.map +1 -0
- package/dist/semantic/validator.js +490 -0
- package/dist/semantic/validator.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +61 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
このプロジェクトの主な変更を記録する。形式は[Keep a Changelog](https://keepachangelog.com/ja/1.1.0/)を参考にし、versionは[Semantic Versioning](https://semver.org/lang/ja/)に従う。
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [0.1.0-alpha.2] - 2026-07-23
|
|
8
|
+
|
|
9
|
+
2回目の公開開発プレビュー。安全な編集・進行操作、Mermaid相互変換、説明可能なtask recommendationを追加し、同じartifactをGitHub Releaseとnpmの`alpha` tagへ配布する。
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `dsl format`とtask/milestone/resource/batch mutationのatomic `--write`、exclusive `--out`、`--expect-digest`
|
|
14
|
+
- `Perttool.MermaidProfile.v1`のsemantic record、integrity digest、fail-closed import設計契約と規範artifact
|
|
15
|
+
- `exportMermaid` Coreと`dag render --to mermaid`のlossless/plain profile、解析annotation、strict loss、exclusive `--out`
|
|
16
|
+
- `importMermaid` Coreと`dag import --from mermaid`のfail-closed profile復元、plain loss report、strict loss、exclusive `--out`
|
|
17
|
+
- canonical keep/remove set、partial join、idempotenceを保証するpure `planAdvance` Coreとpreview-first `dag advance` CLI
|
|
18
|
+
- exact typed fact、comparison、decision trace、canonical descriptionを持つcomplete recommendation graphとpublic `NextResultV3` Core型
|
|
19
|
+
- 5つのself-use planでv3 contract、byte determinism、operational互換、structured why-notを検査するrecommendation shadow gateとgolden
|
|
20
|
+
- feasible replacement、`PTOVR-101`から`PTOVR-106`、caller-asserted human reason、normal trace reference、deterministic `Perttool.OverrideDecision.v1`を返すread-only `validateOverride` Core
|
|
21
|
+
- completeかつknownな`NextResult.v3`をnormal AI task selection authorityへ採用する共有指示、help、unknown-version safe stop dry-run
|
|
22
|
+
- npm publish normalizationを検査するpackage preflight、同一tarballをfail-closedでpublishするmaintainer script、`alpha` dist-tag固定
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- pre-release breaking changeとして`dag next`のdefault JSONを`Perttool.NextResult.v2`から`Perttool.NextResult.v3`へ変更し、Core、CLI JSON/text、help、packageをatomicに公開
|
|
27
|
+
- npmがCLI entrypointを除去しないよう`bin.perttool`をcanonicalな`dist/cli.js`へ修正
|
|
28
|
+
|
|
29
|
+
## [0.1.0-alpha.1] - 2026-07-21
|
|
30
|
+
|
|
31
|
+
最初の公開開発プレビュー。DSLとCLIの評価、read-onlyな計画検査・分析・次task選択を目的とする。stable MVPではなく、互換性のない変更が入る可能性がある。
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- Activity-on-Arrow DSLのparser、semantic/graph validation、複数error recovery
|
|
36
|
+
- exact Rationalを使うPERT/CPM precedence分析とcritical path列挙
|
|
37
|
+
- renewable resource capacityを扱う決定的`parallel-sgs` heuristic schedule
|
|
38
|
+
- `active`、`ready`、`runnable_now`、`blocked_now`、`upcoming`の機械的判定
|
|
39
|
+
- Point見積りとproject-wide velocityによるday/hour forecast
|
|
40
|
+
- text/JSON CLI、構造化help、stable diagnostic codeとsource span
|
|
41
|
+
- `npm link`およびGitHub Release tarballによるCLI導入
|
|
42
|
+
|
|
43
|
+
### Known limitations
|
|
44
|
+
|
|
45
|
+
- `dsl format`、task/milestone/resource mutation、`dag advance`は未実装
|
|
46
|
+
- Mermaid import/exportは未実装
|
|
47
|
+
- Resource scheduleは`optimal=false`のheuristicであり、厳密最適解ではない
|
|
48
|
+
- npm registryには未公開。GitHub Release assetを使用する
|
|
49
|
+
- Node.js 24以上が必要
|
|
50
|
+
|
|
51
|
+
[Unreleased]: https://github.com/mako10k/perttool/compare/v0.1.0-alpha.2...HEAD
|
|
52
|
+
[0.1.0-alpha.2]: https://github.com/mako10k/perttool/compare/v0.1.0-alpha.1...v0.1.0-alpha.2
|
|
53
|
+
[0.1.0-alpha.1]: https://github.com/mako10k/perttool/releases/tag/v0.1.0-alpha.1
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Makoto Katsumata
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# perttool
|
|
2
|
+
|
|
3
|
+
PERT 線図を、Git 管理しやすい文書として記述・検査・分析するためのタスク管理CLI。
|
|
4
|
+
|
|
5
|
+
`v0.1.0-alpha.2`は公開開発プレビューです。`dsl check`、`dsl format`、`dsl help`、`dag analyze`、`dag next`、`dag advance`、`dag render --to mermaid`、`dag import --from mermaid`、source-preservingなtask/milestone/resource/batch mutation、atomic `--write`、exclusive `--out`、`--expect-digest`を実装済みです。`dag next`はcompleteなrecommendation graphを持つ`Perttool.NextResult.v3`を返し、public Core型とCLI JSON/text/helpを同じ判断へ接続します。Node.js 24以上が必要で、pre-release中は互換性のない変更が入る可能性があります。
|
|
6
|
+
|
|
7
|
+
- [要件定義](docs/requirements.md)
|
|
8
|
+
- [基本設計](docs/basic-design.md)
|
|
9
|
+
- [DSL 文法仕様](docs/specs/dsl-grammar.md)
|
|
10
|
+
- [Graph Semantics 仕様](docs/specs/graph-semantics.md)
|
|
11
|
+
- [Analysis 仕様](docs/specs/analysis.md)
|
|
12
|
+
- [Mutation Semantics 仕様](docs/specs/mutation.md)
|
|
13
|
+
- [Mermaid Profile 仕様](docs/specs/mermaid-profile.md)
|
|
14
|
+
- [Recommendation Semantics 仕様](docs/specs/recommendation.md)
|
|
15
|
+
- [Recommendation Ranking Policy 仕様](docs/specs/recommendation-ranking.md)
|
|
16
|
+
- [Recommendation Reason Taxonomy 仕様](docs/specs/recommendation-reasons.md)
|
|
17
|
+
- [Recommendation Structured Explanation 仕様](docs/specs/recommendation-explanation.md)
|
|
18
|
+
- [Recommendation Interface Contract 仕様](docs/specs/recommendation-interface.md)
|
|
19
|
+
- [Recommendation Human Override Contract 仕様](docs/specs/recommendation-override.md)
|
|
20
|
+
- [Recommendation 規範例](docs/examples/recommendation.md)
|
|
21
|
+
- [Mermaid Profile 規範例](docs/examples/mermaid-profile.md)
|
|
22
|
+
- [Recommendation 実装・自己利用migration](docs/process/recommendation-migration.md)
|
|
23
|
+
- [NextResult.v3 consumer migration guide](docs/process/next-v3-consumer-migration.md)
|
|
24
|
+
- [Recommendation 設計受け入れレビュー](docs/process/recommendation-design-review.md)
|
|
25
|
+
- [MVP release readiness監査](docs/process/mvp-release-readiness.md)
|
|
26
|
+
- [CLI Interface 仕様](docs/specs/interfaces.md)
|
|
27
|
+
- [Architecture Decision Records](docs/adr/0001-activity-on-arrow.md)
|
|
28
|
+
- [DSL サンプル](docs/examples/README.md)
|
|
29
|
+
- [自己利用計画](docs/process/self-use.md)
|
|
30
|
+
- [MVPマイルストーン計画](plans/mvp.pert)
|
|
31
|
+
- [現在の文法作業計画](plans/grammar.pert)
|
|
32
|
+
- [AI工程制御設計計画](plans/control-plane.pert)
|
|
33
|
+
- [操作系M1-M4実装計画](plans/operations.pert)
|
|
34
|
+
- [Recommendation実装計画](plans/recommendation.pert)
|
|
35
|
+
- [AI 開発ガイド](docs/process/ai-development.md)
|
|
36
|
+
|
|
37
|
+
基本方針は次のとおりです。
|
|
38
|
+
|
|
39
|
+
- Activity-on-Arrow とし、タスクを DAG のエッジ、マイルストーンをノードとして扱う
|
|
40
|
+
- 独自 DSL 文書をプロジェクト状態の正本とする
|
|
41
|
+
- PERT/CPM 計算と「次のタスク」の判定を機械的かつ決定的に行う
|
|
42
|
+
- 相対見積り`p`を基準に保持し、明示したproject-wide velocityで`d`または`h`の予測へexact換算する
|
|
43
|
+
- 共有resourceのcapacityから排他実行と並列実行可能数を扱う
|
|
44
|
+
- Mermaid との相互変換、CLI、構造化ヘルプ、AI向けJSON操作導線を同じ共通コア上に提供する
|
|
45
|
+
- MVPはCLIをprimary interfaceとし、MCP/LSP adapterはMVP後に追加する
|
|
46
|
+
- 現行文書は現在と未来を表し、過去は Git 履歴で追跡する
|
|
47
|
+
- parser・check・analyze・next が安定した時点で、文法作業の計画から自己利用を開始する
|
|
48
|
+
|
|
49
|
+
## Install
|
|
50
|
+
|
|
51
|
+
公開開発プレビューはnpm registryの`alpha` dist-tagとGitHub prereleaseから導入できます。Maintainer向けの安全境界は[npm publication手順](docs/process/npm-publication.md)を参照してください。
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
npm install --global perttool@alpha
|
|
55
|
+
perttool --version
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
ローカルcheckoutを開発中のNode.jsユーザー環境へlinkする場合:
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
git clone https://github.com/mako10k/perttool.git
|
|
62
|
+
cd perttool
|
|
63
|
+
npm ci
|
|
64
|
+
npm link
|
|
65
|
+
perttool --version
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
`prepare` lifecycleが`dist/`をbuildしてから、`perttool` binaryを現在のnpm global prefixへsymlinkします。System領域へsudoでinstallせず、NVMなどuser-ownedのnpm prefixを使用してください。解除はcheckoutで`npm unlink --global perttool`を実行します。
|
|
69
|
+
|
|
70
|
+
## Development
|
|
71
|
+
|
|
72
|
+
Setupとrepository check:
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
npm ci
|
|
76
|
+
npm run check
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
実CLI processを使うE2Eシナリオだけを実行する場合:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
npm run test:e2e
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## CLI examples
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
perttool --help
|
|
89
|
+
perttool dsl check docs/examples/parallel.pert
|
|
90
|
+
perttool dsl check PLAN.pert --max-diagnostics 20 --format json
|
|
91
|
+
perttool dsl format PLAN.pert --check
|
|
92
|
+
perttool dsl format PLAN.pert --diff
|
|
93
|
+
perttool dsl format PLAN.pert --write --expect-digest "$EXPECTED_DIGEST"
|
|
94
|
+
perttool dsl help syntax estimate --level detail --format json
|
|
95
|
+
perttool dsl help syntax velocity --level detail --format json
|
|
96
|
+
perttool dag analyze docs/examples/point-velocity.pert --format json
|
|
97
|
+
perttool dag analyze docs/examples/parallel.pert
|
|
98
|
+
perttool dag analyze docs/examples/parallel.pert --capacity DEVELOPERS=3 --capacity TEST_ENV=2 --format json
|
|
99
|
+
perttool dag next docs/examples/parallel.pert
|
|
100
|
+
perttool dag next docs/examples/parallel.pert --capacity DEVELOPERS=3 --format json
|
|
101
|
+
perttool dag advance docs/examples/advance-partial-before.pert --diff
|
|
102
|
+
perttool dag advance PLAN.pert --write --expect-digest "$EXPECTED_DIGEST"
|
|
103
|
+
perttool dag render docs/examples/parallel.pert --to mermaid --analysis both
|
|
104
|
+
perttool dag render docs/examples/parallel.pert --to mermaid --analysis resource --capacity TEST_ENV=2 --out parallel.mmd
|
|
105
|
+
perttool dag import parallel.mmd --from mermaid
|
|
106
|
+
perttool dag import parallel.mmd --from mermaid --strict-loss --out parallel.pert
|
|
107
|
+
perttool task set docs/examples/minimal.pert WORK --status active --diff
|
|
108
|
+
perttool task set PLAN.pert WORK --status active --write --expect-digest "$EXPECTED_DIGEST"
|
|
109
|
+
perttool resource set docs/examples/parallel.pert TEST_ENV --capacity 2 --format json
|
|
110
|
+
perttool mutation apply docs/examples/minimal.pert --request changes.json --diff
|
|
111
|
+
perttool mutation apply PLAN.pert --request changes.json --out UPDATED.pert
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
`dag analyze`はexact RationalによるPERT/CPMと、renewable resource capacityを守る決定的な`parallel-sgs` scheduleを別resultとして返します。`duration_unit point`では`velocity 20p/10d`のように宣言し、基準のPoint値とday/hourの`velocity_forecast`を分離して返します。Resource scheduleは実行可能なheuristicであり、最適解とは表示しません。
|
|
115
|
+
|
|
116
|
+
`dag next`は依存関係上の`ready`、既存schedulerが選ぶ`runnable_now`、工程authorityであるroot `recommendation`を分離します。JSONは全ready taskのtier、exact typed fact、comparison、decision trace、canonical descriptionをcomplete graphとして返し、textは4 tierの`complete=false` summaryとJSON導線を返します。開始できないready taskには不足resourceと占有task、upcoming taskには未充足依存の説明も従来どおり保持します。Consumerは[移行ガイド](docs/process/next-v3-consumer-migration.md)に従い、`schema_version`を最初に検査します。
|
|
117
|
+
|
|
118
|
+
5 planのshadowとMIG-07 safe-stop dry-runを経て、knownかつcompleteな`NextResult.v3`をperttool開発のnormal AI task selection authorityへ採用しました。Macro recommendationからworkstreamを選んでdetailを再解析し、unknown version、incomplete trace、`PTREC-*`、deferred/discouraged selectionでは開始せず停止します。
|
|
119
|
+
|
|
120
|
+
Public libraryの`validateOverride`はcompleteな`NextResultV3`と明示的なhuman requestから、normal recommendationを変更せずdeterministicな`Perttool.OverrideDecision.v1`を生成します。これはread-only validationであり、task state、file、Git、networkを変更しません。Override applyとaudit writeのCLIは未実装です。
|
|
121
|
+
|
|
122
|
+
`dag advance`はeffective reachedより過去のtask/gate/milestoneだけを除去し、未到達joinに必要なdone taskとsatisfied gateを保持します。既定はcandidate previewで、削除entityとfrontier/readyの前後比較をtext/JSONへ含めます。`--write`、`--out`、`--expect-digest`は他のediting commandと同じsafe-write経路を使います。
|
|
123
|
+
|
|
124
|
+
`dag render --to mermaid`は既定でlosslessな`Perttool.MermaidProfile.v1`をstdoutへ生成します。`--analysis`でprecedence/resource解析値をprojectionへ注記でき、`--out`は既存targetを上書きしません。`--profile plain`はsemantic metadataを持たないため`PTCNV-206`を返し、`--strict-loss`でartifactを拒否できます。
|
|
125
|
+
|
|
126
|
+
`dag import --from mermaid`はperttool profileのcanonical JSON、record順、metadata/projection digest、semantic model、projection対応をfail-closedで検査し、canonical DSLをpreviewします。Plain Mermaidはstable generated IDとloss reportを返す限定best-effortで、`--strict-loss`はlossy candidateと`--out`を拒否します。
|
|
127
|
+
|
|
128
|
+
`dsl format`とMutation commandは既定では検査済みcandidateをpreviewし、`--diff`ではunified diffを返します。`dsl format --check`は変更が必要なときだけexit 1です。Preview確認後は`--write`でinitial digestを再照合してatomic replaceし、`--expect-digest`でcaller lockを追加できます。`--out`は既存targetを上書きせず新規documentを作成します。`--format json`ではcandidate、diff、UTF-16 TextEdit、digest、write結果を同じresultへ含めます。
|
|
129
|
+
|
|
130
|
+
現在は[MVPマイルストーン計画](plans/mvp.pert)をmacro roadmapとするStage 3のpreview-first advance自己利用を行っています。[Recommendation実装計画](plans/recommendation.pert)のMIG-01からMIG-07全22pを1 active dayで完了し、recommendation固有の暫定実測Velocityを`22p/1d`へ更新しました。Detail残作業は0pで、normal recommendation authorityを採用済みです。Macroの唯一のready、`runnable_now`、recommended、precedence/schedule critical work packageは`RELEASE_E2E`、残るmakespanは2dです。Issue #2のAI Agent Guidance RegistryとIssue #3のmulti-plan compositionは独立backlogのままです。
|
|
131
|
+
|
|
132
|
+
## Security and license
|
|
133
|
+
|
|
134
|
+
脆弱性は[Security Policy](SECURITY.md)に従って非公開で報告してください。本ソフトウェアは[MIT License](LICENSE)で公開します。変更履歴と既知の制約は[CHANGELOG](CHANGELOG.md)を参照してください。
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { DeclarationNode, DocumentNode, RequirementValue } from "../model/syntax.js";
|
|
2
|
+
import type { Rational } from "../model/rational.js";
|
|
3
|
+
import type { DurationUnit, Velocity } from "../model/units.js";
|
|
4
|
+
export type TaskStatus = "planned" | "active" | "blocked" | "done";
|
|
5
|
+
export interface AnalysisResource {
|
|
6
|
+
readonly declaration: DeclarationNode;
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly capacity: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AnalysisEdge {
|
|
11
|
+
readonly declaration: DeclarationNode;
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly kind: "task" | "gate";
|
|
14
|
+
readonly source: string;
|
|
15
|
+
readonly target: string;
|
|
16
|
+
readonly status: TaskStatus | null;
|
|
17
|
+
readonly expected: Rational;
|
|
18
|
+
readonly variance: Rational;
|
|
19
|
+
readonly priority: number;
|
|
20
|
+
readonly requirements: readonly RequirementValue[];
|
|
21
|
+
}
|
|
22
|
+
export interface ResidualGraph {
|
|
23
|
+
readonly document: DocumentNode;
|
|
24
|
+
readonly project: DeclarationNode;
|
|
25
|
+
readonly finish: string;
|
|
26
|
+
readonly durationUnit: DurationUnit;
|
|
27
|
+
readonly velocity: Velocity | null;
|
|
28
|
+
readonly criticalEpsilon: Rational;
|
|
29
|
+
readonly vertices: ReadonlyMap<string, DeclarationNode>;
|
|
30
|
+
readonly resources: ReadonlyMap<string, AnalysisResource>;
|
|
31
|
+
readonly edges: readonly AnalysisEdge[];
|
|
32
|
+
readonly incoming: ReadonlyMap<string, readonly AnalysisEdge[]>;
|
|
33
|
+
readonly outgoing: ReadonlyMap<string, readonly AnalysisEdge[]>;
|
|
34
|
+
readonly topologicalOrder: readonly string[];
|
|
35
|
+
readonly effectiveReached: ReadonlySet<string>;
|
|
36
|
+
readonly frontier: readonly string[];
|
|
37
|
+
readonly blockedTaskIds: readonly string[];
|
|
38
|
+
}
|
|
39
|
+
export declare function computeEffectiveReached(document: DocumentNode): ReadonlySet<string>;
|
|
40
|
+
export declare function buildResidualGraph(document: DocumentNode): ResidualGraph;
|
|
41
|
+
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/analysis/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EAEZ,gBAAgB,EAEjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAWrD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1D,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AA6CD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAkCnF;AAoCD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,CA+GxE"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { fieldNamed } from "../model/syntax.js";
|
|
2
|
+
import { compareStableStrings } from "../model/diagnostics.js";
|
|
3
|
+
import { ZERO, add, divide, multiply, rational, rationalFromDuration, square, subtract, } from "../model/rational.js";
|
|
4
|
+
function durationFieldValue(declaration, name) {
|
|
5
|
+
const field = fieldNamed(declaration, name);
|
|
6
|
+
if (field === undefined || typeof field.value !== "object" || field.value === null) {
|
|
7
|
+
throw new Error(`validated ${declaration.id} is missing duration field ${name}`);
|
|
8
|
+
}
|
|
9
|
+
return rationalFromDuration(field.value);
|
|
10
|
+
}
|
|
11
|
+
function edgeNumbers(declaration) {
|
|
12
|
+
if (declaration.kind === "gate")
|
|
13
|
+
return { expected: ZERO, variance: ZERO };
|
|
14
|
+
const status = (fieldNamed(declaration, "status")?.value ?? "planned");
|
|
15
|
+
if (status === "done")
|
|
16
|
+
return { expected: ZERO, variance: ZERO };
|
|
17
|
+
const estimate = fieldNamed(declaration, "estimate");
|
|
18
|
+
if (estimate === undefined) {
|
|
19
|
+
return { expected: durationFieldValue(declaration, "duration"), variance: ZERO };
|
|
20
|
+
}
|
|
21
|
+
const children = estimate.children ?? [];
|
|
22
|
+
const optimistic = durationFieldValueFromChild(declaration, children, "optimistic");
|
|
23
|
+
const mostLikely = durationFieldValueFromChild(declaration, children, "most_likely");
|
|
24
|
+
const pessimistic = durationFieldValueFromChild(declaration, children, "pessimistic");
|
|
25
|
+
const expected = divide(add(add(optimistic, multiply(rational(4n), mostLikely)), pessimistic), rational(6n));
|
|
26
|
+
const variance = square(divide(subtract(pessimistic, optimistic), rational(6n)));
|
|
27
|
+
return { expected, variance };
|
|
28
|
+
}
|
|
29
|
+
function durationFieldValueFromChild(declaration, children, name) {
|
|
30
|
+
const child = children.find((candidate) => candidate.name === name);
|
|
31
|
+
if (child === undefined || typeof child.value !== "object" || child.value === null) {
|
|
32
|
+
throw new Error(`validated estimate ${declaration.id} is missing ${name}`);
|
|
33
|
+
}
|
|
34
|
+
return rationalFromDuration(child.value);
|
|
35
|
+
}
|
|
36
|
+
export function computeEffectiveReached(document) {
|
|
37
|
+
const milestones = document.declarations.filter((declaration) => declaration.kind === "milestone");
|
|
38
|
+
const edges = document.declarations.filter((declaration) => declaration.kind === "task" || declaration.kind === "gate");
|
|
39
|
+
const incoming = new Map(milestones.map((milestone) => [milestone.id, []]));
|
|
40
|
+
for (const edge of edges)
|
|
41
|
+
incoming.get(edge.to).push(edge);
|
|
42
|
+
for (const list of incoming.values()) {
|
|
43
|
+
list.sort((left, right) => compareStableStrings(left.id, right.id));
|
|
44
|
+
}
|
|
45
|
+
const reached = new Set(milestones
|
|
46
|
+
.filter((milestone) => fieldNamed(milestone, "state")?.value === "reached")
|
|
47
|
+
.map((milestone) => milestone.id));
|
|
48
|
+
const satisfied = (edge) => {
|
|
49
|
+
if (!reached.has(edge.from))
|
|
50
|
+
return false;
|
|
51
|
+
return edge.kind === "gate" || fieldNamed(edge, "status")?.value === "done";
|
|
52
|
+
};
|
|
53
|
+
let changed = true;
|
|
54
|
+
while (changed) {
|
|
55
|
+
changed = false;
|
|
56
|
+
for (const milestone of milestones) {
|
|
57
|
+
if (reached.has(milestone.id))
|
|
58
|
+
continue;
|
|
59
|
+
const edgesIn = incoming.get(milestone.id);
|
|
60
|
+
if (edgesIn.length > 0 && edgesIn.every(satisfied)) {
|
|
61
|
+
reached.add(milestone.id);
|
|
62
|
+
changed = true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return reached;
|
|
67
|
+
}
|
|
68
|
+
function stableTopologicalOrder(vertices, edges) {
|
|
69
|
+
const indegree = new Map([...vertices.keys()].map((id) => [id, 0]));
|
|
70
|
+
const outgoing = new Map([...vertices.keys()].map((id) => [id, []]));
|
|
71
|
+
for (const edge of edges) {
|
|
72
|
+
indegree.set(edge.target, indegree.get(edge.target) + 1);
|
|
73
|
+
outgoing.get(edge.source).push(edge);
|
|
74
|
+
}
|
|
75
|
+
for (const list of outgoing.values()) {
|
|
76
|
+
list.sort((left, right) => compareStableStrings(left.id, right.id));
|
|
77
|
+
}
|
|
78
|
+
const available = [...indegree]
|
|
79
|
+
.filter(([, degree]) => degree === 0)
|
|
80
|
+
.map(([id]) => id)
|
|
81
|
+
.sort(compareStableStrings);
|
|
82
|
+
const order = [];
|
|
83
|
+
while (available.length > 0) {
|
|
84
|
+
const current = available.shift();
|
|
85
|
+
order.push(current);
|
|
86
|
+
for (const edge of outgoing.get(current)) {
|
|
87
|
+
const degree = indegree.get(edge.target) - 1;
|
|
88
|
+
indegree.set(edge.target, degree);
|
|
89
|
+
if (degree === 0) {
|
|
90
|
+
available.push(edge.target);
|
|
91
|
+
available.sort(compareStableStrings);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (order.length !== vertices.size)
|
|
96
|
+
throw new Error("validated residual graph contains a cycle");
|
|
97
|
+
return order;
|
|
98
|
+
}
|
|
99
|
+
export function buildResidualGraph(document) {
|
|
100
|
+
const project = document.declarations.find((declaration) => declaration.kind === "project");
|
|
101
|
+
if (project === undefined)
|
|
102
|
+
throw new Error("validated document has no project");
|
|
103
|
+
const finish = fieldNamed(project, "finish").value;
|
|
104
|
+
const durationUnit = fieldNamed(project, "duration_unit").value;
|
|
105
|
+
const velocityField = fieldNamed(project, "velocity");
|
|
106
|
+
const velocityValue = velocityField?.value;
|
|
107
|
+
const velocity = velocityValue === undefined
|
|
108
|
+
? null
|
|
109
|
+
: {
|
|
110
|
+
points: rationalFromDuration(velocityValue.points),
|
|
111
|
+
period: rationalFromDuration(velocityValue.period),
|
|
112
|
+
periodUnit: velocityValue.period.suffix === "d" ? "day" : "hour",
|
|
113
|
+
};
|
|
114
|
+
const epsilonField = fieldNamed(project, "critical_epsilon");
|
|
115
|
+
const criticalEpsilon = epsilonField === undefined
|
|
116
|
+
? ZERO
|
|
117
|
+
: rationalFromDuration(epsilonField.value);
|
|
118
|
+
const effectiveReached = computeEffectiveReached(document);
|
|
119
|
+
const allMilestones = new Map(document.declarations
|
|
120
|
+
.filter((declaration) => declaration.kind === "milestone")
|
|
121
|
+
.map((declaration) => [declaration.id, declaration]));
|
|
122
|
+
const edges = document.declarations
|
|
123
|
+
.filter((declaration) => (declaration.kind === "task" || declaration.kind === "gate") &&
|
|
124
|
+
!effectiveReached.has(declaration.to))
|
|
125
|
+
.map((declaration) => {
|
|
126
|
+
const numbers = edgeNumbers(declaration);
|
|
127
|
+
return {
|
|
128
|
+
declaration,
|
|
129
|
+
id: declaration.id,
|
|
130
|
+
kind: declaration.kind,
|
|
131
|
+
source: declaration.from,
|
|
132
|
+
target: declaration.to,
|
|
133
|
+
status: declaration.kind === "task"
|
|
134
|
+
? (fieldNamed(declaration, "status")?.value ?? "planned")
|
|
135
|
+
: null,
|
|
136
|
+
expected: numbers.expected,
|
|
137
|
+
variance: numbers.variance,
|
|
138
|
+
priority: declaration.kind === "task"
|
|
139
|
+
? (fieldNamed(declaration, "priority")?.value ?? 0)
|
|
140
|
+
: 0,
|
|
141
|
+
requirements: declaration.kind === "task"
|
|
142
|
+
? (fieldNamed(declaration, "requires")?.value ?? [])
|
|
143
|
+
: [],
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
edges.sort((left, right) => compareStableStrings(left.id, right.id));
|
|
147
|
+
const vertexIds = new Set([finish]);
|
|
148
|
+
for (const edge of edges) {
|
|
149
|
+
vertexIds.add(edge.source);
|
|
150
|
+
vertexIds.add(edge.target);
|
|
151
|
+
}
|
|
152
|
+
const vertices = new Map([...vertexIds]
|
|
153
|
+
.sort(compareStableStrings)
|
|
154
|
+
.map((id) => [id, allMilestones.get(id)]));
|
|
155
|
+
const incomingMutable = new Map([...vertices.keys()].map((id) => [id, []]));
|
|
156
|
+
const outgoingMutable = new Map([...vertices.keys()].map((id) => [id, []]));
|
|
157
|
+
for (const edge of edges) {
|
|
158
|
+
incomingMutable.get(edge.target).push(edge);
|
|
159
|
+
outgoingMutable.get(edge.source).push(edge);
|
|
160
|
+
}
|
|
161
|
+
for (const list of [...incomingMutable.values(), ...outgoingMutable.values()]) {
|
|
162
|
+
list.sort((left, right) => compareStableStrings(left.id, right.id));
|
|
163
|
+
}
|
|
164
|
+
const resources = new Map(document.declarations
|
|
165
|
+
.filter((declaration) => declaration.kind === "resource")
|
|
166
|
+
.sort((left, right) => compareStableStrings(left.id, right.id))
|
|
167
|
+
.map((declaration) => [
|
|
168
|
+
declaration.id,
|
|
169
|
+
{
|
|
170
|
+
declaration,
|
|
171
|
+
id: declaration.id,
|
|
172
|
+
capacity: fieldNamed(declaration, "capacity").value,
|
|
173
|
+
},
|
|
174
|
+
]));
|
|
175
|
+
const frontier = [...vertices.keys()]
|
|
176
|
+
.filter((id) => effectiveReached.has(id))
|
|
177
|
+
.sort(compareStableStrings);
|
|
178
|
+
return {
|
|
179
|
+
document,
|
|
180
|
+
project,
|
|
181
|
+
finish,
|
|
182
|
+
durationUnit,
|
|
183
|
+
velocity,
|
|
184
|
+
criticalEpsilon,
|
|
185
|
+
vertices,
|
|
186
|
+
resources,
|
|
187
|
+
edges,
|
|
188
|
+
incoming: incomingMutable,
|
|
189
|
+
outgoing: outgoingMutable,
|
|
190
|
+
topologicalOrder: stableTopologicalOrder(vertices, edges),
|
|
191
|
+
effectiveReached,
|
|
192
|
+
frontier,
|
|
193
|
+
blockedTaskIds: edges
|
|
194
|
+
.filter((edge) => edge.status === "blocked")
|
|
195
|
+
.map((edge) => edge.id)
|
|
196
|
+
.sort(compareStableStrings),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/analysis/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Rational } from "../model/rational.js";
|
|
2
|
+
import type { AnalysisEdge, ResidualGraph, TaskStatus } from "./graph.js";
|
|
3
|
+
export interface MilestoneTiming {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly earliest: Rational;
|
|
6
|
+
readonly latest: Rational;
|
|
7
|
+
readonly slack: Rational;
|
|
8
|
+
}
|
|
9
|
+
export interface EdgeTiming {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly source: string;
|
|
12
|
+
readonly target: string;
|
|
13
|
+
readonly kind: "task" | "gate";
|
|
14
|
+
readonly status: TaskStatus | null;
|
|
15
|
+
readonly expected: Rational;
|
|
16
|
+
readonly variance: Rational;
|
|
17
|
+
readonly es: Rational;
|
|
18
|
+
readonly ef: Rational;
|
|
19
|
+
readonly ls: Rational;
|
|
20
|
+
readonly lf: Rational;
|
|
21
|
+
readonly totalFloat: Rational;
|
|
22
|
+
readonly freeFloat: Rational;
|
|
23
|
+
readonly isCritical: boolean;
|
|
24
|
+
readonly isDriving: boolean;
|
|
25
|
+
readonly edge: AnalysisEdge;
|
|
26
|
+
}
|
|
27
|
+
export interface CriticalPath {
|
|
28
|
+
readonly edgeIds: readonly string[];
|
|
29
|
+
readonly taskIds: readonly string[];
|
|
30
|
+
readonly gateIds: readonly string[];
|
|
31
|
+
readonly variance: Rational;
|
|
32
|
+
}
|
|
33
|
+
export interface CriticalResult {
|
|
34
|
+
readonly milestoneIds: readonly string[];
|
|
35
|
+
readonly taskIds: readonly string[];
|
|
36
|
+
readonly gateIds: readonly string[];
|
|
37
|
+
readonly drivingEdgeIds: readonly string[];
|
|
38
|
+
readonly representativePath: CriticalPath;
|
|
39
|
+
readonly pathCount: bigint;
|
|
40
|
+
readonly paths: readonly CriticalPath[];
|
|
41
|
+
readonly pathsTruncated: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface PrecedenceResult {
|
|
44
|
+
readonly makespan: Rational;
|
|
45
|
+
readonly conditionalOnBlocksResolved: boolean;
|
|
46
|
+
readonly blockedTaskIds: readonly string[];
|
|
47
|
+
readonly milestones: readonly MilestoneTiming[];
|
|
48
|
+
readonly edges: readonly EdgeTiming[];
|
|
49
|
+
readonly critical: CriticalResult;
|
|
50
|
+
}
|
|
51
|
+
export declare function analyzePrecedence(graph: ResidualGraph, maxPaths: number): PrecedenceResult;
|
|
52
|
+
//# sourceMappingURL=precedence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"precedence.d.ts","sourceRoot":"","sources":["../../src/analysis/precedence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AASrD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;CACnC;AA6ED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAyGlB"}
|