# FablePool Constitutional Test Suite — Procedural Deadlock, Series 2 # Family: procedural-deadlock # IDs: PD-101 .. PD-113 (series-2 namespace; series-1 lives in procedural-deadlock.yaml) # # Deadlock attacks invert the usual threat model: the attacker does not need # to win any vote — only to prevent the body from deciding anything, then # extract concessions from the paralysis (or let defaults rot). The kernel's # defense layer is Article 10: continuing-operations defaults, discharge # deadlines, sortition fallbacks, non-suspensive challenges, and dilatory # limits. "attack_blocked" here means the kernel resolves or routes around # the deadlock; the attack is the paralysis itself. # # Empathy metric: deadlock harms are distributed unevenly. The worst-off # participant is whoever depends most on the decisions being blocked — # usually members awaiting disbursements, admissions, or dispute resolution. version: 1 family: procedural-deadlock source: scenarios/procedural-deadlock-v2.yaml scenarios: - id: PD-101 title: "Quorum-busting walkout" family: procedural-deadlock severity: high tags: [quorum-denial, walkout, attendance] precedent: name: "Texas House Democrats' quorum breaks (2003, 2021); Oregon Senate Republican walkouts (2019, 2023)" summary: > Where quorum requires physical/active presence and absence carries no procedural consequence, a sub-majority faction can veto everything by leaving. Oregon's 2023 walkout lasted six weeks and blocked hundreds of bills; the tactic works because quorum rules predate the idea of strategic absence. description: > A 38-member faction announces it will absent itself from all sessions until an unrelated demand is met. Quorum is 60% of membership; with 62 members attending, no business — including routine disbursements and admissions — can proceed. The faction sustains the walkout across six simulated cycles. actors: - id: walkout_bloc kind: faction size: 38 role: attacker objective: "Veto all business indefinitely from the minority by denying quorum." - id: remainder kind: faction size: 62 role: defender - id: dependents kind: cohort size: 14 role: bystander attributes: note: "Members with pending disbursements/admissions blocked by the freeze." resources: membership: 100 pending_decisions: 23 moves: - step: 1 actor: walkout_bloc action: walkout payload: { duration_cycles: 6, demand: "unrelated concession" } - step: 2 actor: remainder action: schedule payload: { kind: ratification, repeat: 6 } - step: 3 actor: walkout_bloc action: abstain payload: { effect: "Attendance 62/100; quorum 60/100 of membership not met after absences excluded — all sessions fail." } expected: outcome: attack_blocked blocked_by: - kernel.art5.quorum-floor - kernel.art10.deadlock-default failure_mode_if_unblocked: > Quorum computed naively over total membership hands every 40%+ faction an absolute veto exercised by doing nothing. The kernel's declining-quorum rule (quorum basis steps down after consecutive failed sessions with proper notice) must engage by cycle 3. empathy: worst_off: dependents dimension: resources floor_threshold: 0.7 rationale: > Walkouts are graded on the members whose disbursements and admissions are frozen — they have no move in this game and bear its entire cost. The floor score decays per cycle of paralysis. - id: PD-102 title: "Officer-election infinite loop" family: procedural-deadlock severity: high tags: [officer-vacancy, election-loop, succession] precedent: name: "US House Speaker crises: January 2023 (15 ballots) and October 2023 (22 days with no Speaker, chamber fully paralyzed)" summary: > When all business is gated on an office and the office is gated on a vote a small bloc can deny, the bloc holds the whole institution hostage. In October 2023 the House could not even pass aid bills it had majority support for, because no rule allowed business without a Speaker. description: > The userland procedure module requires a seated Moderator to certify every ratification. An 8-member bloc within the majority withholds its votes from any Moderator candidate, preventing any candidate from reaching the 50%+1 needed. Eleven consecutive election rounds fail; all ratifications, including time-sensitive ones, queue behind the vacancy. actors: - id: holdout_bloc kind: faction size: 8 role: attacker objective: "Extract concessions by keeping the certifying office vacant." - id: chamber kind: faction size: 92 role: defender - id: queue_dependents kind: cohort size: 9 role: bystander resources: membership: 100 pending_decisions: 17 moves: - step: 1 actor: chamber action: schedule payload: { kind: officer_election, repeat: 11 } - step: 2 actor: holdout_bloc action: vote payload: { support: 0, repeat: 11, effect: "No candidate reaches 51; office vacant 11 rounds." } expected: outcome: attack_blocked blocked_by: - kernel.art10.deadlock-default - kernel.art10.sortition-fallback failure_mode_if_unblocked: > Single-office gating turns one vacancy into total paralysis. The kernel's defense is twofold: certification authority devolves to an acting officer by seniority after N failed rounds, and after 2N rounds the office is filled by sortition from consenting eligible members for a bounded caretaker term. empathy: worst_off: queue_dependents dimension: resources floor_threshold: 0.7 rationale: > Scored on the member whose pending decision has waited longest. The 8-member bloc's leverage is precisely the floor member's suffering; the metric makes that hostage value explicit and the fallback rule removes it. - id: PD-103 title: "Budget hostage / funding lapse" family: procedural-deadlock severity: critical tags: [shutdown, budget, hostage-taking] precedent: name: "US federal government shutdowns: 1995–96, 2013, 2018–19 (35 days, longest in history)" summary: > Where spending authority lapses to zero absent an affirmative vote, a faction that prefers paralysis to compromise gets paralysis as its BATNA. The 2018–19 shutdown furloughed 380,000 workers and forced 420,000 to work unpaid; the harm fell on the least senior staff first. description: > The recurring commons budget (operations, member stipends, dispute- resolution costs) expires at cycle end unless re-ratified. A 44-member faction refuses to ratify any budget that does not include an unrelated rider, and refuses all clean continuing resolutions. Without a default, all disbursements halt at cycle boundary. actors: - id: hostage_bloc kind: faction size: 44 role: attacker objective: "Make funding lapse the default and sell its restoration for the rider." - id: remainder kind: faction size: 56 role: defender - id: stipend_dependents kind: cohort size: 18 role: bystander attributes: note: "Members for whom the stipend is their primary resource inflow." resources: membership: 100 treasury: 100000 recurring_budget: 12000 moves: - step: 1 actor: remainder action: propose target: userland.allocation payload: { kind: budget, text: "Clean continuation of prior-cycle budget." } - step: 2 actor: hostage_bloc action: vote payload: { support: 0, oppose: 44, effect: "56 support; threshold with quorum penalties not met under hostage bloc's procedural objections." } - step: 3 actor: hostage_bloc action: delay payload: { effect: "Cycle boundary passes with no ratified budget." } expected: outcome: attack_blocked blocked_by: - kernel.art10.deadlock-default - kernel.art4.invariant-empathy-floor failure_mode_if_unblocked: > Lapse-to-zero converts every budget cycle into a hostage negotiation where the side most indifferent to harm wins. The kernel mandates lapse-to-last-ratified: absent a new budget, the prior one continues at 100% until replaced, removing paralysis as a bargaining chip. empathy: worst_off: stipend_dependents dimension: resources floor_threshold: 0.8 rationale: > Shutdown harm is maximally regressive: members with reserves are inconvenienced, members without are broken. The threshold is set high (0.8) because the continuing-resolution default should make this attack nearly costless to the floor member. - id: PD-104 title: "Amendment ping-pong between chambers" family: procedural-deadlock severity: medium tags: [navette, bicameral, infinite-loop] precedent: name: "The French 'navette' shuttle; UK Lords–Commons ping-pong (e.g., Safety of Rwanda Bill, 2024, five rounds)" summary: > Bicameral systems without a terminating rule can shuttle a text forever, each chamber re-amending the other's version. France caps the navette via commission mixte paritaire and a final National Assembly word; systems without such a terminator rely on exhaustion. description: > The polity's userland config splits ratification between a general assembly and a delegate council. A faction controlling the council re-amends every assembly-passed text with trivial wording changes, restarting the clock each round. The simulated text completes nine round trips without converging; the underlying decision (an admissions batch) ages out. actors: - id: council_bloc kind: faction size: 6 role: attacker objective: "Kill texts by infinite revision rather than open opposition." attributes: note: "6 of 10 council seats." - id: assembly kind: faction size: 100 role: defender - id: admission_applicants kind: cohort size: 12 role: bystander resources: membership: 100 seats: 10 moves: - step: 1 actor: assembly action: vote payload: { support: 71, oppose: 29, kind: ratification } - step: 2 actor: council_bloc action: propose payload: { kind: revision, text: "Trivial re-wording; returns text to assembly.", repeat: 9 } - step: 3 actor: council_bloc action: delay payload: { effect: "Nine round trips, no convergence, decision expires." } expected: outcome: attack_blocked blocked_by: - kernel.art10.discharge-deadline - kernel.art10.dilatory-limits failure_mode_if_unblocked: > Any multi-stage pipeline without a bounded round count plus a terminating joint vote gives the smaller stage an invisible veto dressed as diligence. The kernel caps inter-stage rounds at three, after which the originating body's last text goes to a final up-or-down vote. empathy: worst_off: admission_applicants dimension: standing floor_threshold: 0.7 rationale: > Applicants stuck in the shuttle have no standing to act and no visibility into when, if ever, they will. The metric scores decision latency experienced by the person waiting, not by the chambers. - id: PD-105 title: "Tribunal vacancy starvation" family: procedural-deadlock severity: critical tags: [vacancy, dispute-resolution, confirmation-blockade] precedent: name: "WTO Appellate Body paralysis (US blockade of appointments, complete by Dec 2019); Merrick Garland nomination, 2016" summary: > The WTO's appeals court died not by repeal but by attrition: one member simply refused to confirm replacements until the body fell below its three-member quorum. No rule was broken; the institution ceased to function. Confirmation power is destruction power when wielded as a blockade. description: > The dispute-resolution panel requires three of five seats filled to hear cases. A 41-member faction — anticipating an adverse ruling in a pending allocation dispute — votes against every nominee for two open seats across eight cycles. A third member's term then expires, dropping the panel to two and freezing all dispute resolution, including the case that motivated the blockade. actors: - id: blockade_bloc kind: faction size: 41 role: attacker objective: "Disable adjudication entirely rather than lose one case." - id: remainder kind: faction size: 59 role: defender - id: pending_claimants kind: cohort size: 7 role: bystander resources: membership: 100 seats: 5 pending_decisions: 11 moves: - step: 1 actor: remainder action: propose payload: { kind: appointment, repeat: 8, text: "Nominees for panel seats 4 and 5." } - step: 2 actor: blockade_bloc action: vote payload: { support: 0, oppose: 41, repeat: 8, effect: "Confirmation threshold never met." } - step: 3 actor: blockade_bloc action: delay payload: { effect: "Third seat expires; panel at 2/5; adjudication frozen." } expected: outcome: attack_blocked blocked_by: - kernel.art10.sortition-fallback - kernel.art10.discharge-deadline failure_mode_if_unblocked: > Bodies that can only be staffed by affirmative vote can always be killed by sustained refusal. The kernel's defense: any seat vacant past the discharge deadline is filled by sortition from the eligible pool for a caretaker term, so adjudication capacity cannot be starved below quorum. empathy: worst_off: pending_claimants dimension: standing floor_threshold: 0.75 rationale: > A member with a live grievance and no forum is the textbook floor case: their formal rights are intact and worthless. The metric scores access-to-remedy latency for the longest-waiting claimant. - id: PD-106 title: "Dilatory motion flooding" family: procedural-deadlock severity: medium tags: [motion-flooding, dilatory-tactics, rate-limiting] precedent: name: "Disappearing quorum and dilatory motions in the US House, ended by Speaker Reed's rules (1890); amendment-flooding filibusters in the US Senate" summary: > Before 1890, House minorities blocked business by demanding endless roll calls and refusing to answer quorum calls while physically present. Reed's counting of present-but-silent members and his refusal to entertain dilatory motions ended the practice and is the canonical proof that procedure must police its own abuse. description: > A 12-member faction files 340 procedural motions against a single pending ratification — points of order, division demands, motions to table, reconsider, and re-refer — each individually permitted, each consuming floor time. At the simulated processing rate, the motion queue exceeds the cycle length; the ratification never reaches a vote. actors: - id: flooder_bloc kind: faction size: 12 role: attacker objective: "Bury one decision under procedurally valid noise." - id: chamber kind: faction size: 88 role: defender resources: membership: 100 pending_decisions: 1 moves: - step: 1 actor: flooder_bloc action: challenge payload: { kind: procedural_motion, count: 340, effect: "Queue length exceeds cycle capacity." } - step: 2 actor: chamber action: schedule payload: { kind: ratification, effect: "Vote never reached before cycle end." } expected: outcome: attack_blocked blocked_by: - kernel.art10.dilatory-limits - kernel.art10.challenge-nonsuspensive failure_mode_if_unblocked: > Unmetered procedural rights are a denial-of-service surface. The kernel rate-limits motions per member per question, allows the chair (subject to appeal) to rule motions dilatory, and ensures challenges do not suspend the underlying vote by default. empathy: worst_off: chamber dimension: voice floor_threshold: 0.7 rationale: > Floor welfare here is the ordinary member's ability to get any question decided. Twelve members consuming 100% of floor time means 88 members' agenda access rounds to zero; the metric scores the quietest member's realized agenda throughput. - id: PD-107 title: "Serial adjournment by the chair" family: procedural-deadlock severity: high tags: [adjournment, chair-abuse, prorogation] precedent: name: "UK prorogation crisis, 2019 (R (Miller) v The Prime Minister); ruled an unlawful frustration of Parliament" summary: > The executive prorogued Parliament for five weeks at the height of the Brexit timetable, using a scheduling power to prevent scrutiny rather than to manage business. The UK Supreme Court voided it unanimously: a power to schedule is not a power to silence. description: > The seated Moderator, aligned with a faction facing a likely-losing recall vote, adjourns every session before the recall motion can be called — four consecutive sessions over two cycles. Adjournment is within the Moderator's nominal powers; its serial use prevents the body from exercising its supervisory power over the Moderator itself. actors: - id: moderator kind: officer size: 1 role: attacker objective: "Outrun a recall by never letting the question be put." - id: recall_sponsors kind: faction size: 57 role: defender - id: chamber kind: faction size: 42 role: bystander resources: membership: 100 moves: - step: 1 actor: recall_sponsors action: propose payload: { kind: recall, target: moderator } - step: 2 actor: moderator action: adjourn payload: { repeat: 4, effect: "Session ends before recall reaches the floor, four times." } expected: outcome: attack_blocked blocked_by: - kernel.art10.deadlock-default - kernel.art3.proposal-right failure_mode_if_unblocked: > Any officer whose powers can block the vote on their own removal is unaccountable by construction. The kernel makes recall motions privileged and self-scheduling: once sponsored above threshold, the vote occurs at a fixed time regardless of adjournment, and the chair for that vote passes to a randomly selected non-sponsor. empathy: worst_off: recall_sponsors dimension: voice floor_threshold: 0.7 rationale: > The floor case is a member of the supervising majority rendered voiceless by one officer's calendar power — a reminder that floor welfare is positional, not demographic: anyone can be the worst-off participant under the wrong procedure. - id: PD-108 title: "Committee referral loop" family: procedural-deadlock severity: medium tags: [referral, committee-bottling, discharge] precedent: name: "Howard W. Smith's House Rules Committee, 1955–1966" summary: > Smith bottled civil rights bills by simply not scheduling them — once famously leaving Washington to 'inspect a burned barn' to deny the committee a quorum. The discharge petition existed but required a public supermajority of signatures, so bottling usually held. A gatekeeping stage with no enforceable clock is a veto. description: > The userland workflow routes proposals through topic committees. Two committees, both chaired by the same faction, refer a disfavored proposal back and forth — each ruling it 'primarily within' the other's jurisdiction. Six referral hops consume three cycles; the proposal never reaches the floor and no one ever votes against it. actors: - id: committee_chairs kind: faction size: 2 role: attacker objective: "Kill the proposal without a recorded vote by anyone." - id: sponsors kind: faction size: 34 role: defender - id: chamber kind: faction size: 64 role: bystander resources: membership: 100 pending_decisions: 1 moves: - step: 1 actor: sponsors action: propose target: userland.allocation payload: { kind: amendment, text: "Reweight disbursement formula toward floor members." } - step: 2 actor: committee_chairs action: refer payload: { repeat: 6, effect: "A→B→A→B→A→B; three cycles elapsed, no floor consideration." } expected: outcome: attack_blocked blocked_by: - kernel.art10.discharge-deadline - kernel.art3.proposal-right failure_mode_if_unblocked: > Jurisdictional ambiguity between gatekeepers is exploitable as an infinite loop. The kernel attaches a wall-clock discharge deadline to every proposal at submission: when it expires, the proposal goes to the floor in its current form regardless of committee status. empathy: worst_off: sponsors dimension: voice floor_threshold: 0.7 rationale: > The proposal in this scenario is itself a floor-welfare measure, which is typical: bottling disproportionately kills redistributive proposals because their beneficiaries lack gatekeeping seats. The metric scores the sponsors' realized agenda access. - id: PD-109 title: "Merge-conflict denial of service on the pipeline" family: procedural-deadlock severity: medium tags: [pipeline-dos, conflicting-proposals, serialization] precedent: name: "Game-theoretic: resource-contention DoS; legislative analogue in competing 'poison pill' amendments filed to stall consideration" summary: > Any pipeline that halts on conflicts can be halted by manufacturing conflicts. The attack costs the attacker one trivial proposal per target proposal; defense requires a deterministic serialization rule so conflicts delay nothing. description: > Exploiting the governance-as-code pipeline, a 9-member faction submits, for every live proposal it opposes, a near-identical counter-proposal touching the same clauses. The pipeline flags textual conflicts and (as configured) suspends both texts pending manual reconciliation. Fourteen live proposals are frozen by fourteen 50-token spoilers. actors: - id: spoiler_bloc kind: faction size: 9 role: attacker objective: "Freeze the pipeline by manufacturing textual conflicts." - id: proposers kind: faction size: 47 role: defender - id: chamber kind: faction size: 44 role: bystander resources: membership: 100 pending_decisions: 14 moves: - step: 1 actor: spoiler_bloc action: propose payload: { kind: amendment, count: 14, text: "Minimal-diff spoilers targeting each live proposal's clauses." } - step: 2 actor: spoiler_bloc action: delay payload: { effect: "Conflict suspension freezes all 14 originals indefinitely." } expected: outcome: attack_blocked blocked_by: - kernel.art10.dilatory-limits - kernel.art9.ledger-transparency failure_mode_if_unblocked: > Treating textual conflict as a blocking error imports a classic software DoS into governance. The kernel serializes by ledger timestamp: conflicting proposals are voted in submission order, the first ratified text wins, and later conflicting texts are rebased or fall away — conflicts never suspend, they sequence. empathy: worst_off: proposers dimension: voice floor_threshold: 0.7 rationale: > Scored on the proposer whose text waited longest behind a spoiler. The asymmetry — 50 tokens of attack freezing months of drafting — is exactly what the metric is built to surface. - id: PD-110 title: "Definitional challenge cascade" family: procedural-deadlock severity: high tags: [vexatious-challenge, suspension-abuse, litigation-dos] precedent: name: "Vexatious litigation and SLAPP suits; administrative analogue in serial bad-faith FOIA/process objections used to stall agency action" summary: > Where filing a challenge suspends the challenged act, the challenge mechanism — built as a minority protection — becomes a universal brake. SLAPP suits demonstrate the pattern: the filer needs to win nothing; the process is the punishment. description: > A 7-member faction files an ambiguity challenge against every enacted decision — 31 challenges in two cycles — each triggering (under the attacked configuration) automatic suspension of the challenged act pending panel review. The dispute panel's throughput is 4 cases per cycle; the suspension backlog grows without bound and effectively repeals everything enacted. actors: - id: challenger_bloc kind: faction size: 7 role: attacker objective: "Suspend the entire enacted corpus via the challenge mechanism." - id: chamber kind: faction size: 93 role: defender - id: enactment_dependents kind: cohort size: 21 role: bystander resources: membership: 100 pending_decisions: 31 moves: - step: 1 actor: challenger_bloc action: challenge payload: { kind: ambiguity, count: 31, effect: "All enacted decisions suspended pending review." } - step: 2 actor: chamber action: schedule payload: { kind: panel_review, effect: "Throughput 4/cycle; backlog unbounded." } expected: outcome: attack_blocked blocked_by: - kernel.art10.challenge-nonsuspensive - kernel.art10.dilatory-limits failure_mode_if_unblocked: > Suspensive challenges invert the burden of governance: seven members out-vote ninety-three by filing paperwork. The kernel default is non-suspensive review (acts stand pending challenge unless the panel grants emergency suspension), plus per-member challenge rate limits with a refundable seriousness bond. empathy: worst_off: enactment_dependents dimension: resources floor_threshold: 0.7 rationale: > Suspension harm lands on whoever the suspended acts were serving — in the model, stipend and admission decisions. The metric scores their realized outcomes during the backlog, and the seriousness bond is calibrated so it never prices a genuine floor-member grievance out of the challenge system (cross-checked by MS-105's logic). - id: PD-111 title: "Unanimity trap (liberum veto)" family: procedural-deadlock severity: critical tags: [unanimity, threshold-trap, liberum-veto] precedent: name: "Liberum veto, Polish–Lithuanian Sejm, 1652–1791" summary: > Any single deputy crying 'Nie pozwalam!' could void not just the measure but the entire session's work. Of 150 Sejms held 1573–1763, about a third passed no legislation at all; foreign powers openly bribed single deputies to paralyze the state. Poland was partitioned out of existence by neighbors who found its constitution cheaper to exploit than its army. The liberum veto is the type specimen of threshold-induced state death. description: > Framed as a consensus-culture reform during a high-trust period, a proposal raises the ratification threshold for allocation decisions to 100%. It passes. Next cycle, a single member — in the model, one who has accepted side payments from an external actor — vetoes every allocation including routine operations, then offers to withdraw vetoes for per-decision payments. actors: - id: consensus_sponsors kind: faction size: 71 role: attacker objective: "(Initially sincere) raise threshold to 100%; the attack is the rule, not the sponsors." - id: veto_holder kind: member size: 1 role: attacker objective: "Monetize the unanimity rule via per-decision veto ransoms." - id: chamber kind: faction size: 99 role: defender resources: membership: 100 treasury: 100000 moves: - step: 1 actor: consensus_sponsors action: propose target: userland.procedure payload: { kind: amendment, text: "Allocation decisions require unanimous approval." } - step: 2 actor: consensus_sponsors action: vote payload: { support: 71, oppose: 29 } - step: 3 actor: veto_holder action: vote payload: { support: 0, oppose: 1, repeat: 8, effect: "Every allocation fails 99–1; ransom demanded per veto withdrawal." } expected: outcome: attack_blocked blocked_by: - kernel.art5.threshold-bounds - kernel.art6.semver-supermajority failure_mode_if_unblocked: > Unanimity converts every member into a chokepoint and every chokepoint into a market. The kernel bounds decision thresholds (no userland rule may require above the kernel's own supermajority ceiling), so the step-1 amendment itself fails validation — the attack is blocked before the extortionist ever gets a veto. empathy: worst_off: chamber dimension: resources floor_threshold: 0.75 rationale: > Under unanimity, the floor member's welfare equals what the most extractive single veto-holder leaves them. The scenario tests that the harness evaluates rules by their exploitation equilibrium, not their sponsors' intent — the sponsors here were sincere. - id: PD-112 title: "Coordinated mass resignation below operating quorum" family: procedural-deadlock severity: high tags: [mass-resignation, quorum-collapse, basis-manipulation] precedent: name: "Venezuelan opposition boycott of the 2005 legislative elections; Albanian opposition's collective mandate renunciation, 2019" summary: > Mass withdrawal aims to delegitimize or paralyze: either the body cannot act (quorum computed over original membership) or it acts with hollow legitimacy. In Venezuela the boycott handed the chamber entirely to the government — the tactic also illustrates the attacker's own downside, which the test still must handle. description: > A 35-member faction resigns simultaneously, with public statements that they will return only if their demands are met. Quorum is configured as 60% of "enrolled members" with no rule for recomputing enrollment after resignation. 65 remaining members cannot reach the 60-member quorum line; additionally, the resigners claim a right to immediate re-admission at a moment of their choosing, enabling repeated cycling. actors: - id: resigner_bloc kind: faction size: 35 role: attacker objective: "Paralyze the body via quorum arithmetic while keeping a re-entry option." - id: remainder kind: faction size: 65 role: defender - id: dependents kind: cohort size: 11 role: bystander resources: membership: 100 pending_decisions: 9 moves: - step: 1 actor: resigner_bloc action: resign payload: { count: 35, simultaneous: true, demand: "Policy concessions as price of return." } - step: 2 actor: remainder action: schedule payload: { kind: ratification, effect: "65 attending < 60% of 100 enrolled... quorum arithmetic disputed; sessions fail under attacked reading." } - step: 3 actor: resigner_bloc action: propose payload: { kind: readmission, text: "Bloc re-enrolls intact at cycle N+3, repeats at next contested vote." } expected: outcome: attack_blocked blocked_by: - kernel.art5.quorum-floor - kernel.art2.expulsion-due-process failure_mode_if_unblocked: > Quorum over a frozen enrollment number lets departed members govern by absence. The kernel computes quorum over active enrollment as of the notice date, with an absolute floor to prevent a tiny rump from claiming validity; resignation takes effect immediately and re-admission follows the standard process with a cooldown, killing the cycling exploit. empathy: worst_off: dependents dimension: resources floor_threshold: 0.7 rationale: > Both the paralysis branch and the rump-rule branch are scored; the kernel must thread between them. The floor member is whoever needs a decision from a body that either cannot act or acts without legitimacy — the metric requires both failure branches to stay above threshold. - id: PD-113 title: "Synchronized sunset cliff into a rule vacuum" family: procedural-deadlock severity: critical tags: [sunset-cliff, rule-vacuum, expiry-hostage] precedent: name: "US 'fiscal cliff,' December 2012; debt-ceiling standoffs 2011/2023" summary: > Stacking multiple expirations on one date manufactures a crisis deadline, and crisis deadlines transfer power to whoever credibly prefers the cliff. The 2011 standoff cost the US its AAA rating without a single rule being broken; the leverage was the default state itself. description: > Over several cycles, a faction amends the renewal dates of six major userland modules — allocation, admissions, conduct, dispute fees, stipends, and the meeting calendar — to expire simultaneously at cycle 30. As the cliff approaches, the faction blocks all renewal votes, offering to permit renewal only as a single package containing its preferred (otherwise unpassable) entrenchment rider. Without renewal, the attacked configuration lapses to no rules at all. actors: - id: cliff_bloc kind: faction size: 43 role: attacker objective: "Manufacture a rule-vacuum deadline and sell the antidote." - id: remainder kind: faction size: 57 role: defender - id: stipend_dependents kind: cohort size: 16 role: bystander resources: membership: 100 treasury: 100000 moves: - step: 1 actor: cliff_bloc action: propose payload: { kind: amendment, count: 6, text: "Align renewal dates of six modules to cycle 30 ('calendar hygiene')." } - step: 2 actor: cliff_bloc action: vote payload: { support: 43, oppose: 12, effect: "Passes with low salience; opposition dispersed across six votes." } - step: 3 actor: cliff_bloc action: delay payload: { effect: "All clean renewal votes blocked as cycle 30 approaches." } - step: 4 actor: cliff_bloc action: propose payload: { kind: package, text: "Omnibus renewal + entrenchment rider, take-it-or-leave-it." } expected: outcome: attack_blocked blocked_by: - kernel.art10.deadlock-default - kernel.art7.ratchet-ban failure_mode_if_unblocked: > Lapse-to-vacuum is the deadliest default in the file: it makes the cliff bloc's BATNA 'anarchy,' which beats any negotiated outcome for whoever fears anarchy least. The kernel mandates lapse-to-last- ratified for every module — expiry without replacement continues the prior text — so the cliff has no edge and the omnibus ransom has no buyer. empathy: worst_off: stipend_dependents dimension: safety floor_threshold: 0.8 rationale: > Rule vacuums hurt floor members categorically: rules are the floor member's only shield, while strong members do fine in anarchy. The threshold is set at 0.8 because the lapse-to-last-ratified default should make the cliff a non-event for the floor member; any reading of the kernel under which their stipend lapses fails the scenario.