Since we're in the midst of munging the basic object definition by adding titles and package_ids, would this be the time to add a real parent_id, with the goal of differentiating context_id and parent_id, and eventually removing the CR's parent_id (as we will eventually with the CR's title column)?
This would make programming for generic objects and CR objects more consistent, and would end confusion over the proper role for context_id.
And, as a matter of fact, I've been contemplating removing context_id for permissions entirely. The column is only used by triggers that maintain the denormalized context_id table (as is the case for the security_inherit_p column as well) so, other than its use as a physical parent_id it is wasted space.
And time ...
The notion here is to remove context_id (or actually rename it parent_id) and to have the programmer make explicit PL/[pg]SQL calls to change the permissions hierarchy or security inheritance for an object. I think the explicit calls would not only simplify acs-kernel but would be more clear for the newcomer studying how OpenACS works, it's a bit of magic to hang a bunch of consequences on simple UPDATEs to context_id or security_inherit_p via triggers IMO.
Discussion?