Positioning Viability Seam — Compensation as a Second Costura Parallel to Proof, Not a Fourth Axis
Accepted
Context
ADR-043 modelled positioning as three orthogonal axes (WHAT / FOR WHOM / HOW) bound by a single Proof seam. That framework has a structural silence: it can say what the project claims, to whom, how it spreads, and whether the claim is real — but it has no place to say whether any of it SUSTAINS the maker. There was no model of compensation, direct or indirect. Decisions about pricing, metered surfaces, visibility-as-funnel, or a commercial consumer were therefore reasoned entirely outside the graph and improvised.
This silence was named in `.ontoref/ontology/core.ncl` as the Spiral tension `openness-vs-sustainability`: the protocol gives value away to maximise reach (voluntary-adoption, the personal-ontology audience, difusión as visibility) while the project that maintains it must capture enough value to sustain itself. The Yin pole (openness) is the engine of visibility; the Yang pole (sustainability) is the engine of compensation; they feed one loop. With the tension named but no positioning element to attach it to, the tension stayed claim-only.
The load-bearing risk is identical to ADR-043's and one step sharper: a money dimension on the marketing surface invites classifying every claim by its business model — the Yang pole-collapse the named tension exists to prevent. The framing that resolves it is geometric: compensation is not a facet of a claim (an axis) but an outcome of convergence (a seam).
Decision
Model viability as a SECOND seam, `ViabilityPath`, parallel to `Proof` — not a fourth orthogonal axis. Where Proof answers "is the claim real?" (validation seam over the three axes), a ViabilityPath answers "does the claim sustain its maker?" (sustainability seam over the same three axes). Both reference the axes via `converges` and are referenced by nothing — self-similar to witness-as-axis-seam (ADR-031) and to Proof (ADR-043).
Kind — `ViabilityPath` (one file per declared sustaining flow), under `.ontoref/positioning/viability/`. converges — { audience_ids, mechanism_ids, value_prop_ids } each non-empty: FOR WHOM × HOW × (WHAT×WHOM). A sustaining flow is an audience reached by a difusión mechanism monetising a value-prop, or it is not a path. directness — 'Direct | 'Indirect, mapping to the two poles of openness-vs-sustainability. 'Indirect is the Yin/open pole (visibility, funnel, reputation); 'Direct is the Yang/governance pole (metered payment for the witness/audit surface). flow_kind — HostedService | Support | Consulting | DualLicense | Sponsorship | Funnel | Reputation. Descriptive vocabulary of compensation forms, NOT a per-claim business-model decision. status — 'Draft (a hypothesis about how positioning could sustain the project) until a real, measured `realized_outcome` promotes it — exactly as an Audience is 'Hypothesis until a Proof validates it.
The realized-status gate is one-directional: a 'Validated|'Live path MUST carry `realized_outcome`; a 'Draft path may omit it. It is deliberately NOT a Hard biconditional (`outcome ⟺ realized`) on the Spiral question — that would be an ondaod forbidden pattern. Capture lands on a commercial consumer or the witness/audit tier, never on the open protocol surface: protocol-not-runtime and voluntary-adoption are preserved by construction.
The kind is additive and opt-in (ADR-029): a project with no `viability/` directory pays zero adoption cost, and every existing positioning file validates unchanged. No migration is required (same precedent as ADR-043's additive kinds).
Constraints
- Hard Viability MUST be modelled as a seam: `ViabilityPath` references the three axes via `converges` and MUST NOT be referenced by any other kind, and MUST NOT be promoted into a fourth orthogonal axis co-equal to WHAT / FOR WHOM / HOW. The schema keeps it parallel to Proof.
- Hard Every ViabilityPath MUST converge >=1 audience, >=1 mechanism and >=1 value-prop. The make_viability_path contract (`_viability_converges_all`) enforces the triple convergence.
- Hard Every ViabilityPath MUST cite >=1 linked_node — typically `openness-vs-sustainability`. The make_viability_path contract (`_viability_anchored`) enforces this.
- Soft The realized-status gate MUST stay one-directional: a 'Validated|'Live ViabilityPath requires `realized_outcome`, but the presence of an outcome MUST NOT be tightened into a Hard biconditional (`outcome ⟺ realized`) on the Spiral question. The `_realized_requires_outcome` contract enforces the implication only.
- Soft A 'Direct ViabilityPath MUST land compensation on a commercial consumer or the witness/audit tier, never on the open protocol surface itself. Metering the protocol would break protocol-not-runtime and voluntary-adoption.
Alternatives considered
- Viability as a fourth orthogonal axis (a fourth folder co-equal to WHAT / FOR WHOM / HOW) — rejected: Compensation is not parallel to the three axes — it is where they converge and return a flow. A fourth axis implies a false fourth pole and invites classifying every claim by its business model, the exact Yang pole-collapse openness-vs-sustainability exists to prevent. The Proof-parallel seam is faithful to witness-as-axis-seam.
- Viability as an attribute on existing kinds (a compensation_kind field on Audience, or an outcome variant on Proof) — rejected: Scatters the sustainability question across kinds and couples it to validation. The seam property — references the axes, referenced by none, with its own Draft→realized lifecycle — is lost. A path that monetises an audience×mechanism×value-prop convergence needs to be a first-class artefact, not a field bolted onto one axis.
- Reuse Proof with a new proof_kind = 'Revenue — rejected: Proof answers 'is the claim real?'; viability answers 'does the claim sustain its maker?'. Overloading Proof conflates validation with viability and breaks the clean question each seam owns. Two questions, two costuras.
- Make the realized_outcome gate a Hard biconditional (outcome present ⟺ status realized) — rejected: openness-vs-sustainability is a Spiral tension; a Hard biconditional on it is an ondaod forbidden pattern. The one-directional gate (realized ⇒ outcome) reports direction of motion without collapsing the Spiral — a Draft path is a legitimate hypothesis that may carry no outcome yet.
Anti-patterns
- Modelling Compensation as a Fourth Orthogonal Axis — A contributor adds a fourth positioning folder co-equal to WHAT / FOR WHOM / HOW and starts tagging each claim with a business model. The axis count silently becomes four, the seam geometry is lost, and money becomes a per-claim classification — the Yang pole-collapse openness-vs-sustainability exists to prevent.
- A Realized Viability Path Without a Measured Outcome — A ViabilityPath is promoted to 'Validated|'Live to look like the project is sustained, but no real measured `realized_outcome` backs it. Sustenance is asserted, not earned — the same failure mode as a Validated Audience with no Proof.
- Putting Direct Compensation on the Open Protocol Surface — A 'Direct viability path meters the protocol itself (the schemas, the CLI, the adoption surface) rather than a commercial consumer or the witness/audit tier. This collapses openness-vs-sustainability onto the Yang pole and voids protocol-not-runtime and voluntary-adoption.
- Tightening the Realized Gate into a Hard Biconditional — A contributor 'strengthens' the realized gate to outcome ⟺ realized, so that any path carrying an outcome string is forced to a realized status (and vice versa). This is a Hard biconditional on a Spiral question — it collapses the continuous flow and forbids the legitimate Draft-with-early-evidence half-state.