@orkestrel/scaffold 0.0.49 → 0.0.50

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.
@@ -530,7 +530,8 @@ right to stop.
530
530
  is a guess. A claim about a search names the scope the search covered: a search bounded to one
531
531
  directory proves something about that directory and nothing about the rest of the tree, and a
532
532
  filtered set proves something about the filter's membership rule and nothing about the population
533
- it was drawn from.
533
+ it was drawn from. Where several artifacts state the fact, check it against the code rather than
534
+ against the other copies: agreement proves one copy was taken from another.
534
535
  - Take every measurement under the conditions the unit will run in, or have the unit take it. A
535
536
  number measured in your environment and asserted as a criterion is unreachable when the
536
537
  executor's sandbox denies what yours permitted, and no edit to the owned files can close it.
@@ -553,7 +554,10 @@ right to stop.
553
554
  first criterion the unit cannot close and stops it there, so an unreachable criterion placed ahead
554
555
  of a typecheck or a lint criterion skips that gate entirely and the unit ships a defect its own
555
556
  brief would have caught. Put the cheap non-timing gates first, and never let a whole-suite result
556
- gate a scoped one.
557
+ gate a scoped one. Cheap-first has one exception: where the change edits a file the repository
558
+ vendors or otherwise digests, the regeneration step precedes every gate that reads the generated
559
+ artifact. A parity or inventory gate ordered ahead of it cannot pass, because the edit restaled the
560
+ digest that gate reads, and the unit stops on a criterion its own work already satisfied.
557
561
  - Ask what the change will do to the facts you just measured. A criterion fixed to a measured set is
558
562
  unreachable if the change alters that set, and a file marked off-limits is wrong if the change
559
563
  writes to it. Measure the state the unit will finish in, not only the state it starts from.
@@ -585,6 +589,17 @@ right to stop.
585
589
  Ask of every criterion: what asserts the state this change ends? Own every answer, or strike the
586
590
  criterion. Grant a behaviour and the tests that pin it together; grant a constant and every fixture
587
591
  and expectation derived from it together.
592
+ - Find that set by running the suite, not by searching for the assertion's shape. A search returns
593
+ the assertions that look right and cannot say which ones the change actually reaches: a fixture
594
+ that never builds the directory the new code reads is a match the change cannot touch, and a
595
+ fixture that reaches it through a path the search never named is a miss. Both errors appear in one
596
+ grep. Where the change is already written somewhere — a scratch copy, an earlier unit, a probe —
597
+ run the suite against it and read the failures. Where it is not, name the search's bound in the
598
+ brief so the unit re-derives the set instead of trusting it.
599
+ - Scope a unit that changes a mechanism to own the prose describing that mechanism: the comment
600
+ beside the code it edits, and the guide passage stating the behaviour it moves. Where a brief
601
+ scopes that prose out so writers do not share a file, name the carrier that takes it and dispatch
602
+ that carrier before the change ships.
588
603
 
589
604
  ### Carry every finding
590
605
 
@@ -616,6 +631,11 @@ command that outlives the turn that started it. Every law here binds all of them
616
631
  - Write a multi-step chain to a script file and run the file. A chain composed inside one shell
617
632
  argument cannot be read back, corrected, or re-run, and the record of what actually ran is the
618
633
  argument text in a transcript rather than a file on disk.
634
+ - Never edit a script file while a shell is executing it. `bash` reads a script incrementally from a
635
+ byte offset rather than loading it, so an edit that shifts line numbers moves the text under that
636
+ offset and the shell resumes mid-construct. The run dies on a syntax error in a line the script
637
+ does not contain, which reads as a defect in the work rather than as the edit that caused it. Copy
638
+ the file, edit the copy, and launch the copy for the next run.
619
639
  - On a Windows host this binds every program-carrying command, not only long ones. Heredocs,
620
640
  `node -e`, `node -p`, `&&` chaining, and any argument carrying `${...}` trip the Git Bash
621
641
  approval classifier and turn an unattended run into a manual approval prompt. Write the program
@@ -881,7 +901,12 @@ once per round with one procedure, publish each layer in one window, and only th
881
901
  so the step-local reading reports nothing moved while the manifest surface did. A re-pinned
882
902
  runtime range is published surface: without the bump a consumer installs duplicate copies of the
883
903
  moved dependency.
