Skip to content

Distribution profiles: resolve overlays against a harness, re-measure both - #55

Merged
davisbuilds merged 3 commits into
mainfrom
spec/per-harness-membership
Aug 3, 2026
Merged

Distribution profiles: resolve overlays against a harness, re-measure both#55
davisbuilds merged 3 commits into
mainfrom
spec/per-harness-membership

Conversation

@davisbuilds

Copy link
Copy Markdown
Owner

Spec revisions 9 and 10, plus the matching plan revisions. Contract-only — no code changes.

Revision 9 — overlays resolve against a harness

Revisions 1–8 forbade per-harness membership because it "would change profile identity semantics". The concern was right and the conclusion was not. Fixed by separating two identities that had been conflated:

  • Profile identity = intent. Harness-independent. Resolved membership is deliberately not an input.
  • Realization identity = what landed. Already bound the harness, so resolved membership belongs here.

The mechanism is deliberately narrow: one declared rule with one trigger — the harness ships its own equivalent — declared per canonical skill with evidence, never inferred from a name match. An undeclared collision is reported, never silently suppressed, because the failure mode of guessing is losing a skill the maintainer selected.

Live justification: skill-creator is duplicated in every Codex session today. EV-NEG-06 added, scenarios 15 → 16.

Revision 10 — re-measured after #53/#54

The merges moved the Codex numbers by roughly 2× and both docs were still arguing from pre-merge figures.

2026-08-01 2026-08-02
Codex, ordinary 96% 78%
Codex, dojo 177%, 94 truncated 78%, 0
Codex, viral 111%, 19 truncated 97%, 0
Claude Code, ordinary 2.13× 2.07×
Claude Code, dojo 2.98× 2.91×

Two of the three Codex breaches were defects, not distribution problems, and were fixable without profiles. That is stated plainly rather than glossed. What survives: nothing proposed, measured, or now prevents the regression of any of it, and viral is still non-deployable at 97% against the 90% ceiling.

Claude Code is now the binding harness. The same levers moved it a few percent because none touched membership — description trimming recovered 537 chars against an 8,535-char gap. A 45-entry listing against 8,000 chars allows ~178 chars per description, while this repo's skill contract requires descriptions to carry trigger conditions. Nothing is left to trim.

Two live subjects re-checked rather than assumed

  • Cross-machine agreement had silently broken. 9 skills differed in content identity between the machines — membership unchanged, so a membership-only check would have passed. Verified identical 2026-07-31, broken by 2026-08-02, restored by an explicit standardizer sync on the mini (9 → 0 issues, confirmed independently by hashing all 32 entries on both machines). Found only because someone hashed both while checking something else. Both docs now treat it as a subject needing re-establishment at point of use.
  • microsoft-foundry is installed but disabled in Codex config. Present on disk, absent from the listing — a good live case for "the filesystem never adds an entry the probe did not list", but not a live foreign-entry observation. Task 4 must construct that fixture.

Corrections

  • Catalog count 49 → 48 (algorithmic-art retired). Fourth stale count in this document pair; now stated with its date and computed source rather than as a bare number. The plan's test was already correct — it asserts against len(skills.json), not a literal — only the prose had drifted.
  • Task 13 flagged as drafted against pre-Catalog: cut methodology from descriptions, retire algorithmic-art, stop double-listing in Codex #54 code. HARNESS_DIRS no longer contains .agents, retire_legacy_symlink now exists, and every line number in that task shifted.

No success criterion, evaluation scenario, or authority boundary changed in either revision.

Verification

  • validate_spec.py PASS, validate_plan.py PASS
  • pytest tests/ -q313 passed
  • All figures re-derived live from codex debug prompt-input and claude --debug-file, not carried forward

🤖 Generated with Claude Code

davisbuilds and others added 3 commits August 1, 2026 20:28
Revisions 1 through 8 required identical membership everywhere, on the
reasoning that per-harness membership would change profile identity semantics.
The concern was right and the conclusion was not: it is resolved by separating
two identities that had been conflated. Profile identity is intent and stays
harness-independent; realization identity is what landed and already bound the
harness. Resolved membership moves from the first to the second.

