Boundary and content ownership
Who owns a boundary, and who owns created work.
Boundary owners
Every boundary names the role holding the other side with a required owner.
A boundary without one is a roster-wide rule that some roles care about more
than others, which belongs in the layer that owns rules rather than here.
The owner is a relationship, not authority. It grants no permission and no executable capability. It does two mechanical things: the owner receives the body without declaring it, and loading fails when an owner declares its own boundary, since that would place one role on both sides.
Two-sided bodies
One body carries both halves under conditional headings, so the reader self-selects before reading a word of prose:
# Boundary: modify live system
Who changes running systems, and who hands that change to the role that owns it.
### If you own this boundary
You own live system modification...
### If you defer this boundary
Your clone is sealed against live mutation...
The owner section comes first, so the deferral reads as the consequence of the allocation rather than as a bare prohibition. Both sections are required, each is bounded separately at 200 words, and the whole file goes to both sides so each role can read what the other was told.
Nothing parses these headings. The roster already records who owns and who declares, so delivery, the identity card, and evaluation coverage all key off that. Headings exist for the glance.
Sections identify by relationship, never by role name. A role list in prose beside the same list in KDL is the drift this design removes.
Reading the allocation
agent-compose catalog boundaries prints one verb per cell in stable boundary
order, so two runs line up beside each other:
boundary platform sysadmin science frontend gamedev director advocate
modify-live-backend scope OWNS defers defers scope defers defers
build-foundational-software OWNS scope scope scope scope defers defers
describe carries the same facts in a sentence past column 90, in per-role
order, so it cannot be compared across roles. Four boundaries against seven
roles means three roles own nothing, and a role may hold more than one scope.
Product and engine ownership
Agent Compose keeps executable parsing, validation, selection, deterministic rendering, and diagnostics in Go. Product prose and profile policy belong to reviewable local data assets.
Boundaries
- Engine assets - generic evaluation behavior and the native adaptation
policy.
internal/roster/definitions/NATIVE-ADAPTATION.txtis embedded data, not a profile override. - Profile assets - role skills, role-bound methods, structured role metadata,
role identity, invariant, copy contracts, and optional complete
behavior board, which lives here under
evalkit/andevaluations/. - Personality-library assets - personality bindings, aliases, identity primitives, and definition skills.
- Consumer configuration - local profile and library roots only. Agent Compose does not fetch URLs, clone repositories, resolve releases, or read git references.
Evaluation matrices
The engine supplies its complete generic matrix when a selected role has no profile asset. A profile matrix replaces that matrix as one complete unit. The loader does not merge fields, and a role cannot silently opt out.
Developer Advocate owns one connected audience loop: reusable source artifacts, provenance, claim discipline, editorial recommendations, audience research, channel adaptation, community continuity, durable feedback, qualification, discovery support, evidence selection, and decision records. These responsibilities no longer cross artificial role handoffs.
It owns recommendations about communication addressed outward, not every
human-readable artifact. suggest-external-comms is the single source for which
records a deferring role retains, which words a scoped seat may write inside its
own artifact, and for the separate authorization publishing and sending need.
This page does not restate those lists, because three hand-maintained copies had
already drifted apart before the boundary existed.
Omitting a boundary
A deployment with no seat for the owning role composes without that boundary. See boundary omission.
Reviewed production locations
internal/evaluation/evaluation.go- typed evaluation pack rendering, generic fallback, profile matrix parsing, and validation remain executable. Role-specific profile matrices load from data assets.internal/evaluation/result.go- result decoding, score validation, and canonical v2 pack digesting remain executable behavior.internal/roster/roster.go- rendering remains executable. The long-form native-adaptation policy lives indefinitions/NATIVE-ADAPTATION.txt.internal/person/person.go- KDL parsing, local library merge, conflict detection, and copy-contract validation remain executable.cmd/agent-compose/main.go- CLI help and command wiring remain executable glue. No profile, library, or customer-specific prose belongs there.
Generated artifacts retain logical source IDs and content digests. They do not publish local filesystem paths.