feat(skillfs): allow skill meta passthrough - #2237
Conversation
Relationship to the related issues and PRThis PR is the direct implementation of #2042.
In short, #2057 makes the SkillFS view available across containers; this PR How this PR satisfies #2042
This PR intentionally does not add cross-container control-socket |
There was a problem hiding this comment.
[P2] Hermes symlink classification now derives nested known skills by scanning source_root rather than the skill store when PathType::NestedPassthrough, which can mis-classify targets for skills that exist in the store but lack backing directories or for non-skill directories. This may weaken cross-skill link safeguards for nested layouts.
[P2] Passthrough .skill-meta mounts allow full user.* xattr mutation while resolver-enabled protected mode continues to deny user.* xattrs on .skill-meta, creating a policy difference on the same metadata tree that may surprise operators expecting consistent semantics.
[P2] Hermes protected metadata symlink/hardlink denials now consistently surface EACCES only instead of EACCES or EROFS, which may change error-driven behavior or monitoring expectations that previously relied on distinguishing EROFS from EACCES for nested metadata link attempts.
🤖 Generated by Qoder • View workflow run
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3711a04fc7
ℹ️ 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".
1570005763
left a comment
There was a problem hiding this comment.
The no-integration passthrough direction matches #2042, but the six inline findings below should be addressed before merge. Findings 1 and 3 are pre-existing gaps newly exposed or extended by this PR; finding 5 is an unfulfilled acceptance criterion; findings 2 and 4 are newly introduced regressions; finding 6 is a security-sensitive documentation and migration contract mismatch.
- derive metadata protection from mount-time integration state - apply one decision across flat and Hermes FUSE operations - preserve resolver and trusted-writer protection behavior Signed-off-by: kongche-jbw <kongche.jbw@alibaba-inc.com>
3711a04 to
e23c626
Compare
Why
SkillFS currently hides and protects
.skill-metaeven when no Skill Ledgerintegration is configured. That prevents an independently deployed Ledger from
managing metadata through the SkillFS FUSE view in zero-integration coexistence
mode.
What changed
resolver or enabled trusted writer.
.skill-metaas ordinary passthrough content when both integrationsignals are absent, consistently across reads, listings, mutations, links,
xattrs, and both rename endpoints.
injected policy behavior for flat and Hermes layouts.
Hidden state at both link endpoints.
allow_othermounts so backing POSIXpermissions remain authoritative across UIDs.
lifecycle operations, links, xattrs, resolver state changes, and real
source-equals-mountpoint Hermes topology.
Related issue
closes #2042
User / Agent impact
Without an active resolver or enabled trusted writer, agents and independently
deployed Ledger processes now see
.skill-metaas ordinary filesystem contentthrough SkillFS. Integrated deployments retain the existing hidden and
protected metadata view.
Risk and compatibility
This intentionally changes the default metadata behavior when neither
integration capability is configured. Deployments relying on implicit
.skill-metaprotection must enable an active resolver or trusted writer.--security-modeselects in-place topology only and does not enable metadataprotection by itself. The selected policy is fixed for the mount lifetime.
Validation
cargo +1.86.0 fmt --all -- --checkcargo +1.86.0 clippy --workspace --all-targets -- -D warningscargo +1.86.0 test --workspacescripts/test.shwith real FUSE and managed-mount smoke coveragecargo +1.86.0 doc --workspace --no-depsgit diff --checkThe root-only multi-UID
allow_otherregression is included; it skips whenthe local test runner is not root.
Documentation and rollback
The bilingual README and user guide, CLI help/runtime diagnostics, and
capability record now document the passthrough/protected mode matrix and
migration requirement. Operators can retain the former protected behavior by
configuring an active resolver or trusted writer. Reverting this commit
restores unconditional metadata protection.