refactor(person): scope comms to socially toned surfaces, add meld counterparts #253

Closed
coilyco-ops wants to merge 0 commits from comms/rescope-counterpart into main
Member

Follow-up to #248 and #249. Comms bound seven of eight roles, one role away from the rule-in-meld-clothing problem, and two things were wrong underneath it.

The no-invention paragraph was never a communication boundary. It is a roster-wide honesty rule that lived in comms because a meld was the only shared carrier available. Creator cannot take the body, so the rule existed as hand-maintained copies, and they had already drifted:

  • meld: "facts, relationships, responses, audience state, or completed actions"
  • creator charter: "facts, relationships, behavior, systems, responses, or completed actions"
  • docs/creator-ownership.md: a third variant of the retained-records list, dropping four items and adding incident

That paragraph leaves acompose for the AGENTS layer. Comms goes 259 to 227 words. One caveat worth recording: a bundle shipped to a seat without that AGENTS base loses the rule, so this is a real dependency, not a free move.

The binding axis is externally facing content that carries a social tone. Comms now binds design, exec, and ops. Engineer's case was an email to a maintainer, director's a meeting note to Kai, and qa's a private message to a teammate, none of them externally facing broadcast content. AI Engineer's outputs are internal measurement artifacts, and its case was authored in 0c45c69 to satisfy the coverage gate rather than from a real surface, so it is not independent evidence. Those cases retire with the binding, including the mechanical record-ownership regressions, which existed only as the carve-out from a deference rule those roles no longer carry.

Melds gain an optional counterpart. It names the role holding the other side of a boundary. It grants no authority, changes no delivery, and does two mechanical things: the counterpart must not declare the meld, which loading now enforces, and evaluation coverage derives from it so the mirror role owes the boundary case without a second list of role names.

  • comms takes counterpart="creator"
  • live-ops takes counterpart="ops"
  • evidence takes none, which is the honest reading of a meld with no mirror

A meld with a counterpart is two-sided by construction, which turns "is this shared doctrine or a rule in disguise" into a schema check instead of a judgment call in a PR description.

Digest blast radius. The counterpart relationship is deliberately kept out of the rendered pack and its digest, so both keep describing what the driver actually receives. Creator's pack is byte-identical to main as a result. The other seven move, which is correct, since their delivered doctrine changed.

Green: go build ./..., go vet ./..., the full go test ./... outside the pre-existing #240 gate, and pre-commit run --all-files.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

🤖 Generated with Claude Code

Follow-up to #248 and #249. Comms bound seven of eight roles, one role away from the rule-in-meld-clothing problem, and two things were wrong underneath it. **The no-invention paragraph was never a communication boundary.** It is a roster-wide honesty rule that lived in comms because a meld was the only shared carrier available. Creator cannot take the body, so the rule existed as hand-maintained copies, and they had already drifted: * meld: "facts, relationships, responses, audience state, or completed actions" * creator charter: "facts, relationships, behavior, systems, responses, or completed actions" * `docs/creator-ownership.md`: a third variant of the retained-records list, dropping four items and adding `incident` That paragraph leaves acompose for the AGENTS layer. Comms goes 259 to 227 words. One caveat worth recording: a bundle shipped to a seat without that AGENTS base loses the rule, so this is a real dependency, not a free move. **The binding axis is externally facing content that carries a social tone.** Comms now binds design, exec, and ops. Engineer's case was an email to a maintainer, director's a meeting note to Kai, and qa's a private message to a teammate, none of them externally facing broadcast content. AI Engineer's outputs are internal measurement artifacts, and its case was authored in `0c45c69` to satisfy the coverage gate rather than from a real surface, so it is not independent evidence. Those cases retire with the binding, including the mechanical record-ownership regressions, which existed only as the carve-out from a deference rule those roles no longer carry. **Melds gain an optional `counterpart`.** It names the role holding the other side of a boundary. It grants no authority, changes no delivery, and does two mechanical things: the counterpart must not declare the meld, which loading now enforces, and evaluation coverage derives from it so the mirror role owes the boundary case without a second list of role names. * `comms` takes `counterpart="creator"` * `live-ops` takes `counterpart="ops"` * `evidence` takes none, which is the honest reading of a meld with no mirror A meld with a counterpart is two-sided by construction, which turns "is this shared doctrine or a rule in disguise" into a schema check instead of a judgment call in a PR description. **Digest blast radius.** The counterpart relationship is deliberately kept out of the rendered pack and its digest, so both keep describing what the driver actually receives. Creator's pack is byte-identical to `main` as a result. The other seven move, which is correct, since their delivered doctrine changed. Green: `go build ./...`, `go vet ./...`, the full `go test ./...` outside the pre-existing #240 gate, and `pre-commit run --all-files`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Comms bound seven of eight roles, one away from being a roster-wide rule
wearing a meld's clothes. Two things were wrong underneath that.

Its no-invention paragraph was a roster-wide honesty rule, not a
communication boundary, and it lived here only because a meld was the one
shared carrier available. Since creator cannot take the body, the rule
existed in hand-maintained copies that had already drifted: the meld read
"facts, relationships, responses, audience state, or completed actions"
while the creator charter read "facts, relationships, behavior, systems,
responses, or completed actions", and docs/creator-ownership.md carried a
third variant of the retained-records list. That paragraph moves out to the
AGENTS layer, taking comms from 259 to 227 words.

The binding axis is holding externally facing content that carries a social
tone, so comms now binds design, exec, and ops. Engineer's case was a
maintainer email, director's a meeting note to Kai, and qa's a private
message to a teammate, none of which is externally facing broadcast
content. AI Engineer's outputs are internal measurement artifacts, and its
one case was authored to satisfy the coverage gate in 0c45c69 rather than
from a real surface. Their cases retire with the binding.

Melds gain an optional counterpart naming the role that holds the other
side. It grants no authority and changes no delivery. The counterpart never
declares the meld, which loading now enforces, and evaluation coverage
derives from it so the mirror role owes the boundary case without a second
list of role names. comms takes creator, live-ops takes ops, evidence takes
none, which is the honest reading of a meld with no mirror.

The counterpart relationship stays out of the rendered pack and its digest,
so both keep describing what the driver receives. Creator's pack is
byte-identical to main as a result. The other seven move.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Author
Member

Merged into main as 4ce2537. The branch head 8eb92b6 is an ancestor of main, so this landed via a local merge and push rather than the web merge button, which is why the PR stayed open.

Superseded in part by #259, which renames the counterpart field added here to owner.

Merged into `main` as `4ce2537`. The branch head `8eb92b6` is an ancestor of main, so this landed via a local merge and push rather than the web merge button, which is why the PR stayed open. Superseded in part by #259, which renames the `counterpart` field added here to `owner`.
coilyco-ops closed this pull request 2026-08-09 04:48:37 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agent-compose!253
No description provided.