The mechanism is narrow on purpose. Not free-form per-harness membership but
one declared rule with one trigger -- the harness ships its own equivalent of a
member -- declared per skill with evidence, never inferred from a name match.
An undeclared collision is reported rather than suppressed, because the failure
mode of guessing is losing a skill the maintainer wanted.

The evidence is live rather than anticipated. Codex bundles six skills as
.system entries and Claude Code bundles a different three with no overlap, so
dojo's skill-creator is duplicated in every Codex session today. The harnesses
also differ in budget by 3-5x, in scope precedence, and in degradation mode.
Identical membership had stopped being a simplification and become a
misstatement.

SC-02 gains the distinction that anchors constrain the definition rather than
the realization, SC-11 scopes comparability to a shared harness and requires
every cross-harness difference to name what displaced the member, and EV-NEG-06
takes the scenario count to 16.
Follows spec revision 9. The structural change is in identity: profile_identity
drops resolved membership and hashes intent alone, so a member suppressed on one
harness no longer makes two harnesses look like different profiles. Membership
moves to realization_identity, which gains equivalence_identity as a sixth
field.

Task 1 gains profiles/harness-equivalences.yaml -- one entry per (skill,
harness) pair with the bundled entry and the evidence for the claim, seeded from
live observation. Task 2 gains resolve_for_harness returning realized and
suppressed sets, with an undeclared name collision returned as a collision
rather than a suppression, because guessing silently removes a skill the
maintainer selected.

Task 5's evidence carries the suppressed list so a suppressed member is
distinguishable from one the profile never selected. That distinction is the
point of declaring suppression rather than editing membership.

Task 7 is where this could have gone wrong. Membership agreement now applies
only when both sides name the same harness; across harnesses every difference
must be attributable to a suppression naming what displaced it, and an
unattributed difference is drift. Without that check "different harness" becomes
a blanket excuse hiding the divergence profiles exist to catch.

EV-NEG-06 traces to Tasks 1, 2, 5, and 7. All 13 SC and 16 EV ids trace.
…docs

Spec revision 10. The #53/#54 merges moved the Codex figures by roughly a
factor of two, and the spec and plan were still arguing from the pre-merge
numbers.

Codex now truncates nowhere: ordinary session 96% -> 78%, dojo 177% -> 78%
(95 entries -> 41), viral 111% with 19 truncated -> 97% with none. Two of the
three Codex breaches turned out to be defects rather than distribution
problems, and were fixable without profiles. That is recorded plainly rather
than glossed: what survives is that nothing proposed, measured, or now
prevents the regression of any of it, and viral remains non-deployable at 97%
against the 90% ceiling.

Claude Code is where the argument now rests. The same levers moved it from
2.13x to 2.07x, because none of them touched membership -- description
trimming recovered 537 chars against an 8,535-char gap. A 45-entry listing
against 8,000 chars allows ~178 chars per description while this repo's own
skill contract requires descriptions to carry trigger conditions.

Two live subjects re-checked rather than assumed. Cross-machine agreement had
silently broken across 9 skills since revision 9 -- membership unchanged,
content identity diverged, nothing reporting it -- and was restored by an
explicit sync on the mini; both docs now treat it as a subject needing
re-establishment, not a standing fact. microsoft-foundry is installed but
disabled, so it is no longer a live foreign-entry observation and that fixture
must be constructed.

Also: catalog count 49 -> 48 (fourth stale count in this pair, now stated with
its date and computed source), and Task 13 flagged as drafted against pre-#54
code -- HARNESS_DIRS no longer contains .agents and every line number in it
shifted.

No success criterion, evaluation scenario, or authority boundary changed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@davisbuilds
davisbuilds merged commit 0e0037a into main Aug 3, 2026
1 check passed
@davisbuilds
davisbuilds deleted the spec/per-harness-membership branch August 3, 2026 01:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant