Rule: When a derisking spike hits its kill-condition on a SPECIFIC tool / mechanism / pathway, SURFACE ALTERNATIVES BEFORE collapsing the whole synthesis option to its documented fallback. The kill-condition is about the predefined pathway; alternatives may exist that satisfy the underlying intent through a different mechanism.

Pattern (concrete; from S2 → S2.5 2026-05-02 BST):

PhaseActionOutcome
1. Kill-condition hitsS2: schema-automator+funowl fails on CCO/IAO/IOF (3 distinct hard-fail modes; 21s combined wall-clock)Original Layer 1 mechanism INFEASIBLE in 2026
2. STOP + surface alternativesS2.5 mini-spike: test alternative OWL loaders (owlready2 + py-horned-owl + rdflib)~30-60 min investment
3. Test alternatives against same kill-conditionowlready2 0.50 reads all 3 ontologies in 1.2s combinedAlternative loader VALIDATED
4. End-to-end pipeline test on alternative~100-line emitter PoC + gen-pydantic + gen-typescript + gen-json-schema; 9 i-ζ classes instantiate with MRO to BFO rootDistinctiveness PRESERVED
5. Cost-row update reflects alternative~16-24h emitter author vs ~10h hand-curation = +£500-1KRounding-error vs acquirer-narrative-value

Why: Synthesis options like ε.ι (ε.ε baseline + LinkML structured_imports + OntoUML phase + OntoGPT) derive their VALUE from the combination of distinguishing components. If component A fails and you immediately fall back to baseline, you lose the entire synthesis premise. But “component A through tool X fails” ≠ “component A is infeasible” — there may be tool Y that does the same job. The synthesis dies only if ALL plausible alternatives fail.

Per Rich-directive 2026-05-02T~11:50 BST after S2 MITIGATED: “S2 was not a success. i believe we should try to find alternatives now”. This directive operationalised the pattern. Forward action: every spike kill-condition-met outcome triggers an automatic ~30-60 min alternatives mini-spike before fallback collapse.

How to apply:

  1. In spike kill-condition handling — when a kill-condition is met for a specific tool/mechanism, do NOT immediately mark maturity: outcome-MITIGATED and execute the predefined fallback. FIRST run a short alternatives mini-spike (~30-60 min):

    • Identify 2-3 alternative tools that perform the same role
    • Run smoke tests against the same inputs that broke the original tool
    • If at least one alternative passes the smoke test, run an end-to-end pipeline test on that alternative
    • If alternative validates: mark T-file maturity: outcome-VALIDATED (distinguishes from MITIGATED; the synthesis option survives)
    • If all alternatives fail: only THEN mark maturity: outcome-MITIGATED with documented fallback + alternatives-tried list in T-file §6 honesty caveats
  2. In subagent prompts for spike dispatch — explicitly require alternatives-first discipline. Per the S3 prompt 2026-05-02 BST: “If S3 hits its kill condition (annotation-transfer fails at any codegen layer OR Catala scope-binding can’t reference annotation metadata), DO NOT immediately drop OntoUML phase to fallback slot_usage: { active: false } boolean. FIRST surface alternatives […] ONLY collapse to fallback if ALL alternatives fail.”

  3. In cost-modelling at lock-time — alternatives-path cost ≠ baseline-fallback cost. Lock decision should compare:

    • Synthesis-via-original-tool: infeasible (kill-condition-met)
    • Synthesis-via-alternative-tool: usually +N% one-shot cost; preserves distinctiveness (use this for lock)
    • Baseline-fallback: collapses distinctiveness; usually represents what ε.ε / ω.η alone would give
  4. In documentation — T-files for kill-condition-met spikes that surfaced alternatives should be SUPERSEDED-BY-S{N}.5 with the rescue spike’s T-file as the lock-time reference. arch-state §11 + Q-* file should mark the original spike row as SUPERSEDED-BY-S{N}.5.

  5. Mini-spike numbering — adopt SX.5 convention (S2 → S2.5; S5 → S5.5 if needed). Doesn’t need its own slot in the plan; it’s a follow-on to the parent spike triggered by kill-condition-met.

Boundary tests (when this rule fires STRONGLY):

  • ✓ Synthesis options where component A failure would collapse distinctiveness to baseline
  • ✓ Tool-specific kill-conditions (e.g. “schema-automator broken” not “auto-import infeasible”)
  • ✓ Components where 2+ alternative tools/approaches plausibly exist (OWL loaders; codegen pipelines; Catala scope-binding patterns; etc.)
  • ✓ Pre-lock decisions where a 30-60 min mini-spike could change the lock-time framing

Boundary tests (when this rule does NOT apply):

  • ✓ Genuine kill-conditions where the FUNCTIONAL category is broken (not just the specific tool) — e.g. “Catala 1.1.0 doesn’t compile on WSL” is tool-specific; “no formal-verification language can express English-IHT-rules at acceptable expressiveness” is category-level.
  • ✓ Spike outcomes where the synthesis baseline is already strong + the additional component is gravy (in which case the alternatives-mini-spike is optional)
  • ✓ Time-pressured lock-decisions where 30-60 min isn’t available

Codification trigger: Rich-directive 2026-05-02T~11:50 BST after S2 MITIGATED outcome surfaced concern that ε.ι Layer 1 distinctiveness collapsed to ω.η pattern under the predefined fallback. S2.5 mini-spike validated owlready2 alternative; ε.ι Layer 1 reinstated. Pattern fully validated; codified now.

Related memories:

  • project_zeta_q3_eps_iota_S2_2026_05_02.md — S2 MITIGATED outcome (the trigger)
  • project_zeta_q3_eps_iota_S2_5_owlready2_rescue_2026_05_02.md — S2.5 alternatives-first rescue
  • feedback_bold_front_loaded_synthesis_preference.md — synthesis-over-baseline preference for foundational decisions
  • feedback_iri_verification_before_lock.md — analogous pre-lock-validation discipline for IRI choices

Forward integration:

  • Refined-prompt v3.6 candidate: add “alternatives-first” sub-clause to Step 6e SPIKES (or new Step 11 after kill-condition handling)
  • Plan §0 logging contract: add post-kill-condition step “run alternatives mini-spike before fallback execution”
  • Frontmatter contract §1.1: add alternatives_tried: list field for MITIGATED outcomes