Skip to content

feat(managed): gate installs by digest and report managed statuses [skip release] - #417

Merged
aroff merged 1 commit into
mainfrom
feat/managed-gate
Oct 10, 2026
Merged

aroff merged 1 commit into
mainfrom
feat/managed-gate

Conversation

@aroff

@aroff aroff commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Third slice of ADR-0016: the install gate and the managed statuses (decisions 4, 13, 14, 22 and 23).

  • Install gate (managed::gate). Every operation that adds or replaces skill content checks the managed state before changing anything:

    • skill add and skill update;
    • bundle add, bundle update, bundle override and resetting an override;
    • restoring personal overrides and project install.

    Blocked digests are refused. Under allowed = listed, unlisted content is refused too. Editable local skills skip the list but never the block, and are refused outright when an https source sets editable = "refused". A refusal links to the state's request URL when it has one. server serve and mcp serve share the core seam, and the gate reads the state again at each operation.

  • Statuses. skill list (project and global) gains managed-blocked and managed-not-allowed. They take precedence over the other eleven statuses, and --check fails on them even outside the current selection.

  • Command policy. Skill command groups follow the decision 4 table. They are refused when a required state is missing or the settings can't be used, and print a warning to stderr when the state expired or an optional one is missing. managed, cache, repo and cli always run.

  • Docs. CONTEXT.md lists thirteen statuses, reconciliation.mdx has the two new rows, and managed-command.mdx has a section on installs and other commands.

Test plan

  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • cargo llvm-cov nextest --all-features -E 'not test(install_e2e_tests)': 2185 passed
  • Modified-file coverage gate above 90% for all 13 modified production files
  • New tests:
    • gate unit tests;
    • refusals for install, bundle add, override, restore and reset, with no state changed;
    • project and global skill list --check with the managed statuses;
    • command policy path selection and exit code.

Every operation that adds or replaces skill content now checks the managed state before changing anything: skill add and update, bundle add, update, override and reset, project install and restoring personal overrides. Blocked digests are refused, and under allowed = listed so is anything unlisted; editable local skills skip the list but never the block.

skill list gains managed-blocked and managed-not-allowed, which take precedence over the other statuses and fail --check. Skill commands follow the state's command policy: refused without a required state, a warning when the state expired or is missing.
@aroff
aroff enabled auto-merge (squash) October 10, 2026 10:38
@aroff
aroff merged commit e5e80a2 into main Oct 10, 2026
15 checks passed
@aroff
aroff deleted the feat/managed-gate branch October 10, 2026 10:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant