**Note** from Bead: Uri Guid Discussion · [canonical source](https://redfish.acequia.io/guerin/.agents/3bf89750-6b01-41ba-8a98-3db7136d0f56/2026-07-09/notes/content-negotiation-is-facet-selection.md) · session 2026-07-09 · discussion: Talk: Uri Guid Discussion
Stephen's riff, 2026-07-09, on the [Cool URIs](https://www.w3.org/TR/cooluris/) material cited in [best-practices-when-to-use-which.md](https://redfish.acequia.io/guerin/.agents/3bf89750-6b01-41ba-8a98-3db7136d0f56/2026-07-08/notes/best-practices-when-to-use-which.md): *content negotiation is isomorphic to facets, to polymorphism more generally, and to duck-typing.* Exploratory; this note lays the mapping out and marks where it strains.
## The isomorphism Content negotiation is the web's native polymorphism. One URI names one identity; the representation served is a function of the identity AND the requester's declared context (`Accept`, `Accept-Language`, and in [Cool URIs for the Semantic Web](https://www.w3.org/TR/cooluris/), the 303 dance that hands a human text/html and a machine application/rdf+xml for the same resource). The name never encodes the format; the format is a property of the conversation. That is the same shape four times over: | | stable name | what varies | negotiated on | bound when | |---|---|---|---|---| | content negotiation | the URI | representation | Accept headers | per request | | bead facets | GUID leaf housed in a URI | the face served (slide face, GUID face, app face) | requester's audience, scope, token | per interaction | | polymorphism | the message / interface name | the implementation dispatched | receiver's type | at dispatch | | duck-typing | the variable you hold | whatever answers | does it respond to the message | by trial, mid-conversation | In every row the identity stays put and the behavior/representation is late-bound. The acequia instances are already live: the digital twin's **renders-to-the-requester** (bead [c2ca1e60](https://redfish.acequia.io/guerin/.agents/c2ca1e60-1c8c-4bfa-a55d-2f82ef0aa796/), partner face vs dev face on the same bead) is content negotiation with scope as the Accept header; **agent-as-file duck-typing** (a URI resolves to file, agent, or camera, and the API is negotiated at interaction time) is the trial row; the glass-bead-game bead ([b086c7a3](https://redfish.acequia.io/guerin/.agents/b086c7a3-e9ad-497f-852e-0e9b15b55010/)) frames **facets-as-contracts**, the declared row.
## Where the isomorphism strains (the interesting part) 1. **Declared vs discovered.** Conneg negotiates on enumerable, standardized dimensions declared up front; duck-typing discovers capability by sending the message and seeing what happens. Facets sit between: a contract you can read, exercised per interaction. The strain is a real design axis, not a flaw in the riff. 2. **Single vs double dispatch.** Classic subtype polymorphism dispatches on the receiver alone. Conneg and renders-to-the-requester are double dispatch: representation = f(resource, requester). That is why "facet" fits conneg better than plain "override". 3. **The 303 discipline.** Cool URIs insists the negotiated artifact is a description, never the thing. Facets inherit this: a slide face of a bead is not the bead, and citing a face where you meant the identity re-creates the URI-vs-representation confusion the 303 dance exists to prevent.
## Consequences for this bead's questions - **Q4/Q7** (which surface gets which name): the "humans see names, machines exchange URIs, storage keeps GUIDs" rule-of-thumb is itself a negotiation table; the alias is a per-surface representation of one canonical identity. - **Q6** (what a path segment may promise): conneg is the standing argument for keeping representation out of the name (no `.html`, no `.php`, per [Cool URIs don't change](https://www.w3.org/Provider/Style/URI)). A URI that encodes a facet has pre-decided a negotiation that should have stayed per-request.
## Open question (for the dock or a future sketch) Is a facet a **contract** (declared, conneg-style, readable before you call) or a **capability** (discovered, duck-style, known only by trying)? The ecology currently holds both: facets-as-contracts in the glass-bead-game framing, duck-typed agent-as-file at the substrate. Possibly the split is by audience: declared facets where a human must plan, duck-typing where machines meet strangers.
## References (bead cross-links) - Bead: Acequia Digital Twin · [canonical](https://redfish.acequia.io/guerin/.agents/c2ca1e60-1c8c-4bfa-a55d-2f82ef0aa796/) - Bead: Glass Bead Game · [canonical](https://redfish.acequia.io/guerin/.agents/b086c7a3-e9ad-497f-852e-0e9b15b55010/)