Rename meld to boundary: name the removed behavior, require a counterpart #254
Labels
No labels
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agent-compose#254
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
meldnames the wrong thing, and the name has been letting incoherent members into the set.Reviewing #231, #248, and #249 produced two structural rules:
Together they define the primitive precisely:
One behavior removed from several roles and allocated to exactly one owner.
That definition explains every part that already works. The owner is required because the removed behavior has to go somewhere. The slug should name the behavior, because the behavior is what moves. And
melddescribes none of that, while both existing bodies already title themselves correctly: "Communication ownership boundary" and "Live operations boundary".Rename the primitive
meldbecomesboundaryacross the KDL keyword, loader, catalog, manifest, decision trace, evaluation packs, docs, and the external package contract. This also clears the overload flagged in #231, wheremeldalready meant the three-personality blend and its derived favorite color, which keeps that meaning.Measured cost against
7b92339, not estimated: 17 files reference the keyword or a slug, and three sites emitmeld:<id>into the decision trace and bundle manifest (internal/person/person.go,internal/bundle/verify.go,internal/resolver/resolver.go).Rename the slugs to the removed behavior
commsbecomessuggest-human-comms, ownercreatorlive-opsbecomesmodify-live-system, owneropsevidencebecomesseek-external-validation, ownerexecInvert the third one
evidenceas shipped in #249 fails the definition. It removes nothing and allocates nothing, it adds an obligation to the roles that declare it. Inverting it fixes that. The behavior removed is seeking validation from outside your own frame, and the roles that lose it lose it for two distinct reasons:Seven or six roles declare it, depending on the creator question below, and exec holds it. The count stops being a smell once an owner is required: "everyone except the owner" is an allocation, while "everyone, full stop" is a rule.
Split the #249 body
Half of
meld-evidenceis not about external anything and must not move into the new boundary:Exec's positive duty to actually go and look then lives in
role-exec, the way creator's charter carries the positive side of communication ownership.One caveat to record: a bundle shipped to a seat without Kai's AGENTS base loses the local-grounding half. That is a real dependency, not a free move.
Owner verification against live main
Checked against
7b92339rather than from memory. The test an owner must pass is that its own charter contradicts the boundary body, since that is what proves something was allocated rather than merely emphasized.Holds.
suggest-human-commsandcreator- "You exclusively own every recommendation about communication to a human, including wording, tone, framing, timing, channel, reply strategy, and editorial fitness."modify-live-systemandops- "You own the running-system loop through before-state, controlled change, rollback readiness, and after-state verification."Declarer reasoning holds too, each with charter text already pointing inward: qa "The selected repository and task define the product, user, and acceptance boundary", ops "Repository and observed runtime evidence define the estate", engineer "turn repository evidence into working code", ai "Never recommend a model, runtime, or hardware configuration without representative measured evidence", director "You assign evidence gathering to the appropriate execution role", design "Mark missing mechanics unresolved rather than inventing users, routes, data, timing, behavior, validation, or research".
Two problems found.
Exec does not claim the behavior. Its strongest line is "Rest a portfolio claim on measured audience, reach, cost, and effort rather than assumed values", which landed in #249. That is an obligation on exec, not an ownership claim, so it does not contradict the boundary body the way creator's and ops's charters do. Resolved by two-sided bodies below: the claim goes in the boundary's owner section rather than into
role-exec.Creator's charter contradicts the proposed binding. Creator is chartered to go outside: its purpose is "Turn real portfolio work and audience evidence into accurate content", and it owns "research within accepted strategy" plus "discovery and decision-criteria preparation" inside the audience loop. Binding creator to a boundary that removes external seeking sets its charter against its boundary. Worse, if creator legitimately goes outside as well, then the behavior is not owned by exactly one role and the boundary fails the definition again.
Three ways out, needing a decision:
modify-live-system. Kai's stated reason for creator, staying localized to her own preferences, is about taste rather than evidence, and belongs inrole-creatoras a style rule.Decided: exclude creator. Six roles declare
seek-external-validation, exec owns it, creator neither declares nor owns it. Creator's voice concern becomes a style rule inrole-creator.Two-sided bodies
A boundary body currently addresses only the roles losing the behavior, which is why the owner's half lives in its charter and drifted from it. The body carries both halves. The reader is always one role, so the headings are conditional and the reader self-selects before reading a word of prose:
## Ownreads a sentence that is false for them before working out it was addressed to someone else.summaryalready declared in KDL, not new prose to maintain.7b92339, a combined cap would squeezemodify-live-systemimmediately:live-opsis 320 words and the ops paragraph it would absorb is 51.Owner paragraphs leave the charters that hold them today, which retires the duplication behind this whole thread. Creator sheds 56 words and comes off the 400 cap it currently sits one word under at 399. Ops sheds 51.
Vocabulary
counterpartwas a hedge chosen when the field did nothing but force an evaluation case, where naming itownerwould have implied authority it did not grant. Two-sided bodies retire that hedge, since the owner section now states the ownership outright. The vocabulary comes from the bodies rather than being imposed on them:boundaryappears 4 times in the comms body and 5 in live-ops, comms already uses own, owner, and ownership 7 times and defer twice, andauthority-boundaryandhuman-communication-ownershipare existing evaluation scenario kinds.boundaryownerRejected along the way:
heldandwithheldshare a root, so the entire inversion of meaning rides on a prefix and the two headings are near-identical to scan.restrainedandencouragedscan cleanly but understate the owner side, which is exclusive ownership rather than encouragement.Remove the eval-role methods
eval-role-commsandeval-role-live-opswere the prerequisite scaffolding for this work: single-role procedures for evaluating the two cross-role concerns that are now boundaries with owners and roster-derived coverage. They are redundant on arrival and get deleted here.Fallout, measured against
9764756:internal/person/roles/ai/skills/eval-role-comms/andeval-role-live-ops/are deleted, with bothmethodlines removed from08-ai.kdl.internal/person/person_test.go:20asserts the exact method list, and line 300 asserts the AI role has methods at all. The first is configuration restated in a test and simply goes. The second should assert the rule that only the AI role may declare methods, not the fact that it currently does.internal/compose/compose_test.go:159names both methods.docs/role-methods.mduses them as its only worked example and its entire catalog list, anddocs/person-contract.mduses one in its external-package example. Both need a generic example instead.The
methodprimitive itself stays, with zero users. Retiring it is a contract change for external packages, which is out of scope here. A role having no methods is already the normal case for seven of eight roles, so nothing fails validation. If nothing has claimed it within a release or two, retire it then.Also in scope
The identity card prints a
Shared doctrineheading and lists entries underActive doctrine. With behavior-named slugs an engineer's card would read "Active doctrine: modify-live-system", which states the opposite of what it means. The card sections flip with the rename, to something like "Boundaries: modify-live-system, owned by DevOps".Evaluation scenario kinds follow their boundary names, and the coverage gate keeps deriving from the roster rather than a second list of role names.
Sequencing
PR #253 is open and green. It adds the two-sided field as
counterpart, its load-time validation, and the comms rescope to design, exec, and ops. This issue renames that field toowner. Recommend merging it first, since this work builds directly on the counterpart mechanism, and landing the rename on top keeps both diffs readable. The alternative is closing #253 and folding it in, which produces one large unreviewable change.Evaluation records move again for all eight roles. #240 still owns re-earning them and gains the renamed scenario kinds. No evaluation is run as part of this work.
Done when
boundaryreplacesmeldacross the keyword, loader, manifest, trace, packs, docs, and package contract, with the personality meld and melded color untouched.role-exec.role-creatorandrole-ops, with no doctrine lost.The AGENTS.md half is filed as
coilyco-flight-deck/agentic-os#977. It carries the local-grounding rule with the corrected trigger and the stopping condition, rewriting the existingFront-load the context you know you needsection in place, and explicitly leaves external validation here as a role-allocated boundary.Land order: #977 first or alongside, since this issue removes that half from the roster and a bundle on a seat without the AGENTS base would otherwise carry no version of the rule.
Sequencing against the issues filed since this was written
Order: #253, then this, then #255, then #256, then #257.
#255 (move prose into
data/) lands after this one. Measured overlap against9764756: #255 moves 62 entity data files and 30 of them are files this issue must edit. Two large mechanical diffs over the same set, so order matters. This one is mostly file contents, the keyword, the slugs, and the prose. #255 is purely paths. Whichever runs second rebases cheaply, but this issue's spec names paths throughout and would need respecifying if the tree reshuffles first, while #255 carries no semantics to invalidate. #255's own sketch already anticipates the rename withdata/boundary-french-fries/.#256 (min and max length per prose entry) generalizes the per-section ceiling proposed here. Do not build a bespoke cap mechanism that #256 then has to unpick. Flag for whoever takes #256: owner sections derive from paragraphs of 56 words (creator) and 51 (ops), so a minimum tuned for role bodies would trip them on arrival.
#257 (first person prose) does not apply to this work. Land in second person, matching all three existing bodies and the zero first-person pronouns currently in the roster, and let #257 sweep whole artifact classes at once if it lands. A roster with first-person charters and second-person boundaries is worse than either.
Watch item:
coilyco-flight-deck/agentic-os#959proposes injecting the acompose role instruction into the system prompt for claude and codex. If role instruction moves there, boundary delivery plausibly follows, which would touch the delivery section here. Not a blocker.Implemented on
boundary/254-primitive-rename, PR #259, mergeable.Landed on main already: #253 merged as
4ce2537, which is what #259 builds on. The PR stayed open because the merge went through a local merge and push, so I closed it against the evidence that its head is an ancestor of main.Two commits, split as the goal asked.
d09e97drenames the primitive with no semantics touched.fb94739does the slugs, the inverted third boundary, the two-sided bodies, the required owner, the charter trims, the card fix, and the method deletion.Owner is enforced, not optional. Loading rejects a boundary without one, an owner that does not exist, and an owner that declares its own boundary. Both body sections are required and each is bounded separately at 400 words. Measured: own 112 defer 234, own 111 defer 141, own 157 defer 178.
The duplication this thread opened on is gone. Content Creator falls from 399 words to 318, DevOps 262 to 252, Executive Strategist 244 to 220.
Step 5 was already done by someone else.
agentic-os#980landed the front-load rule and the principal-scoped pronouns, closing #977 and #979. I read that text on itsmainrather than assuming: it carries the claim trigger, the stopping condition, and the bounds, and correctly says nothing about external validation, which is the split this issue specified.One seam that split leaves behind is filed as
coilyco-flight-deck/agentic-os#983. The base now grants unqualified reach while a boundary narrows it for six roles, and the base gives no hint the narrowing exists.No evaluation was run and
evaluations/latestis untouched. The digest gate stays red for all eight packs, the release train stays blocked, and #240 owns it.