Repository navigation
glance: contained apps publish with the glance capability, not by being os.* - #86
Merged
Merged
Conversation
This was referenced Sep 28, 2026
Merged
…ng os.* main pins App Hub e8601b80, whose KNOWN_CAPABILITIES has `glance`, so replace the stopgap that admitted only system apps. A contained caller now carries whether it holds the grant, and publish, withdraw and list refuse one without it. The Card runner's isolate gate lets glance.* out of an app only when the app's resolved policy grants glance, so a call from the app itself holds it; a call from a host sheet (no app policy) does not. System apps get no exemption: they run under their own manifest, so one that publishes requests glance like any store app. The shell's limits (L0, size caps, rate limit, per-app cap, dedupe, expiry) are unchanged. News does not publish cards from its bundle yet, so its manifest is unchanged. No pin changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ymote
force-pushed
the
feat/glance-capability
branch
from
September 28, 2026 08:55
c5337de to
e9a4fbb
Compare
ymote
marked this pull request as ready for review
September 28, 2026 09:27
ymote
added a commit
that referenced
this pull request
Sep 29, 2026
… [skip ci]
- approvals/contacts.rs: ContactsSource (is_known for email addresses and
Matrix IDs), ContactList/NoContacts test doubles, MailContacts reading
Mail's host service data, and ContactsGate: off by default, on only by
the person's Settings tap ("Use my contacts in approval rules"), kept
owner-only in approvals/contacts.json. The router evaluates "recipients
in contacts" through the gate.
- mail host service: contacts::known_addresses (own accounts, recorded
send recipients, To/Cc of sent folders; never the secret store); the
decoder keeps To/Cc; a removed account forgets its recipients.
- docs/ai-services(.zh-CN).md refreshed against main (#106, #113, #117,
#118, #120, #124, #95, #86), linking architecture.md; architecture's
contacts lines updated.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #72. Rebuilt on main
bb2b219after #70, which pins App Hube8601b80(withglanceinKNOWN_CAPABILITIES) and Rinx68afcf79. This PR changes no pin (Rinx, App Hub, octos, makepad): the earlier App Hub move to59cc35eband its README pin edits are gone. The only file changed iscrates/shell/src/glance.rs.What
crates/shell/src/glance.rs: theos.*stopgap is gone. It is replaced by a capability check:Caller::Contained { app, granted }records whether the caller holdsglance.publish,withdrawandlistall refuse a contained caller without it, with the error "<app>was not granted the glance capability".listnow returns aResult.splash_policy::service_allowed) letsglance.*out of an app's isolate only when the app's resolved policy grantsglance. So a callGlanceServicereceives from the app itself holds the grant. A call from a host sheet runs under no app policy, so it hasgranted: falseand is refused.system::prepareresolves them through the sameKNOWN_CAPABILITIES). A system app that publishes must requestglance, the same way Mail requestsmailand AI providers requestsllm. Native modules (the shell's own code) are unchanged.a_contained_app_needs_the_glance_capability_whoever_it_is: a granted store app publishes. Without the grant, publish, list and withdraw are all refused, foros.*apps too. Native callers still publish.the_runner_gate_admits_glance_only_with_the_capability: the makepad gate refusesglance.*withoutglance, allows all three methods with it, andglancegrants nothing else.glance.publishis refused. It previously checked that a non-os.*app was refused.glance.*. The demo digest (OCTOSENSE_GLANCE_DEMO) is published by the shell as a grantedos.news. When News publishes from its bundle, it addsglancetoapps/news/bundle/manifest.json.Checked against the real App Hub grant (
e8601b80)A scratch crate on
octosense-app-policyate8601b80confirmed:KNOWN_CAPABILITIEShasglance; a system manifest (os.news,HostLimits::system()) that declaresglanceresolves withallows("glance"); a system app that does not declare it does not get it; a store app declaring it resolves with it.Conflict with #87
#87 (
sys.digest) also editsglance.rs: the oldCaller::Contained(String)type and theos.*gate. Whichever of #86 and #87 merges second rebases onto the other.Verification (local, macOS)
python3 tools/setup.py --check --cargo: pass (.sourcesare hub worktrees at main's pins)cargo check --locked -p octosense, with and without--features mobile-apps: passbash tools/check-shell-graph.sh -p octosense: passphone/:cargo check --locked -p octosense-home --features mobile-apps: passphone/:bash ../tools/check-shell-graph.sh -p octosense-home: passphone/:cargo test --locked -p octosense-app-policy --no-run: pass, not ambiguous (one App Hub now that Rinx and the shell agree)cargo test --locked -p octosense-shell glance: 12 passed. With--features app-hub: 13 passed, including the Card runner dispatch test.🤖 Generated with Claude Code