Descriptions of attachment tend to invite the player to try detaching the parts; the purpose of this class is to provide responses that are better than the defaults. A good custom message for this class should usually acknowledge the attachment relationship, and explain why the parts can't be separated.
There are two ways to express the attachment relationship.
First, the more flexible way: in each PermanentAttachment object, define the 'attachedObjects' property to contain a list of the attached objects. All of those other attached objects should usually be PermanentAttachment objects themselves, because the real-world relationship we're modeling is obviously symmetrical. Because of the symmetrical relationship, it's only necessary to include the list entry on one side of a pair of attached objects - each side will automatically link itself to the other at start-up if it appears in the other's attachedObjects list.
Second, the really easy way: if one of the attached objects is directly inside the other (which often happens for permanent attachments, because one is a component of the other), make the parent a PermanentAttachment, make the inner one a PermanentAttachmentChild, and you're done. The two will automatically link up their attachment lists at start-up.
Note that this is a subclass of Attachable. Note also that a PermanentAttachment can be freely combined with a regular Attachable; for example, you could create a rope with a hook permanently attached, but stil allow the rope to be attached to other things as well: you'd make the rope a regular Attachable, and make the hook a PermanentAttachment. The hook would be unremovable because of its permanent status, and this would symmetrical prevent the rope from being removed from the hook. But the rope could still be attached to and detached from other objects.
PermanentAttachment : Attachable
By default, if our container is also a PermanentAttachment, and we're attached to it, we'll simply return its message. This makes it really easy to define symmetrical permanent attachment relationships using containment, since all you have to do is make the container and the child both be PermanentAttachments, and then just define the cannot-detach message in the container. If the container isn't a PermanentAttachment, or we're not attached to it, we'll return our default library message.