nav-triz
Divergent solving for a declared contradiction — three competing candidates from different TRIZ separation modes, each with a named downside, then one recommendation. For the minority of tasks where the first fitting idea is a compromise.
Triggers
Natural-language phrases that auto-invoke the skill:
- “find a better solution for X”
- “alternatives for X”
- “resolve the contradiction”
- “triz this”
Also fires when a nav-brief Contradict row is not none on a substantial task (Task Mode complexity ≥ 0.5, or more than one subsystem).
It does not fire on routine work, on Contradict none, on just do it / quick fix, or when you already named the approach. Ceremony is this skill’s failure mode; when in doubt it skips and says so in one line.
What it does
Seven steps on one screen:
- State the contradiction — technical form (“improving A vs worsening B”) or physical form (“X must be both A and not-A”). Can’t state one? There isn’t one; proceed normally.
- Ideal Final Result — what if the function existed with no new code? If reachable, that is usually the answer.
- Reuse inventory — what already does ≥80% of this?
path:lineornone found. - Prior resolutions + principle prompts — runs
functions/triz_suggest.py, which lists decisions in your graph that resolved a related tension and three principle prompts from different separation modes (time / space / condition / level). - Three candidates, one per prompt. Each must say what it worsens — a candidate with no downside is a compromise misdescribed, or the IFR.
- Recommend one, one-sentence reason, at most one open question.
- Capture the resolution as a tagged decision (
--contradiction / --separation / --principle) so the next session can find it.
┌─ TRIZ: <short title> ─────────────────────────────────────────────┐
│ Contradiction improving <A> vs worsening <B> │
│ IFR <no-new-code version; reachable? yes/no> │
│ Reuse <path:line does X> | none found │
│ Prior mem-NNN (<separation>) | none │
├───┬────────────┬───────────────────────────┬──────┬────────────────┤
│ # │ mode/prin. │ what changes │ cost │ worsens │
├───┼────────────┼───────────────────────────┼──────┼────────────────┤
│ 1 │ time / 10 │ ... │ S │ ... │
│ 2 │ cond / 15 │ ... │ M │ ... │
│ 3 │ level / 1 │ ... │ L │ ... │
├───┴────────────┴───────────────────────────┴──────┴────────────────┤
│ Recommend #<n> — <one-sentence reason> │
└────────────────────────────────────────────────────────────────────┘Example
python3 skills/nav-triz/functions/triz_suggest.py \
--contradiction "clean codebase vs rollback safety"Prior resolutions in this graph (3):
- mem-063: clean codebase vs rollback safety [separation: time]
principle: temporary re-export shims for one major, delete in v8
- mem-073: big-bang runtime replacement vs reversibility [separation: time]
principle: beforehand cushioning: additive-only config migration + verified downgrade
...
Candidate principles (one per separation mode first):
1. [space] #24 Intermediary — adapter, single emitter, gateway, shim, facade
2. [time] #11 Beforehand cushioning — additive-only migration, verified rollback
3. [condition] #15 Dynamization — config toggle, threshold, ship OFF then opt inDeterministic, stdlib, always exits 0. When no keyword matches, it returns a generic trio and labels it as such.
Reference
skills/nav-triz/reference/PRINCIPLES.md (lazy-loaded, never injected) maps the four separation modes and the ~20 of Altshuller’s 40 principles that transfer to software, with the move each suggests. The rest — pneumatics, thermal expansion, inert atmospheres — are listed so nobody forces them.
Related
- nav-brief — the Contradict row that hands off here
- nav-graph — tagging decisions and the
contradictionsquery - Knowledge Graph