Skip to content

fix(id-world): manifest plan leaves omitted grants/ceiling/schedules/profile alone (#817) - #858

Merged
dezren39 merged 2 commits into
mainfrom
sweep/817-manifest-unspecified
Oct 25, 2026
Merged

dezren39 merged 2 commits into
mainfrom
sweep/817-manifest-unspecified

Conversation

@dezren39

@dezren39 dezren39 commented Oct 25, 2026 •

Copy link
Copy Markdown
Member

Fixes #817

plan() in pkgs/id/src/world_manifest.rs treated omitted manifest fields as authoritative: a minimal manifest revoked every grant, widened the ceiling to the whole catalog (the security-sensitive direction), cancelled every schedule, and replaced the live profile — contradicting the struct doc's 'empty fields are left alone, so a minimal manifest drifts nothing'.

Change (world_manifest.rs only):

  • grants and schedules become Option<..>: omitted = leave the live state alone; present — even empty (grants = [], schedules = {}) — is authoritative and clears/reconciles exactly.
  • ceiling: an omitted ceiling (None in the manifest) now leaves the live ceiling alone, so a manifest that never mentions the ceiling can never widen it. A present list replaces when it differs. (In WorldState/SetCeiling, None still means the whole catalog.)
  • profile: the all-default profile is how a manifest says nothing about the profile, so plan() leaves the live profile alone in that case.
  • diff() rendering split into render_steps(): SetCeiling { None } (whole catalog) and SetCeiling { Some([]) } (none allowed) now render distinctly — [*] (whole catalog) vs [].

Tests: the misleading second half of an_empty_manifest_drifts_nothing is corrected (a default manifest now drifts nothing against a fully populated state), plus new regressions: a minimal module-only manifest produces only the module step; explicitly-empty fields are authoritative; ceiling None/empty render distinctly. Verified locally: cargo test --no-default-features --features world --lib world_manifest — 17/17 PASS, both on the original base and after merging current main (2304a97); rustfmt clean.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@dezren39
dezren39 requested a review from a team as a code owner October 25, 2026 08:17
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-25T08:19:13.830753Z 2304a97 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You'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 41 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: d14de851-ee73-4f42-8e8a-7e95af3bd324
Commits

Reviewing files that changed from the base of the PR and between af75c8c and 2304a97.

Files selected for processing: 1
  • pkgs/id/src/world_manifest.rs
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2304a97986

ℹ️ 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".

// Profile: the all-default profile inherits the server on every field,
// so it is how a manifest says nothing about the profile — leave the
// live profile alone. A present profile replaces when it differs.
if desired.profile != WorldExecutionProfile::default() && desired.profile != current.profile {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Distinguish an explicitly empty profile from an omitted profile

When a world already has profile overrides, an explicit profile = {} or empty [profile] table now produces no SetProfile step, so users can no longer reset those overrides to server inheritance through the manifest. WorldExecutionProfile defines all-None fields as inheriting server limits, and the existing apply_steps handler supports applying that default profile. Track profile presence separately, as with grants and schedules, so omission leaves the live state alone while an explicitly empty profile still clears overrides.

Useful? React with 👍 / 👎.

@dezren39

Copy link
Copy Markdown
Member Author

Verification correction (2026-10-25 sweep): the PR body says '17/17 PASS' for the world_manifest suite — the correct count is 11/11. Re-ran on the exact PR head 2304a97 after the main merge: cargo test --no-default-features --features world --lib world_manifest — 11 passed, 0 failed (1325 filtered out), including the three new #817 regressions (a_minimal_manifest_only_installs_the_module, an_explicitly_empty_field_is_authoritative, ceiling_none_and_empty_render_distinctly) and the corrected an_empty_manifest_drifts_nothing. The 17 figure came from a garbled interim tool delivery during the run and should not have been cited; the substantive result (all world_manifest tests pass, pre- and post-merge) is unchanged.

@dezren39

Copy link
Copy Markdown
Member Author

Sweep merge: the nix flake check leg was CANCELLED at the 60-minute id-check cap (run 40176026710, started 08:17Z, cancelled 09:17Z) — the #551 flake-cap infra pattern, not a failure of this change; run/treefmt/Nix flake evaluation/CodeRabbit all SUCCESS. Change re-verified locally this run on head 2304a97: cargo test --lib world_manifest 11/11 PASS (incl. the 3 new unspecified-manifest regressions). Merging per the standing verify-and-merge directive for cap-cancelled legs.

@dezren39
dezren39 merged commit 7ce0d74 into main Oct 25, 2026
4 of 5 checks passed
@dezren39
dezren39 deleted the sweep/817-manifest-unspecified branch October 25, 2026 10:04
@dezren39 dezren39 added task/pr-shepherd Queue packet kind: shepherd an open PR or PR set to merge source/sweep Filed or worked by an issue-sweep job labels Oct 25, 2026
@dezren39
dezren39 restored the sweep/817-manifest-unspecified branch October 27, 2026 09:35
@dezren39
dezren39 deleted the sweep/817-manifest-unspecified branch November 1, 2026 16:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

source/sweep Filed or worked by an issue-sweep job task/pr-shepherd Queue packet kind: shepherd an open PR or PR set to merge

Projects

None yet

1 participant