OXYGENHUB

A local flow run of a WASM or syscall job copies the workspace whole 67851a868a3b

copy_tree copied into a directory it never made: a file at the top of
the workspace failed with No such file or directory, unless a directory
happened to be walked first. Found running the checkpoint demo locally;
the WASM test now has a file at the top.
Author
Andy McCall @andymccall <[email protected]>
via
agent agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key 6fa4d2bcc3de
When
· 2026-10-25 22:26 UTC
Signature
◈ sealed by agent:claude@andymccall
Hash
67851a868a3b06eb7cf6dd158a97de532a647c91ce66ba8ec1f1f83be3b8e238
Depends on
28cc603f737d c3db750ed96e e0918b887850 f201e1bc5bcd
Depended on by
85275e1ef3b7
In bookmarks
main
In tags
v0.4.0 v0.5.0 v0.5.1 v0.5.2 v0.5.3
Edits
3 atoms, 0 tree operations, 3 files

Browse the tree at this change

modified CHANGELOG.md +1 −0
…
3 unchanged lines
4 4
5 5
## Unreleased
6 6
7 +
- **A local `flow run` of a WASM or syscall job copies the workspace whole:** it copied into a directory it never made, so a file at the top of the workspace (a README) failed with `No such file or directory`.
7 8
- **Checkpoints: a handed-back job resumes (#77):** `checkpoint "/src/…"` on a job names directories that hold its progress; a runner handing the job back packs and keeps them (`POST …/checkpoint`), and the next attempt's runner restores them before running the same exec, so it carries on rather than starting again. The receipt lists the checkpoint among its inputs. WASM and syscall tiers for now. Spec §11.5.2.
8 9
- **A leaving runner finishes what fits its notice (#76):** a claim carries `expected_ms` (the median of the job's recent passing runs, from OxygenHub 0.9.4); `runner::leave_within(reason, notice)` finishes and reports a job whose expected rest fits the notice and hands back the others, and any still running when it is up. `runner::leave` is the same with no notice. Spec §11.5.2.
9 10
- **OxygenFlow's own CI writes a test report and coverage (#82):** its test job runs under cargo-nextest and cargo-llvm-cov (both in the Rust image, #81), keeping a JUnit report (whether or not the tests pass) and LCOV coverage for the hub's Tests and Coverage tabs; `.config/nextest.toml` has the `ci` profile.
…
93 unchanged lines
modified crates/flow/src/workspace.rs +2 −0
…
56 unchanged lines
57 57
/// `.gitignore` exclude) under `dir`, for `flow run`.
58 58
pub fn copy_tree(src: &Path, dir: &Path) -> Result<Files> {
59 59
    let mut files = Vec::new();
60 +
    // A file at the top would otherwise find no directory to go in.
61 +
    std::fs::create_dir_all(dir)?;
60 62
    let walk = ignore::WalkBuilder::new(src)
61 63
        .hidden(false)
62 64
        .git_ignore(true)
…
173 unchanged lines
modified crates/flow/tests/wasm.rs +2 −0
…
86 unchanged lines
87 87
    );
88 88
    module(&work, "mods/trap.wasm", "", "unreachable");
89 89
90 +
    // A file at the top of the workspace, beside the directories.
91 +
    std::fs::write(work.join("README"), "top\n").unwrap();
90 92
    std::fs::create_dir_all(work.join(".flow")).unwrap();
91 93
    std::fs::write(
92 94
        work.join(".flow/pipeline.kdl"),
…
56 unchanged lines