884
- - A dist built before the version bump is the release artifact; the bump edits no emitted byte.
904
+ - A dist built before the version bump is the release artifact wherever the bump edits no emitted
905
+ byte. Check that per package rather than assuming it: a package that imports its own
906
+ `package.json` version into published code emits that version, so its pre-bump dist is stale the
907
+ moment the version moves. Rebuild after the bump there, and pack from the rebuilt tree. Because
908
+ `npm publish --ignore-scripts` skips `prepack`, that rebuild is the operator's step, not the
909
+ publish's.
885
910
  - Refresh the registry evidence between layers and derive each round's pins from it. A pin can only
886
911
  name a version the registry already serves, so a dependency shipping in the same window keeps the
887
912
  resolvable previous pin and takes its dev-only re-pin after the window closes.
@@ -36,54 +36,54 @@ so network-controlled descriptions never enter agent instruction context.
36
36
 
37
37
  | Package | Version | Layer | Runtime dependencies |
38
38
  | ----------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
39
- | `@orkestrel/abort` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
40
- | `@orkestrel/agent` | `0.0.16` | L5 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.10`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/queue` `^0.0.9`, `@orkestrel/timeout` `^0.0.7`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/workflow` `^0.0.13`, `@orkestrel/workspace` `^0.0.5` |
41
- | `@orkestrel/brief` | `0.0.3` | L4 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/interpret` `^0.0.10`, `@orkestrel/reason` `^0.0.7` |
42
- | `@orkestrel/browser` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/html` `^0.0.4`, `@orkestrel/websocket` `^0.0.9` |
43
- | `@orkestrel/budget` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
44
- | `@orkestrel/console` | `0.0.9` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
39
+ | `@orkestrel/abort` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
40
+ | `@orkestrel/agent` | `0.0.17` | L5 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/queue` `^0.0.10`, `@orkestrel/timeout` `^0.0.7`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/workflow` `^0.0.14`, `@orkestrel/workspace` `^0.0.5` |
41
+ | `@orkestrel/brief` | `0.0.4` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/interpret` `^0.0.10`, `@orkestrel/reason` `^0.0.7` |
42
+ | `@orkestrel/browser` | `0.0.12` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/html` `^0.0.4`, `@orkestrel/websocket` `^0.0.9` |
43
+ | `@orkestrel/budget` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
44
+ | `@orkestrel/console` | `0.0.10` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
45
45
  | `@orkestrel/contract` | `0.0.13` | L0 | |
46
- | `@orkestrel/csv` | `0.0.4` | L1 | `@orkestrel/contract` `^0.0.12` |
47
- | `@orkestrel/database` | `0.0.11` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/indexeddb` `^0.0.8`, `@orkestrel/sqlite` `^0.0.8` |
48
- | `@orkestrel/emitter` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
49
- | `@orkestrel/form` | `0.0.2` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
50
- | `@orkestrel/guide` | `0.0.12` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/markdown` `^0.0.9` |
51
- | `@orkestrel/html` | `0.0.4` | L1 | `@orkestrel/contract` `^0.0.12` |
52
- | `@orkestrel/indexeddb` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.12` |
53
- | `@orkestrel/interpret` | `0.0.10` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/reason` `^0.0.7`, `@orkestrel/template` `^0.0.4` |
54
- | `@orkestrel/markdown` | `0.0.9` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/html` `^0.0.4` |
55
- | `@orkestrel/mcp` | `0.0.20` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/process` `^0.0.4`, `@orkestrel/sse` `^0.0.5`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/websocket` `^0.0.9` |
56
- | `@orkestrel/middleware` | `0.0.16` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/timeout` `^0.0.7` |
57
- | `@orkestrel/msg` | `0.0.7` | L0 | |
58
- | `@orkestrel/ndjson` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
59
- | `@orkestrel/ollama` | `0.0.10` | L6 | `@orkestrel/agent` `^0.0.16`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/ndjson` `^0.0.7`, `@orkestrel/timeout` `^0.0.7`, `@orkestrel/tool` `^0.0.11` |
46
+ | `@orkestrel/csv` | `0.0.5` | L1 | `@orkestrel/contract` `^0.0.13` |
47
+ | `@orkestrel/database` | `0.0.12` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/indexeddb` `^0.0.9`, `@orkestrel/sqlite` `^0.0.9` |
48
+ | `@orkestrel/emitter` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
49
+ | `@orkestrel/form` | `0.0.3` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
50
+ | `@orkestrel/guide` | `0.0.13` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/markdown` `^0.0.10` |
51
+ | `@orkestrel/html` | `0.0.5` | L1 | `@orkestrel/contract` `^0.0.13` |
52
+ | `@orkestrel/indexeddb` | `0.0.9` | L1 | `@orkestrel/contract` `^0.0.13` |
53
+ | `@orkestrel/interpret` | `0.0.11` | L3 | `@orkestrel/reason` `^0.0.8`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/template` `^0.0.5` |
54
+ | `@orkestrel/markdown` | `0.0.10` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/html` `^0.0.5` |
55
+ | `@orkestrel/mcp` | `0.0.21` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/process` `^0.0.6`, `@orkestrel/sse` `^0.0.5`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/websocket` `^0.0.9` |
56
+ | `@orkestrel/middleware` | `0.0.17` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/timeout` `^0.0.7` |
57
+ | `@orkestrel/msg` | `0.0.8` | L0 | |
58
+ | `@orkestrel/ndjson` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
59
+ | `@orkestrel/ollama` | `0.0.11` | L6 | `@orkestrel/agent` `^0.0.17`, `@orkestrel/budget` `^0.0.8`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/ndjson` `^0.0.8`, `@orkestrel/timeout` `^0.0.8`, `@orkestrel/tool` `^0.0.12` |
60
60
  | `@orkestrel/pool` | `0.0.8` | L2 | `@orkestrel/emitter` `^0.0.7` |
