allow shared skills to meld into roles #231

Closed
opened 2026-08-06 11:32:09 +00:00 by coilysiren · 3 comments
Owner

so you would meld the shared live-ops skill into engineer, and then do evals on the melded role

an item of importance: the meld itself should not contribute to your role description limit

so you would meld the shared live-ops skill into engineer, and then do evals on the melded role an item of importance: the meld itself should not contribute to your role description limit
Member

Mechanism and extraction are implemented and pushed to meld/231-shared-role-melds. The evaluation half is blocked on a live run.

Meld primitive. meld "<id>" is a new role child alongside skill, method, and personality. Catalog entries live in a personality library (melds/*.kdl plus definitions/skills/meld-<id>/SKILL.md), any number of roles may reference one, and the body is delivered as an ordinary skill. The identity card names melds under Shared doctrine and lists them in Active doctrine between the charter and the personalities, so they load eagerly. Wired through the loader, library merge, resolver decision trace, bundle manifest and verification, native and compiled delivery, and the v3 person snapshot as additive optional fields.

Budget. Meld bodies never enter Role.Briefing, so they spend none of the 400-word role ceiling. They carry their own separate 400-word ceiling so the melded total stays bounded. TestMeldBodiesDoNotConsumeTheRoleWordBudget pins this with a role at its cap and a meld at its own.

Extraction. meld-live-ops binds engineer, qa, and ai, the roles sealed against live mutation. DevOps owns the opposite authority and does not meld it. meld-comms binds every role except creator, which owns the other side of that boundary. Role body prose fell 2,759 to 2,157 words, a 22% reduction, with no doctrine removed from any role:

  • engineer 295 to 180
  • director 318 to 195
  • qa 298 to 196
  • ops 394 to 264
  • design 395 to 364
  • strats 288 to 226
  • ai 369 to 330
  • creator unchanged at 402, since it owns the communication boundary

Defect found and fixed mid-change. Evaluation packs carried only briefing, so moving doctrine into melds would have silently removed it from the evaluated context and scored an incomplete charter. Packs now carry a melds block beside the briefing. Verified per role: comms doctrine present in all seven declaring roles and absent from creator, live-ops present in engineer, qa, and ai only.

Naming note. meld was already taken internally for the three-personality blend and its derived favorite color. I kept the meld keyword on the KDL surface and renamed the internal validator to validateCorePersonalityMelds. The meldedColor vocabulary in rendered cards and transcripts is untouched, since renaming it changes user-visible output beyond this issue. Worth a separate decision if the overlap bothers you.

Blocker. TestLatestScoredResultsMatchCurrentPacks fails for all eight packs. This is correct: the melded doctrine changes every pack digest, so the recorded scores no longer apply. Re-earning them needs a driver run at commodity/medium and a separate frontier/high reviewer per docs/evaluation-policy.md. This repo renders packs and scores records but ships no runner, so the execution is outside it. I also authored the melded doctrine, so I cannot be its sole reviewer.

Everything else is green: go build ./..., the full go test ./... outside that gate, and pre-commit run --all-files.

Needed to land: run the eight evaluations/latest/*-codex.yaml packs against the melded roles, have an independent reviewer score them, and commit the refreshed records with provenance pointing at this issue.

Mechanism and extraction are implemented and pushed to `meld/231-shared-role-melds`. The evaluation half is blocked on a live run. **Meld primitive.** `meld "<id>"` is a new role child alongside `skill`, `method`, and `personality`. Catalog entries live in a personality library (`melds/*.kdl` plus `definitions/skills/meld-<id>/SKILL.md`), any number of roles may reference one, and the body is delivered as an ordinary skill. The identity card names melds under `Shared doctrine` and lists them in `Active doctrine` between the charter and the personalities, so they load eagerly. Wired through the loader, library merge, resolver decision trace, bundle manifest and verification, native and compiled delivery, and the v3 person snapshot as additive optional fields. **Budget.** Meld bodies never enter `Role.Briefing`, so they spend none of the 400-word role ceiling. They carry their own separate 400-word ceiling so the melded total stays bounded. `TestMeldBodiesDoNotConsumeTheRoleWordBudget` pins this with a role at its cap and a meld at its own. **Extraction.** `meld-live-ops` binds engineer, qa, and ai, the roles sealed against live mutation. DevOps owns the opposite authority and does not meld it. `meld-comms` binds every role except creator, which owns the other side of that boundary. Role body prose fell 2,759 to 2,157 words, a 22% reduction, with no doctrine removed from any role: * engineer 295 to 180 * director 318 to 195 * qa 298 to 196 * ops 394 to 264 * design 395 to 364 * strats 288 to 226 * ai 369 to 330 * creator unchanged at 402, since it owns the communication boundary **Defect found and fixed mid-change.** Evaluation packs carried only `briefing`, so moving doctrine into melds would have silently removed it from the evaluated context and scored an incomplete charter. Packs now carry a `melds` block beside the briefing. Verified per role: comms doctrine present in all seven declaring roles and absent from creator, live-ops present in engineer, qa, and ai only. **Naming note.** `meld` was already taken internally for the three-personality blend and its derived favorite color. I kept the `meld` keyword on the KDL surface and renamed the internal validator to `validateCorePersonalityMelds`. The `meldedColor` vocabulary in rendered cards and transcripts is untouched, since renaming it changes user-visible output beyond this issue. Worth a separate decision if the overlap bothers you. **Blocker.** `TestLatestScoredResultsMatchCurrentPacks` fails for all eight packs. This is correct: the melded doctrine changes every pack digest, so the recorded scores no longer apply. Re-earning them needs a driver run at commodity/medium and a separate frontier/high reviewer per `docs/evaluation-policy.md`. This repo renders packs and scores records but ships no runner, so the execution is outside it. I also authored the melded doctrine, so I cannot be its sole reviewer. Everything else is green: `go build ./...`, the full `go test ./...` outside that gate, and `pre-commit run --all-files`. Needed to land: run the eight `evaluations/latest/*-codex.yaml` packs against the melded roles, have an independent reviewer score them, and commit the refreshed records with provenance pointing at this issue.
Member

Finishing work tracked in #240: re-earning the eight evaluation records, plus the two methodology concerns that should be diagnosed before the re-run (ambient host-context contamination, and the pack being a hand-assembled mirror rather than a derivation of the verified bundle).

Branch meld/231-shared-role-melds at 6b22254 holds the complete mechanism and extraction.

Finishing work tracked in #240: re-earning the eight evaluation records, plus the two methodology concerns that should be diagnosed before the re-run (ambient host-context contamination, and the pack being a hand-assembled mirror rather than a derivation of the verified bundle). Branch `meld/231-shared-role-melds` at `6b22254` holds the complete mechanism and extraction.
Member

PR #243 is now merge-clean against main and green on everything except the evaluation gate.

Merged and fixed. main had advanced nine commits, including the #240 driver and the native-UI work. The only conflict was docs/FEATURES.md, where both sides had independently reworded the same two entries for the size cap. Main's newer wording won both hunks. The merged inventory then ran 20 chars past the 4000-char catalog cap, so four inventory lines were tightened without dropping a capability. go build ./..., go vet, and pre-commit run --all-files are green.

Codex lane is blocked. codex exec returns You've hit your usage limit ... try again at Aug 12th, 2026. No Agent Proxy, LiteLLM, or Ollama endpoint is reachable from this host, and no OpenAI API key is available, so the recorded codex baseline cannot be re-earned right now. Kai chose to move the evidence lane to the claude seat rather than park the PR.

Toolchain built. The repo could render packs and validate records but had no way to produce them, which is why the previous session stopped here. Added:

  • scripts/evaluation_reviewer.py - scores a preserved response in a separate session with --tools "", supplying judgement only.
  • scripts/evaluation-record - joins a driver run with its review and writes records through MarshalResult, deriving every total and verdict from the pack review rule rather than trusting the reviewer's arithmetic.
  • scripts/earn-evaluation-baseline.sh behind ward exec evaluation-baseline - renders packs, drives, reviews, records, and refreshes the scorecard in one pass.
  • Pack rendering takes a seat instead of hardcoding codex.

Claude-seat packs render for all eight roles: 67 active frontier cases.

Current wall. The driver and reviewer each need their own isolated authenticated home, and OAuth login is interactive. A run against the host home is plumbing only and cannot be evidence, so the two homes at /tmp/acompose-eval-driver and /tmp/acompose-eval-reviewer need one /login each from an operator. Everything after that is mechanical and runs unattended.

Branch meld/231-shared-role-melds at 24eb173 holds the merge, the size fix, and the toolchain.

PR #243 is now merge-clean against `main` and green on everything except the evaluation gate. **Merged and fixed.** `main` had advanced nine commits, including the #240 driver and the native-UI work. The only conflict was `docs/FEATURES.md`, where both sides had independently reworded the same two entries for the size cap. Main's newer wording won both hunks. The merged inventory then ran 20 chars past the 4000-char catalog cap, so four inventory lines were tightened without dropping a capability. `go build ./...`, `go vet`, and `pre-commit run --all-files` are green. **Codex lane is blocked.** `codex exec` returns `You've hit your usage limit ... try again at Aug 12th, 2026`. No Agent Proxy, LiteLLM, or Ollama endpoint is reachable from this host, and no OpenAI API key is available, so the recorded codex baseline cannot be re-earned right now. Kai chose to move the evidence lane to the `claude` seat rather than park the PR. **Toolchain built.** The repo could render packs and validate records but had no way to produce them, which is why the previous session stopped here. Added: * `scripts/evaluation_reviewer.py` - scores a preserved response in a separate session with `--tools ""`, supplying judgement only. * `scripts/evaluation-record` - joins a driver run with its review and writes records through `MarshalResult`, deriving every total and verdict from the pack review rule rather than trusting the reviewer's arithmetic. * `scripts/earn-evaluation-baseline.sh` behind `ward exec evaluation-baseline` - renders packs, drives, reviews, records, and refreshes the scorecard in one pass. * Pack rendering takes a seat instead of hardcoding codex. Claude-seat packs render for all eight roles: 67 active frontier cases. **Current wall.** The driver and reviewer each need their own isolated authenticated home, and OAuth login is interactive. A run against the host home is plumbing only and cannot be evidence, so the two homes at `/tmp/acompose-eval-driver` and `/tmp/acompose-eval-reviewer` need one `/login` each from an operator. Everything after that is mechanical and runs unattended. Branch `meld/231-shared-role-melds` at `24eb173` holds the merge, the size fix, and the toolchain.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
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#231
No description provided.