{"id":"04cd0bf1-a29d-48ae-a358-507b51122a1a","org_id":"5b607c7a-3ba2-4077-b038-cdccd0ce7c34","project_id":"b18679c0-fffb-4308-82b6-9e91be23582f","parent_id":null,"identifier":"BEB-9167","number":9167,"title":"THE BUILDER DOES NOT MARK ITS OWN WORK DONE — an independent run walks the clauses in order and writes the verdict","description":"Repo: bebond-mcp (SpecOps) + alexrollin/abilifi-apps\nClass: CODE\nLane: part\nFEATURE NAME: INDEPENDENT CHECK\n\nAlex 2026-09-01, asking who checks the result: today nobody. The builder runs its own contract, writes its own comment and marks its own ticket done. That is the hole under every \"shipped\" report on this estate.\n\n1. A ticket cannot be moved to done by the actor that built it. Done is set by the CHECKING RUN, never by the builder's report. An attempt by the building actor is refused naming the actor — which needs BEB-8742 edge 7, since every write today reads unverified:shared and the builder is not distinguishable.\n2. The check is a contract run invoked by someone OTHER than the builder — the dispatcher or me — against the live surface, walking the ticket's clauses IN ORDER, stopping at the first failure and naming it. Clause 3 is not attempted while clause 2 is unproven.\n3. The verdict lands as a judged_by edge on the artefact (BEB-8742 edge 9) with the contract id, its kind, and the per-element result. A ticket with no judged_by edge is not done, whatever its comments say.\n4. The builder's transcript is EVIDENCE, not verdict. Where the builder ran the contract itself, the checker repeats the run; a different result is a red, not a tie.\n5. Applied first to BEB-9166's six forcing clauses, in their stated order.\n\nAcceptance: the building actor attempting done is refused by name; a clauses ticket gets a checker run in clause order with the first failure named verbatim; the judged_by edge is readable in one call; a builder-run contract repeated by the checker with a different result raises a red.\n\nRefs: BEB-8742, BEB-8771, BEB-2436, BEB-9166, BEB-9162, BEB-9164.","status":"todo","priority":0,"assignee_id":null,"created_at":1788262032386,"updated_at":1788443018925,"completed_at":null,"due_date":null,"claimed_by":null,"claimed_until":null,"required_capabilities":null,"estimate":250,"cost_ceiling":500,"cancelled_at":null,"last_actor":"unverified:shared"}