61
- | `@orkestrel/probe` | `0.0.2` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/mcp` `^0.0.20`, `@orkestrel/queue` `^0.0.9`, `@orkestrel/timeout` `^0.0.7`, `@orkestrel/tool` `^0.0.11` |
62
- | `@orkestrel/process` | `0.0.4` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
63
- | `@orkestrel/program` | `0.0.9` | L4 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/qualifier` `^0.0.10`, `@orkestrel/rater` `^0.0.11`, `@orkestrel/reason` `^0.0.7` |
64
- | `@orkestrel/qualifier` | `0.0.10` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/reason` `^0.0.7` |
65
- | `@orkestrel/queue` | `0.0.9` | L3 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.10`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/timeout` `^0.0.7` |
66
- | `@orkestrel/rater` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/reason` `^0.0.7` |
67
- | `@orkestrel/reason` | `0.0.7` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
68
- | `@orkestrel/relation` | `0.0.9` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.10`, `@orkestrel/emitter` `^0.0.7` |
69
- | `@orkestrel/router` | `0.0.10` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
70
- | `@orkestrel/scaffold` | `0.0.46` | L3 | `@orkestrel/console` `^0.0.9`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/markdown` `^0.0.9`, `@orkestrel/process` `^0.0.4`, `@orkestrel/template` `^0.0.4` |
71
- | `@orkestrel/sea` | `0.0.9` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/process` `^0.0.3` |
72
- | `@orkestrel/server` | `0.0.14` | L3 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/router` `^0.0.10`, `@orkestrel/timeout` `^0.0.7` |
73
- | `@orkestrel/sqlite` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.12` |
61
+ | `@orkestrel/probe` | `0.0.3` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/mcp` `^0.0.21`, `@orkestrel/queue` `^0.0.10`, `@orkestrel/timeout` `^0.0.7`, `@orkestrel/tool` `^0.0.11` |
62
+ | `@orkestrel/process` | `0.0.6` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7` |
63
+ | `@orkestrel/program` | `0.0.10` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/qualifier` `^0.0.11`, `@orkestrel/rater` `^0.0.11`, `@orkestrel/reason` `^0.0.7` |
64
+ | `@orkestrel/qualifier` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/reason` `^0.0.7` |
65
+ | `@orkestrel/queue` | `0.0.10` | L3 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/timeout` `^0.0.7` |
66
+ | `@orkestrel/rater` | `0.0.12` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/reason` `^0.0.8` |
67
+ | `@orkestrel/reason` | `0.0.8` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
68
+ | `@orkestrel/relation` | `0.0.10` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.12`, `@orkestrel/emitter` `^0.0.8` |
69
+ | `@orkestrel/router` | `0.0.11` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7` |
70
+ | `@orkestrel/scaffold` | `0.0.49` | L3 | `@orkestrel/console` `^0.0.9`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/markdown` `^0.0.9`, `@orkestrel/process` `^0.0.6`, `@orkestrel/template` `^0.0.4` |
71
+ | `@orkestrel/sea` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/process` `^0.0.6` |
72
+ | `@orkestrel/server` | `0.0.15` | L3 | `@orkestrel/abort` `^0.0.8`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/router` `^0.0.11`, `@orkestrel/timeout` `^0.0.8` |
73
+ | `@orkestrel/sqlite` | `0.0.9` | L1 | `@orkestrel/contract` `^0.0.13` |
74
74
  | `@orkestrel/sse` | `0.0.5` | L0 | |
