page.personal is an opaque filter template (the 'mine' predicate), not a punc name — same read, scope-derived filter

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 18:27:51 -04:00
parent c1c16bc814
commit 2895f06074

View File

@ -1,6 +1,7 @@
use crate::database::action::Action;
use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(default)]
@ -13,10 +14,11 @@ pub struct Page {
pub sidebar: Option<Sidebar>,
#[serde(skip_serializing_if = "Option::is_none")]
pub actions: Option<IndexMap<String, Action>>,
/// The personal-scope sibling punc for this page ("one surface, two scopes"):
/// the caller-scoped read the page issues when the app is in personal scope.
/// The personal-scope filter template ("one surface, two scopes"): the
/// "mine" predicate the page merges into its filter when the app is in
/// personal scope, e.g. {"reserved_by": "$me"}. Opaque to the engine.
#[serde(skip_serializing_if = "Option::is_none")]
pub personal: Option<String>,
pub personal: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]