Repository navigation
feat(id): wire id world fork CLI + provenance inspect (F12.2 remainder) (#556) - #3291
Conversation
WorldCommand::Fork wires the store-level fork_world into the CLI: source world directory, destination directory (absent-or-empty guard, New pattern), --name for the new world id (default: destination dir name, validated with validate_world_name, matching how a host opens .id-worlds/<name>), and --template setting ForkSpec.template. The source world id is read from its journal Created header, so callers cannot misname the origin; fork_world itself is unchanged. WorldCommand::Provenance is the inspect surface for local durable worlds: it reads a world directory journal and prints its Created id plus the Forked entry (origin, module hash, template flag, fork sequence), in text or --json. No local inspect surface existed and host list returns name/open only, so template forks are now identifiable through this. Tests (tests/world_fork_cli.rs, runs the real binary): CLI fork creates a world whose journal opens and restores under the new id with the parent program (module hash + seed); the forked directory contains only journal.jsonl + modules/ even when the source holds a seed.secret (F11.11 pin); --template is recorded and identifiable via provenance, and a never-forked world reports no origin; a non-empty destination and an invalid world name are refused. Verified on laptop: cargo test --test world_fork_cli 4/4, --test world_fork 4/4, --lib cli:: 112/112; rustfmt clean. Refs #556
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 13 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d7385168f3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…tail entries Codex review on the fork CLI (PR for #556): (1) world_provenance used find_map over the journal, returning the OLDEST Forked entry — in an A->B->C chain C reported A (and Bs template flag) as its origin; now scans in reverse so the worlds own fork record wins. (2) read_world_journal accepted an unterminated final entry when it happened to parse; FileJournal::open and the store fork reader drop every unterminated fragment as never-acknowledged, so the inspect reader now pops the final chunk before parsing when the file does not end in a newline. Regression tests: chained fork provenance reports the immediate origin + own template flag; a complete-JSON but unterminated Forked line is not reported by provenance.
What
Wires the F12.2 store-level world fork into the CLI — the remainder from triage task 2141 on #556 (store layer landed in 8a84035;
WorldCommandhad noForkvariant, so forking/templates were library-only). Queue task 4824.id world fork <SOURCE_DIR> <DIR> [--name ID] [--template] [--json]— local, likeworld new/doctor. Destination must be absent or empty (theNewguard). The new world id defaults to the destination directory's name (the id a host serving.id-worlds/<name>opens it under) and is validated withvalidate_world_name; the source world id is read from its journalCreatedheader, so the origin can't be misnamed. Callsworld_store::fork_worldunchanged, then reads back and prints the recorded provenance.id world provenance <DIR> [--json]— the inspect surface for local durable worlds: prints the journal'sCreatedid plus theForkedentry (origin, module hash at fork point,templateflag, fork sequence). Scope note: no local inspect surface existed and hostworld listreturns name/open only (reading journals there would be a protocol change), so this is the smallest honest wiring that makes a template fork identifiable.world_store::fork_worldbehaviour is untouched.Tests
New
pkgs/id/tests/world_fork_cli.rsruns the real binary:WorldCore::restores under the new id, with the parent's program (module hash + seed) restored; provenance output reports origin/hash/sequence.journal.jsonl+modules/, even when the source world holds aseed.secretfile — journal state only, nothing else inherited.--templateis recorded in the fork's provenance and identifiable afterwards viaid world provenance; a never-forked world reports no origin.Verified on the laptop:
cargo test --test world_fork_cli4/4,--test world_fork4/4 (existing store suite),--lib cli::112/112;rustfmt --checkclean on the touched files. (Local clippy is blocked by a laptop rustc version mismatch — 1.99 clippy vs 1.98.1 artifacts — CI covers it.)Refs #556
Need help on this PR? Tag
@codesmith-botwith what you need.