75
75
  | `@orkestrel/supervisor` | `0.0.1` | L5 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.9`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/workflow` `^0.0.12` |
76
- | `@orkestrel/table` | `0.0.2` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
77
- | `@orkestrel/template` | `0.0.4` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
78
- | `@orkestrel/terminal` | `0.0.11` | L3 | `@orkestrel/console` `^0.0.8`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/form` `^0.0.2`, `@orkestrel/sse` `^0.0.5` |
79
- | `@orkestrel/test` | `0.0.8` | L0 | |
80
- | `@orkestrel/timeout` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
81
- | `@orkestrel/tool` | `0.0.11` | L1 | `@orkestrel/contract` `^0.0.12` |
82
- | `@orkestrel/toolbox` | `0.0.7` | L6 | `@orkestrel/agent` `^0.0.16`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.10`, `@orkestrel/form` `^0.0.2`, `@orkestrel/relation` `^0.0.9`, `@orkestrel/server` `^0.0.13`, `@orkestrel/terminal` `^0.0.10`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/workflow` `^0.0.13`, `@orkestrel/workspace` `^0.0.5` |
83
- | `@orkestrel/websocket` | `0.0.9` | L2 | `@orkestrel/emitter` `^0.0.7` |
84
- | `@orkestrel/worker` | `0.0.8` | L4 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.10`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/pool` `^0.0.8`, `@orkestrel/queue` `^0.0.9` |
85
- | `@orkestrel/workflow` | `0.0.13` | L4 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.10`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/queue` `^0.0.9`, `@orkestrel/timeout` `^0.0.7` |
86
- | `@orkestrel/workspace` | `0.0.5` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/database` `^0.0.10`, `@orkestrel/emitter` `^0.0.7` |
76
+ | `@orkestrel/table` | `0.0.3` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
77
+ | `@orkestrel/template` | `0.0.5` | L2 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/emitter` `^0.0.8` |
78
+ | `@orkestrel/terminal` | `0.0.12` | L3 | `@orkestrel/console` `^0.0.10`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.12`, `@orkestrel/emitter` `^0.0.8`, `@orkestrel/form` `^0.0.3`, `@orkestrel/sse` `^0.0.5` |
79
+ | `@orkestrel/test` | `0.0.11` | L0 | |
80
+ | `@orkestrel/timeout` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.13` |
81
+ | `@orkestrel/tool` | `0.0.12` | L1 | `@orkestrel/contract` `^0.0.13` |
82
+ | `@orkestrel/toolbox` | `0.0.8` | L6 | `@orkestrel/agent` `^0.0.17`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/form` `^0.0.2`, `@orkestrel/relation` `^0.0.9`, `@orkestrel/server` `^0.0.14`, `@orkestrel/terminal` `^0.0.11`, `@orkestrel/tool` `^0.0.11`, `@orkestrel/workflow` `^0.0.14`, `@orkestrel/workspace` `^0.0.5` |
83
+ | `@orkestrel/websocket` | `0.0.10` | L2 | `@orkestrel/emitter` `^0.0.8` |
84
+ | `@orkestrel/worker` | `0.0.9` | L4 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/pool` `^0.0.8`, `@orkestrel/queue` `^0.0.10` |
85
+ | `@orkestrel/workflow` | `0.0.14` | L4 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.11`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/queue` `^0.0.10`, `@orkestrel/timeout` `^0.0.7` |
86
+ | `@orkestrel/workspace` | `0.0.6` | L3 | `@orkestrel/contract` `^0.0.13`, `@orkestrel/database` `^0.0.12`, `@orkestrel/emitter` `^0.0.8` |
87
87
 
88
88
  <!-- /orkestrel:catalog -->
89
89
 
@@ -227,9 +227,13 @@ Import `createScratch` from `@orkestrel/test/server` when a proof needs real fil
227
227
  ```ts
228
228
  interface ScratchInterface {
229
229
  readonly path: string
230
- write(target: string, text: string): void
230
+ write(target: string, text: string): string
231
231
  read(target: string): string | undefined
232
- exists(target: string): boolean
232
+ has(target: string): boolean
233
+ names(target?: string): readonly string[]
234
+ ensure(target: string): string
235
+ link(target: string, source: string): string
236
+ remove(target: string): void
233
237
  destroy(): void
234
238
  }
235
239
  ```