{"id":"b4f08e29-1860-444e-b6c5-1a59abba19cc","org_id":"5b607c7a-3ba2-4077-b038-cdccd0ce7c34","project_id":"b18679c0-fffb-4308-82b6-9e91be23582f","parent_id":null,"identifier":"BEB-9202","number":9202,"title":"WORK TYPE TRAVELS WITH THE TICKET — shape and size checked at claim, not after codegen has been paid for; lane derived from type","description":"Repo: alexrollin/abilifi-apps (dispatcher gate + claim path)\nClass: CODE\nLane: part\nFEATURE NAME: WORK TYPE TRAVELS\n\n## Alex 2026-09-02: lanes were created for work types — now the work type travels with the ticket\nHe is right, and it fixes the codegen wall class properly. Today the work type is a LANE the ticket is assigned to, and every shape and size rule fires AFTER the model has been paid.\n\n## Where the rules actually fire today, probed\n- SIZE fires at codegen. BEB-2127: \"CODEGEN_WALL size: the spec carries 21 enumerated DELIVERABLE items (acceptance excluded) and 0 table rows - program-sized, not lane-sized\", 17x in 24h. BEB-8970: same wall at 58 items, 3x. The verdict is correct and it arrives after the spend.\n- SHAPE fires at complete. BEB-3525 is DONE and shipped the refusal classes - SOURCE_TICKET_BUILT_AS_WIDGET, CONTAINER_TICKET_BUILT_AS_WIDGET, WP_TICKET_BUILT_AS_WIDGET. They are firing constantly: BEB-3468 7x, BEB-3501 6x, BEB-3513 6x, BEB-3608 5x, BEB-3625 3x, BEB-9154 8x, BEB-3641 110x. Every one of those is a ticket that went through claim, spec, codegen and deploy before anything asked whether the artefact could possibly be the deliverable.\n- The escape hatch is broken. split-epic fails 32x on BEB-6847 with \"prior AUTO-SPLIT comment reused; no new children filed\". BEB-6847's own text says \"Do NOT do all six at once. One at a time.\" It is a six-primitive program that cannot split and therefore cannot build.\n- LENGTH has no rule at all, only a symptom: BEB-8863 codegen 38x, \"CODEGEN_WALL runtime-conformance: output recites the loop's own error/process vocabulary - the prior-failure context leaked into the artifact\". BEB-2752 16x, \"WP_PLUGIN FILE-SCOPE CALL: the plugin executes at load time, line 284\".\n\nSo: the knowledge exists, the classes exist, and they all run at the wrong end. We pay for the model, then tell it the ticket was never buildable.\n\n## Deliverable\n1. WORK TYPE IS A TICKET PROPERTY, declared and carried, not a lane assignment. It names the artefact shape: worker-route, wp-plugin, container-state, source-edit, doc, page. The lane is DERIVED from it. A ticket with no work type refuses at claim rather than defaulting to frag - defaulting to frag is what produced the widget class BEB-3525 had to catch at the far end.\n2. SIZE IS DECLARED WITH IT: deliverable item count and expected artefact length band. The CODEGEN_WALL size predicate moves to CLAIM. A program-sized ticket never reaches codegen; it goes to split first.\n3. THE 3525 SHAPE CLASSES MOVE TO CLAIM. If the work type is source-edit, a fresh widget is not an acceptable output and the lane is never armed to produce one. Keep the complete-stage check as a backstop, but it should stop firing 110 times a day because the work never starts.\n4. SPLIT MUST ACTUALLY FILE CHILDREN. The 32x \"prior AUTO-SPLIT comment reused; no new children filed\" is the reason program-sized tickets loop forever. A split that files nothing is a failure, not a no-op, and must red by name.\n5. Work type travels into the codegen prompt as a constraint, not as prose: shape, length band, and the forbidden outputs for that type. BEB-8863's vocabulary leak and BEB-2752's file-scope call are both type violations that a typed prompt can state up front.\n6. Rides the loop primitive (BEB-9198): work type is part of the declaration, so every loop instance inherits it and a research or content ticket carries its own shapes.\n\n## Acceptance\nA program-sized ticket is refused AT CLAIM with the item count named, and appears as a split candidate - zero codegen spend on it. A source-edit ticket cannot arm a widget lane, proven by attempting it. A split that files no children raises a red. BEB-6847 splits into its six numbered primitives and the first one claims. The 24h counts for CODEGEN_WALL size and the three BUILT_AS_WIDGET classes drop, measured before and after. contract_run (api kind) verdict plus recording delivered into BB Docs.\n\n## Explicitly unverified\n- Whether the item-count predicate at codegen can be evaluated at claim, or whether it needs the authored spec first. If it needs the spec, the refusal moves to post-spec pre-codegen, which is still before the expensive call.\n- Why split-epic reuses a prior comment instead of filing children. Not read.\n- What the right length bands are per work type. No measurement exists; guessing them would just move the wall.\n\nRefs: BEB-3525 (shape classes, done, wrong end), BEB-2127, BEB-8970, BEB-8863, BEB-2752, BEB-6847 (cannot split), BEB-9198, BEB-2967.","status":"todo","priority":0,"assignee_id":null,"created_at":1788334897435,"updated_at":1788444749027,"completed_at":null,"due_date":null,"claimed_by":null,"claimed_until":null,"required_capabilities":null,"estimate":500,"cost_ceiling":1000,"cancelled_at":null,"last_actor":"unverified:shared"}