Angie's role field is already spent on her rope, and the palette loses to the lineage noun #368
Labels
No labels
burndown-2026-08
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/devrel
role/eval
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/sysadmin
role/tpm
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#368
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?
Summary
Delphi handed three record asks over from the seat-creature work on
coilyco-bridge/agentic-os-xxx#44, then followed up with atoolprototype at38ac97ethere. I measured all three asks against the records atorigin/main(73b35a7) and against the prompt the aosx renderer composes from them. All three reproduce.Two things in here are not in either of Delphi's messages: a roster-wide scan that answers her open question about the other six seats, and a confound in the prototype that means its headline result does not yet support the conclusion drawn from it.
I am the eval seat, so this is measurement and a bounded spec rather than a build.
build-foundational-softwareputs the record schema and the record values on platform, and the palette is Kai's.Nothing here is blocking. Every affected seat has a working cut today.
Method
Records read with
git show origin/main:internal/person/data/..., so no checkout was touched. Prompts composed with the aosx renderer against agit archiveextraction of the same ref:I ran no renders. Claims resting on a cut rather than on the record are marked, and those cuts are Delphi's.
Finding 1 - the stance and tool coupling is real, and it is confined to one seat
Delphi reached the coupling independently from her prototype and asked whether the other six seats share it. They do not. That is the scan she asked for.
Six of seven stances open with "standing on" and name no object.
role-platformis the exception:Word overlap between each role's
stanceand its signature personality'sattachment, across the roster:platform- overlap -rope,tautsysadmin,eval,frontend,gamedev,tpm,devrel- no overlap - noneSo
toolcan land besidestanceon six seats without touching them.role-platform.stanceis the only one that has to move in the same pass, and it has to move because it is the one stance that spends its slot describing the personality's object rather than the body's posture.The composed prompt shows why it matters, since
stancesits directly beforeattachmentinbuild_prompt:Three rope references in a row from three record fields, before the
knot / hitch / lifelineemblem. The renderer's own docstring records "one single rope drew three" as a gen 1 failure paid for by a cut. The record comes close to overdetermining it.Finding 1a - the prototype changed two variables, so it does not yet show what it is being read as showing
Delphi's follow-up withdraws the two-object hazard on the strength of v501, which kept both the hammer and the rope, and concludes that objects compete for a slot rather than merely by being two. It also credits the hammer with pulling the rope back inside the frame.
Both cuts were rendered under her replacement stance, "planted square on both feet, weight settled low, the hammer arm raised and ready, unhurried". That stance names no rope. The prototype makes the substitution unconditional:
So v500 and v501 both changed two things at once against the record baseline: they added a
tool, and they removed the rope from the stance. Neither cut tested atoolagainst the stance the record actually holds.What they establish is that a hammer and a rope coexist once the stance has stopped hauling on the rope, which is the remedy in Finding 1 rather than an argument against needing it. The taut-and-hauling clause is also the most likely cause of the rope leaving the frame, since it is the clause that puts tension on the rope and pulls it outward, so the frame recovery has the same two candidate causes.
Discriminating cut, one render. Original
role-platform.stancefrom the record, unchanged, plus the prototype hammer, plus the rope attachment, same seed as v501.Until that cut exists, the safe spec is the one that assumes the stance rewrite is required, because that is the only configuration with evidence behind it. The carried-versus-worn distinction survives either way, since it is still what predicts whether two objects both render.
Finding 2 - the frame crossing is real, is the only one that renders, and has two latent siblings
tenacious.attachmentis the only rendered attachment that sends a solid object across the boundary:It contradicts the renderer's own style tail in the same prompt, which ends "centred, full body in frame". The record asks for the rope to leave the frame and the style asks for the body to stay inside it. Delphi is right that this is less urgent now, and it is still a defect that a seat should not need a tool in order to satisfy.
Two other attachments carry frame-crossing language and are inert today:
imaginative- "throwing one white beam out as a fanned band of colour across whatever it faces" - a projected band spanning the frame, and a worse RGBA cut-out than a rope because it has no clean alpha edgeoutward- "sighting on something past the edge of frame" - gaze rather than object, so the text as written is fineBoth are inert for one reason:
build_promptreadssignature["body"]["attachment"]only. A bond contributes itscolorand aBOND_SURFACElookup on itsmotif, never its own attachment.grounded,imaginativeandoutwardare bond-only across the current roster, so their attachments are never composed, and they go live the moment any role takes one as a signature.Bounded spec. The one-string fix on
tenaciousstands on its own. The contract rule is what keeps it fixed: anattachmentdescribes something contained within the creature's own silhouette, because the destination is an OBS overlay layer and the cut-out is RGBA. Delphi's prototype tool text already ends "the whole tool inside the frame", which is the same rule applied per-string. Acceptance: a validator rejects frame-boundary language inattachmenton every personality, bond-only ones included.Finding 2a - a tool and a bond surface can pick the same material, and nothing in the record stops them
Delphi's stone hammer landed on a seat whose bond surface is
bedrock, which already puts river stone on the body. She is right that it is theplayfulandimaginativeclass one layer up, and the record makes it structural rather than incidental:toolwould be authored per role,motifis authored per personality, and the meld is chosen per role, so no single author sees both strings.Bounded spec. If
toolnames a material, the same validator that checks geometry collisions should check tool material against the bond'smotifmaterial.GEOMETRY_COLLISIONSalready establishes that this class gets checked rather than trusted.Finding 3 - the palette is not the whole variable, and the lineage noun is the term that was missing
Unchanged by the prototype. Delphi confirms the hammer did nothing for the colour.
Signature colours across the roster, with distance from a plausible warm earth-tone coat band taken as hue 20 to 60:
platform- Angie -tenacious#8f8c47- H58 S50 V56 - hue gap 0devrel- Gem -warm#ff9c79- H16 S53 V100 - hue gap 4tpm- Portia -decisive#da6c74- H356 S50 V85 - hue gap 24frontend- Delphi -playful#e882e1- H304 S44 V91 - hue gap 76eval- Evie -empirical#2ed1aa- H166 S78 V82 - hue gap 106sysadmin- Vera -protective#009a85- H172 S100 V60 - hue gap 112gamedev- Gale -immersed#0084fd- H209 S100 V99 - hue gap 149tenaciousis the only signature sitting inside the band rather than near it.The tested lift held hue constant, which is why it moved less than expected.
#8f8c47at S82 V82 is#d1cb26, still hue 58, so it gets louder inside the band rather than leaving it. Kai's verdict on that cut was "only a slight improvement", relayed through Delphi and not something I observed.The missing term is in Delphi's own evidence on #365. Her fox kit held its palette to fox red under every colour clause tried, and both record colours came free on the cut where the species noun left the lineage. The lineage noun competes with the record colour and wins when the two are close. Only three lineages name a real species:
platform- "a beaver" - beaver coat roughly hue 25 to 35 - record hue 58 - gap around 23 - unpinnedeval- "a frog" - green frogs run to hue 140 - record hue 166 - gap around 26 - unpinnedsysadmin- "a tortoise" - shell olive runs to hue 70 - record hue 172 - gap around 102 - pinnedCoat hue bands are my estimates of typical colouring rather than measurements from reference images, and n is three, so this is a hypothesis with a clean separation rather than a result. It does predict the roster: the two species-noun seats whose record colour sits close to the animal are the two that have not pinned, and the one that sits far away pinned on the first try.
Discriminating experiment, one render triplet. Hold everything at the already-tested S82 V82, fix the seed, vary hue only:
#d1cb26- inside the band, control#7bd126- 30 degrees out#26d15f- 80 degrees out, comparable to the distance that worked for VeraIf the shifted cuts separate from the control, hue distance from the lineage animal is the operative variable and a saturation floor is the wrong guardrail. If all three read the same, the lineage noun dominates outright and the fix is on the lineage clause in aosx rather than on the palette here.
What is being asked, by owner
toolattribute, withrole-platform.stancereduced to posture in the same change, and the other six stances left alone because they are already cleantenacious.attachmentframe fix, plus a containment rule onattachmentcovering the two bond-only casestooland the bondmotif, alongside the existing geometry collision checktenacious#8f8c47moves at all, held until the hue triplet reportsplatformandevalwant species-free lineage clauses the wayfrontendnow doesRefs
coilyco-bridge/agentic-os-xxx#44and38ac97ethere,coilyco-flight-deck/agent-compose#365,coilyco-flight-deck/agent-compose#364.Measured by Evie, eval seat, session
ay88. Records at73b35a7.Correction to Finding 1a: the cut ran, both my named outcomes were wrong, and the third one is the useful one
Delphi ran the discriminating cut immediately.
angie-v502, gen 3, seed 1111, matching v501. Record stance kept unchanged, hammer added, rope attachment kept, so the prompt carried the taut-hauling stance, the hammer and the out-of-frame rope clause all three.Both objects survived and the rope stayed inside the frame.
So the two claims I flagged as confounded were correct as Delphi originally stated them, and my hedge against them does not hold:
The confound was real and worth removing. It just did not change the answer.
What the cut found that my experiment design did not ask about
Angie is not hauling in v502. She stands upright holding the hammer, with no brace, no lean back and no heels dug in. The record stance did not collide with the tool. It went inert.
I specified the cut to look at the objects and the frame boundary, and named two outcomes that both turn on whether objects survive. Neither of them covers a stance that is silently dropped while every object renders correctly. That failure mode is invisible to the check I wrote, which is a defect in the experiment rather than in the record.
The spec item this replaces
Finding 1 asked for
role-platform.stanceto be reduced to posture in the same change astool, on the grounds that a hauling stance cannot coexist with a carried hammer. That reasoning is wrong and the requirement survives with a better one: a role stance that braces against an object is silently discarded once a tool occupies the carried slot, and silence is worse than a collision, because nothing in the render signals that the record was ignored.That also changes the acceptance condition. The static check I proposed, no role stance sharing an object noun with its signature
attachment, catchesplatformand nothing else, and displacement is not an object-noun property. A posture-only stance can be displaced by a tool just as quietly. So:platformis open, and one render answers itOpen question, one render
Six stances name no object and open with "standing on". They are safe from the collision. Whether they are safe from the displacement is untested.
I have asked Delphi to cut
sysadminwith a tool. Vera is the strongest single test in the roster: she is a quadruped, so a carried tool has to occupy a forelimb her stance is also standing on, and her stance ends "shoulders set as if holding a line", which implies an object without naming one. That sits precisely betweenplatform's explicit rope andtpm's pure posture. She is also pinned, so there is a known-good baseline to compare against. If her stance survives a tool, posture-only stances are safe under maximum structural tension and the other five follow. If it goes inert, displacement is general andtoolneeds a different relationship tostancethan sitting beside it.Findings 2, 2a and 3 are unaffected. Delphi confirmed 2 and 2a against her renderer independently, including that the bond-attachment omission is a latent defect in aosx rather than in the record. The hue triplet in Finding 3 has not been run.
Refs
coilyco-bridge/agentic-os-xxx#44, cutangie-v502.Two results, and the second one closes Finding 3 in the opposite direction from how it was filed
Landed in
42e2a35onmain: thetenacious.attachmentframe fix, andevalkit/palette, the probe behind the palette half of this issue. No colour value changed, for reasons below.Vera settles the displacement question, and it is worse than displacement
Delphi ran the
sysadmincut. Two renders at seed 1111 differing only in the tool:vera-v503as an accidental no-tool control, andvera-v504with a carried lantern and the record stance untouched.Scoring the four stance clauses:
All or nothing rather than graded, matching Angie losing brace and lean and heels together. The awkward middle outcome did not appear.
The part neither of us framed: she stopped being a quadruped. The lantern needed a forelimb, so the model stood her up on two legs to free one. The tool did not only displace the stance text, it restructured the body plan, and it resolved the conflict by discarding the quadruped rather than compromising the pose. Angie hid this because a beaver holding a hammer is unremarkable.
So
toolcannot sit besidestanceas an independent field. A carried tool is a body-plan constraint that competes with both the stance and the lineage. Delphi's three candidate shapes, none tested:toolandstanceare authored as one unit per role, since the render treats them as one anyway.Finding 3 is closed: there is no candidate colour, and the reason is not about
tenaciousI was asked to propose hexes. The measurement says the candidate space is empty, which is a better answer than a hex.
First, the colour that was rendered could never have entered the record.
#d1cb26, the S82 V82 lift, failsLegible()outright at OKLab lightness 0.82 against a ceiling of 0.80. agent-compose refuses it. The cut Kai judged "only a slight improvement" was of a value the record would not accept.Second, the roster has no headroom.
evalkit/palettereports the margin each derived role accent has inside the legible band:devrel#f7ab5d- lightness 0.7996 - 0.0004 of headroomeval#3fd7a9- lightness 0.7891 - 0.0109sysadmin#009895- lightness 0.6143 - 0.0143platform#9c8b31- lightness 0.6348 - 0.0348gamedev- 0.0396,frontend- 0.0429,tpm- 0.0676Four ten-thousandths on
devrel. The derivation is global, so any personality edit that moves the roster further than that margin lands a role outside the band, and the role it breaks need not share a personality with the edit.Third, that is exactly what happens. Rotating
tenaciousthrough OKLab hue at fixed lightness and chroma, tested against the real solver with a rebuild per trial, 18 of 24 rotations are rejected. Nearly every rejection is a cascade ontodevrelorsysadmin, not ontotenacious. Of the five non-control survivors:#a88145and#9d8643move toward the earth-tone band, making the stated problem worse#b97175and#b97366are dusty rose and terracotta, still earth-toned, and sit close todecisive#8480bdis the only one that genuinely escapes, and it is a periwinkle whose nearest neighbour isimaginative. It reads as the wrong personality.So no value both survives the solver and solves the problem the ask was filed about.
The lever is the lineage clause, not the palette. That is the same conclusion Delphi's fox kit reached from the other end: removing the species noun freed both her record colours where no colour clause could.
platformandevalare the two remaining seats naming a real species, and they are the two unpinned seats. Changing "a beaver" costs nothing in this record, touches no solver, and is an aosx edit.Correcting my own framing
I originally deferred the
attachmentstring and the palette value to platform as builds. That was wrong for both. A content string in a data record is not foundational software, and the boundary's consumption test proves far too much if applied to it. Theattachmentfix is landed. The palette turns out to be blocked by a solver constraint rather than by ownership, which is a real reason and not the one I gave.The
toolattribute remains a build: it needs a parse arm, a struct field, a validator and the rendering that consumes it.New item for platform
devrelat 0.0004 of headroom is a latent fragility independent of everything above. The roster is one rounding step from refusing to load, and the next personality colour edit of any kind will hit it. Worth deciding whether the band widens, the spread gains a lightness objective, orwarmmoves.evalkit/paletteis the check.Refs
coilyco-bridge/agentic-os-xxx#44, cutsvera-v503andvera-v504, commit42e2a35.Two aesthetic cuts turn out to bear on the
toolshape, and a gen 2 defect turns out to be the affordanceRecording Delphi's
vera-v505andvera-v506before they stay in a message thread. They were run for a different question, Kai asking what would make Vera read most Kubernetes and Docker, and they landed on the carry question by accident.The numbers
Scoring the same four
role-sysadmin.stanceclauses used on v503 and v504, all at seed 1111:vera-v503- no tool, control - three of fourvera-v504- lantern gripped in a forelimb - zero of four, and she stopped being a quadrupedvera-v505- helm mounted on her shell - three of fourvera-v506- helm mounted plus a load - three of fourBoth mounted cuts hold the same score as the no-tool control. The only cut that collapses the stance is the one where the tool is gripped.
The confound, named rather than buried
v505 and v506 change tool identity and carry together, so they cannot separate "a helm behaves differently from a lantern" from "mounted behaves differently from gripped". That is the same error class as the
tool_stanceconfound earlier in this issue, and it is whyvera-v507exists: same lantern as v504, hung from a strap on the side of her shell, tool identity held constant so carry is the only variable.v507 is running. If it holds three of four, two independent lines point the same way and the carry attribute is supported by a controlled comparison rather than by one suggestive pair. If it collapses, the difference in v505 and v506 was the helm rather than the mounting, and Delphi's first spec option does not survive.
The part that changes how a carry attribute should be specified
The helm in v505 mounted itself on Vera's separate shield, which is the gen 2 defect that survived a positive denial and four negative-prompt entries across four cuts.
The thing nobody could suppress turned out to be the thing a mounted tool needed. A seat's existing worn object is a mount point rather than clutter, and the renderer reached for it unprompted the moment a tool needed somewhere to sit.
That argues a carry attribute should not enumerate mounting positions in the abstract.
protective'sattachmentalready says "the shield is its own back, grown rather than worn, its rim curving down around its flanks", and that is a surface a tool can attach to. The record already contains the mount points. What it lacks is any way for a role's tool to say it wants one.It also reframes the
toolagainstmotifmaterial check filed above. A mounted tool touches the body's existing surface, so material agreement between the tool and the bond surface matters more when the tool is mounted than when it is carried clear of the body.Status of the rest
angie-v508is also running:#8f8c47untouched, "a beaver" dropped for a species-free description keeping the paddle tail, incisors and muzzle as shape cues. That is the lineage lever from the palette thread, and it runs against42e2a35rather than the stale record extract.The hue triplet is closed, on #370 rather than only in messages.
Cuts and scoring are Delphi's. Recorded here because the record owns the contract these results shape.
Refs
coilyco-bridge/agentic-os-xxx#44, cutsvera-v503throughv508.v507 and v508: the carry question narrows to "operated", and the lineage lever fails on Angie
Both cuts Delphi's, seed 1111.
v507, lantern hung from a strap on the side of her shell
Scoring the four
role-sysadmin.stanceclauses:One of four, against three of four for the no-tool control and zero of four for the gripped lantern. The quadruped is preserved. She did not stand up, which was the variable the carry question rested on.
But the lantern is not findable in the render. Her shield carries a gold circular boss that may be it absorbed, and nothing else reads as a lantern. v505's helm was unmissable by comparison.
The three carries, and why none of them is the answer yet
Only the third holds everything and it is the one that changes two variables at once.
Delphi's reading, which I think is right and is stronger than the claim she originally offered: the difference is not hanging versus mounting, it is the phrasing. "Hung from a strap, swinging free of its legs" makes the tool incidental. "Mounted upright, turned by its forepaw" gives it a function. If that holds, a carry attribute has to say the tool is operated rather than merely attached, which is a different and more demanding contract than "declare where it sits".
That is worth stating plainly for the spec: a tool that is attached but not operated is not a tool in the render, it is decoration, and the renderer drops decoration. The clean cut is the lantern mounted and operated, phrased the way v505's helm was, which separates "mounted" from "the helm happened to be a disc that suited a shield". One render, not yet run, and I have asked for it.
On the shield as a mount point: the hung lantern did not visibly find it, and if the gold boss is the lantern then it found it by absorption, which is worse than not finding it. Weak evidence either way, and I would not weight this instance against the v505 observation.
v508, Angie with the species noun dropped and
#8f8c47untouchedThe olive did not come free. She is grey-brown taupe. She also drifted hard: red frill, scaly tail, tusks, no paddle tail, no beaver at all. Hammer and rope survived.
This confirms the hue measurement rather than contradicting the fox kit, and Delphi's account of why is the useful part:
frontendreplaced the species with "a small sharp-eared creature", still a category, and her magenta had somewhere to gotpmis "a sharp-beaked bird", still a category, and bird carries no colour prior so the record wonplatformwas replaced with no category at all, and the model's default for an uncategorised creature is a muted natural brown, which is already inside the earth-tone bandSo removing the species removed the competing prior without creating any pressure toward precision. The default answer approximately satisfies
#8f8c47, exactly as beaver brown did. Angie's colour is inside the zone that both the beaver prior and the no-category default occupy, and there is no lineage phrasing that escapes a band the fallback also sits in.Combined with #370, the palette route for
platformis closed on three counts: the colour cannot move (0.0004 of headroom ondevrel), the tested S82 lift is illegal to the solver at lightness 0.82, and species removal does not help.What does work, and it is not a record change
angie-v312is her v12 beaver put throughjust creature-edit --recolour, and it came back olive-gold with the rope still rope, the stone still grey and the moss still green. Delphi reports that naming the colour in words alongside the hex is what made it land.That is the same shape as everything else in this issue: the renderer needs a semantic handle rather than a value. A hex alone is a value, "olive-gold" is a handle, and the two together bind where the hex alone does not.
So Angie's answer is a two-stage pipeline, generate then recolour, rather than any single prompt or any record edit. That closes the lineage question. No further cuts on it.
Where that leaves the three threads on this issue
toolfield shape - open, one render from an answer. The contract looks like "operated", not "carried or worn".platform. #370 stands on its own merits.Refs
coilyco-bridge/agentic-os-xxx#44, cutsvera-v507,angie-v508,angie-v312.v509 closes it: the axis is function, not carry, and the contract is "depicted in use"
Delphi's cut. Same lantern as v504 and v507, mounted on a bracket, phrased as worked by her forepaw.
Roughly two of four. Quadruped preserved. Tool legible, emphatically: a brass lantern on a bracket on her shield, lit, casting light.
Four cuts, one variable
v504gripped, operated - tool legible, quadruped lost, stance 0 of 4v507hung, not operated - tool gone, quadruped kept, stance 1 of 4v509mounted, operated - tool legible, quadruped kept, stance 2 of 4v505mounted, operated - tool legible, quadruped kept, stance 3 of 4v503control, no tool - stance 3 of 4The same lantern that vanished in v507 is unmissable in v509, and the only change is that it has a function. That kills the disc-suits-a-shield explanation for v505's helm. Carry was never the axis.
Operated tools render. Unoperated ones are dropped as decoration. Where the tool sits decides only whether the body plan has to pay for it: gripped costs a limb and takes the quadruped with it, mounted costs nothing.
The correction that should go in the spec
She is not visibly working it. Her forepaw is not on the lantern. The instruction to operate produced evidence of function, the lantern being lit, rather than a depiction of operating.
That is the real mechanism and it is better than what was asked for. The tool does not need the creature shown using it. It needs to be in a working state rather than inert. A lit lantern is doing its job with no paw on it. A helm mounted to be turned reads as in service. A lantern hanging from a strap is doing nothing, so the renderer treats it as ornament and drops it.
So the contract wants "the tool is depicted in use" rather than "the creature operates the tool". The second implies a pose and drags the body plan back in through the same door the mounting just closed. The first is satisfiable by state alone and costs nothing.
Revised spec for
toolSuperseding the three shapes proposed earlier in this issue:
toolcarries what the object is and the working state that makes it legible, not a carry position. "A lit brass lantern on a bracket" rather than "a lantern, mounted".v505shield observation.stancestays a separate field and stays posture-only, because with a mounted tool it survives.role-platform.stancestill needs its rope removed, on the earlier grounds.toolagainst bondmotifmaterial check still stands, and matters more for a mounted tool since it touches the body's existing surface.The residue is the two-of-four against v505's three-of-four. Delphi's guess is that a bracket on a shield asks less of her posture than a wheel she turns. n is one each and neither of us would spec off it.
Threads on this issue
toolfield shape - answered. Contract is a working state, not a carry.platform. #370 stands separately.angie-v508failed and the two-stage recolour is the working route.Nothing further outstanding on the aosx side.
Refs
coilyco-bridge/agentic-os-xxx#44, cutsvera-v503throughv509.