$npx -y skills add human-avatar/skills-for-humanity --skill s4h-constraint-hardness-testingTests whether a stated constraint is real — distinguishing genuine limits from assumptions, habits, or politics dressed as facts. Triggers: 'is this really a constraint', 'challenge the assumption', 'who says we can't', 'is this actually fixed', 'test the constraint'.
| 1 | # Constraint Hardness Testing |
| 2 | |
| 3 | Organisations accumulate phantom constraints — rules that were real once and calcified, or |
| 4 | beliefs that were never tested, or someone's preference that got repeated until it sounded |
| 5 | like policy. This skill separates genuine limits from assumed ones before any energy is |
| 6 | spent working around or accepting them. |
| 7 | |
| 8 | --- |
| 9 | |
| 10 | ## Your Process |
| 11 | |
| 12 | **Step 1: State the Constraint** |
| 13 | Write it exactly as it's been stated or assumed. Don't clean it up — the imprecision is |
| 14 | often where the phantom lives. |
| 15 | |
| 16 | **Framing check:** Confirm the specific constraint and the goal it is blocking before continuing. State what you've identified — the exact constraint as you understand it and the goal or action it prevents — in one sentence, then use `AskUserQuestion`: |
| 17 | - **Question:** "I'm reading this as: [your one-sentence framing of the constraint and the goal it blocks]. Is that right?" |
| 18 | - **Header:** "Framing" |
| 19 | - **Options:** |
| 20 | - **Yes — proceed** — framing is correct |
| 21 | - **Adjust** — one element is off; user will correct it before you continue |
| 22 | - **Reframe** — different situation than read; incorporate the correction before proceeding |
| 23 | |
| 24 | **Step 2: Source It** |
| 25 | Who said this constraint exists? When? Is the source a law or regulation, a signed contract, |
| 26 | a technical impossibility, a leadership decision, a team preference, or unknown? The source |
| 27 | determines the hardness ceiling. |
| 28 | |
| 29 | **Step 3: Consequence Test** |
| 30 | What actually happens if this constraint is violated? State the consequence concretely. If |
| 31 | the answer is "I'm not sure" or "someone would be unhappy," the constraint is not hard. |
| 32 | Distinguish real consequences (fine, contract breach, system failure) from assumed ones |
| 33 | (pushback, awkwardness, political cost). |
| 34 | |
| 35 | **Step 4: Precedent Check** |
| 36 | Has anyone tried to change or violate this constraint before? What happened? No precedent |
| 37 | often means no one has tested it — not that it can't be changed. |
| 38 | |
| 39 | **Step 5: Conditions Test** |
| 40 | Under what circumstances would this constraint not apply? A truly hard constraint has no |
| 41 | exceptions. If you can find a scenario where it wouldn't hold, the constraint is softer |
| 42 | than stated. |
| 43 | |
| 44 | **Step 6: Classify** |
| 45 | - **Hard**: real source, concrete consequence, no exceptions, precedent confirms |
| 46 | - **Soft**: real but negotiable, consequence is political or preferential |
| 47 | - **Assumed**: no clear source, untested consequence |
| 48 | - **Outdated**: was once hard, circumstances have changed |
| 49 | |
| 50 | --- |
| 51 | |
| 52 | ## Human Check-in |
| 53 | |
| 54 | Before proceeding, use the `AskUserQuestion` tool. State your interpretation of the situation in 1–2 sentences — what is being analyzed and what the core question is — then ask: |
| 55 | |
| 56 | - **Question:** "My read: [your 1–2 sentence interpretation]. How do you want to proceed?" |
| 57 | - **Header:** "Scope" |
| 58 | - **Options:** |
| 59 | - **Full analysis** — Complete all steps, reasoning shown throughout |
| 60 | - **Key findings only** — Bottom-line output, skip step-by-step detail |
| 61 | - **Real vs assumed verdict only** — Classify each constraint without full analysis |
| 62 | - **Reframe** — The read is off; correct it and the analysis will follow the corrected framing |
| 63 | |
| 64 | Proceed based on their selection. If the user reframes, incorporate the correction before running any analysis. |
| 65 | |
| 66 | ## Output Format |
| 67 | |
| 68 | **Constraint as stated:** |
| 69 | > [Exact wording] |
| 70 | |
| 71 | **Source:** [Law/contract/technical/decision/preference/unknown] — [specific origin] |
| 72 | |
| 73 | **Consequence if violated:** |
| 74 | > [Concrete statement] — Real / Assumed |
| 75 | |
| 76 | **Precedent:** [What happened when tested, or "untested"] |
| 77 | |
| 78 | **Conditions where it wouldn't apply:** |
| 79 | > [If any] |
| 80 | |
| 81 | **Classification:** Hard / Soft / Assumed / Outdated |
| 82 | |
| 83 | **Recommended action:** |
| 84 | |
| 85 | | Classification | Action | |
| 86 | |----------------|--------| |
| 87 | | Hard | Accept — design around it | |
| 88 | | Soft | Negotiate explicitly | |
| 89 | | Assumed | Test it — ask the source directly | |
| 90 | | Outdated | Challenge it — propose removal | |
| 91 | |
| 92 | --- |
| 93 | |
| 94 | ## Notes |
| 95 | |
| 96 | The most dangerous class is Assumed, because it looks like Hard. Before accepting any |
| 97 | constraint that cannot be sourced precisely, treat it as Assumed and test it — the cost of |
| 98 | testing is almost always lower than the cost of a permanent workaround. |
| 99 | |
| 100 | --- |
| 101 | |
| 102 | ## What's Next |
| 103 | |
| 104 | After delivering this output, use `AskUserQuestion` to offer the next move: |
| 105 | |
| 106 | - **Question:** "Constraints tested. What's next?" |
| 107 | - **Header:** "Next" |
| 108 | - **Options:** |
| 109 | - `/s4h-constraint-workaround-mapping` — Route around the hard constraints |
| 110 | - `/s4h-constraint-scope-reduction` — Reduce scope to avoid constraints that can't be bypassed |
| 111 | - `/s4h-decision-option-mapping` — See what options remain given hard and soft constraints |
| 112 | - **Done** — Wrap up and synthesise what we have so far |