Nishi · Design-to-Market

A no-plastic product line, and the engine that decides when to buy the machine

Domestic dandelion rubber as the material, two SKUs to carry it to market, and a reusable rent→lease→buy ladder that turns a capital judgement call into arithmetic.

2026-08-06  ·  built + gate-proven this session  ·  nx_prodladder 15/15 GREEN

01What shipped today

Two things went live, both verified against artifacts rather than status messages.

15/15nx_prodladder selftest GREEN — the new rent→lease→buy ladder
7→11/11fetcher feed gate, after merging two half-complete HTTP clients into one
13k→59kbytes of readable text from the same URL, once gzip decoding reached the fleet
800 vs 183ax_band for the SAME synthesised bird call at 96 kHz vs 22.05 kHz
8→1contradictory duplicate registry rows, after teaching the duplicate-detector to look inside files
sha256now returned by /api/build, making the anti-stale-deploy guard usable for the first time

The fetcher was returning the wrong bytes, silently

The first thing this session did was fetch the operator's source URL. It came back as 13,171 bytes of binary garbage. The cause was not a missing decoder — the estate has had a KAT-proven gzip inflate for months. It was that the decoder sat behind a --body flag that the MCP tool rows never passed. Every agent calling nx_https_get had been receiving compressed bytes and had no way to know.

Law bankedA decoder one consumer imports is not a capability the fleet has. The fix belonged at the shared chokepoint, not in the caller that happened to notice.

Fixing it surfaced a second problem. There were three tool names pointing at three different binaries built from two sources, and neither source was complete: one had the shared library, redirect-following and a TLS-1.2 fallback; the other had a plain-hello fallback that four federal hosts (sec.gov, efts.sec.gov, api.nhtsa.gov, justice.gov) require. Measured on the same feeds in the same minute: 7/11 versus 11/11. Merging the missing half into the shared library made one path strictly superior, which is what makes the duplicate retirable instead of permanently maintained.

Law bankedThe same lesson learned twice in two binaries is a lesson the codebase never learned.

Headers that described the wire do not survive the decode: after inflating, Content-Encoding and Content-Length are renamed in place to equal-length X-Was-* forms, so nothing left in the response is a lie a downstream parser could trust.

The same shape, twice more

Chasing that bug turned up two siblings of it, both fixed rather than filed.

A guard whose input nobody could obtain. Deploying revealed that /api/promote silently installed a months-old artifact over a freshly built one and reported PROMOTED with the stale bytes — caught only because the byte count went down after an addition. The estate already had the correct defence: an expect_sha256 gate that hashes the staged bytes before any mutation and refuses on mismatch. It was live, correct, and unused, because /api/build never emitted the digest, so nobody in the natural loop could supply it. Build now returns it. Proven both ways in one minute: a wrong digest returns 400 artefact-mismatch · LIVE IS UNTOUCHED; the right digest promotes.

Law bankedA guard whose input the previous step does not emit is a guard nobody can use.

A detector blind to the common case. nx_confdup exists to find configs that declare the same concern twice — but it compared filenames only, and never looked inside a file. Meanwhile nx_schema_backfill had been appending duplicate tool rows carrying a blanket destructive=1, open_world=1 safety quad, even where a correct hand-written row already said read-only. Read-only gates were registered as destructive, and the estate's primitive registry served that metadata. Teaching the detector to look inside files surfaced eight contradictory rows; seven are now fixed, and two tools were carrying read_only=4 and read_only=5 — not even valid booleans.

Its first version also invented three findings, by splitting keys on spaces in a TAB-delimited file whose keys are phrases. That was fixed too: a detector that manufactures findings spends the trust it needs for the real ones.

Law bankedAn instrument blind to the common case only ever sees crises — and a generated row disagreeing with a hand-written one is not a tie, it is two answers to a question that must have one.

02The material — Kultra® natural rubber

Facts below are read directly from the operator's cited source and are quoted, not inferred.

AttributeValue
CompanyKultevat, founded 2013 by Daniel Swiger · Portageville, Missouri
MaterialKultra® natural rubber from Kultevar™ cultivars of TKS (Taraxacum kok-saghyz)
Crop cycle1 year
Hevea tree comparisonup to 7 years
Patent coverage16 countries
Co-productsinulin, resin, natural fibre
Historical precedentRussian dandelion supplied 30% of USSR rubber in WWII
Incumbent concentration90% of natural rubber is produced in Asia

Three of these matter strategically. The annual crop cycle means a supply decision compounds yearly instead of on a seven-year lag — you can respond to demand in one season. The co-products mean rubber does not have to carry the whole farm economics alone. And the Missouri headquarters is the entire point of “SOTA here in America”: this is a domestic agricultural supply chain for a material that is currently 90% imported and whose incumbent source is the leading driver of deforestation in mainland Southeast Asia.

03Two SKUs, deliberately sequenced

SKU 1 — the dog ball material-led

A solid moulded ball is the correct first product for a new elastomer, for reasons that have nothing to do with dogs: it is single-material, single-process, and has no electronics, no certification surface, and no assembly. It exercises exactly one thing — can we compound, mould and cure this rubber to a consistent spec at volume. Every failure mode it exposes is a material or process failure, not a systems-integration failure. It is also a high-repeat consumable, so it generates reorder data fast.

SKU 2 — the RC bird-call toy capability-led

The second SKU exists to carry margin and differentiation, and it is where the estate already holds an unfair advantage: nx_bioacoustic_bench is a live ruler for animal-vocalisation realism, scoring on ten measured axes to a per-mille result.

axes: band ultra f0dyn hnr nonlin nonrep attack crest reson flux -> score (per-mille)
cfg-overrides-loaded=29

That matters because “exact replicas of bird noises” is otherwise an unfalsifiable marketing claim. With the bench, it becomes a number a competitor cannot assert their way past. Note what the axes encode: ultra (content above human hearing), nonrep (never exactly repeating), nonlin and hnr (the roughness and harmonic structure of a real syrinx). Those are precisely the axes on which recorded-and-looped playback fails a dog's ear.

The emitter now exists, and the thesis is measured

A ruler with nothing to measure is a comment. The only audio in the corpus was a game-music file and a stock sound effect, so nx_birdsynth was built to close the loop: a generative, integer-only, band-limited additive synthesiser that writes the same PCM the toy's DAC will eventually clock out. It is generative rather than sample-based on purpose — per-syllable phase jitter means no two utterances are sample-identical, which is the nonrep axis a sample player structurally cannot satisfy, and non-repetition is exactly what defeats habituation.

A harmonic is rendered only while k·f₀ < rate/2. That is correct DSP, and it turns the frequency-cutoff argument into an experiment: render the identical call, from the identical seed, at two sample rates and let the independent bench score both.

Bench axis96 kHz22.05 kHzDelta
score (overall realism)580514−66‰
ax_band (spectral spread)800183−77%
ax_ultra (content >20 kHz)530gone
ax_hnr (harmonic structure)807628−179
harmonics rendered84half

The 96 kHz render also scores above the estate's existing stock sound effect (455), so the emitter is already ahead of generic audio on the realism ruler at version one. The important number is ax_ultra going to exactly zero: at consumer sample rates the upper partials are not attenuated, they are absent. Consumer audio does not fail a dog by being low quality — it fails by being structurally incapable of carrying the signal.

Gate, not a claimSKU 2 still does not ship on this alone: scoring against reference recordings of real birds is the release gate, and that needs a licensed call corpus. What changed today is that the loop — emit, measure, iterate — is closed and running.

04The rent→buy engine

The operator's framing was “first rent then buy, cheap then enterprise — make it a reusable process.” Before building, I searched: nx_prim_query across 855 registered primitives returns zero matches for capex and tooling, and production returns only e-discovery gates. The rung genuinely did not exist.

nx_prodladder now does. Every acquisition tier is reduced to the same three-part shape, so tiers become directly comparable and choosing one is just argmin:

annual(V) = (capex + tooling) / life_years  +  fixed_annual  +  per_unit × V

V* = ceil( (standing_B − standing_A) / (per_unit_A − per_unit_B) )

That second line is the reusable process. It converts “when do we buy the machine?” from a judgement call into an integer — and it is the same arithmetic for a rubber ball, a moulded enclosure or a PCB run. The ladder is generic; only the data is product-specific.

Live output, on a labelled fixture:

Annual unitsTier chosenUnit cost
500rent / service bureau$8.00
2,000rent / service bureau$8.00
3,000lease$6.44step up
5,000buy$4.48step up
20,000buy$2.02

with the crossovers reported explicitly: rent→lease at 2,067 units/yr, lease→buy at 3,371 units/yr. Integer-exact in cents, no floating point, hand-checkable.

What the engine refuses to do

Tier economics live in a seg-store plane, not in the binary — adding a process is a data write, never a reship. And if the plane has no row for a process, the engine refuses and exits nonzero rather than substituting a plausible default:

nx_prodladder: REFUSED -- knowledge/store/prodladder- carries no rows for
process 'dogball_tks_rubber'.
  This organ does NOT substitute a plausible default: a fabricated
  break-even volume gets spent against.
Why refusal is the featureA capex ladder that invents its own capex is worse than no ladder: it emits a confident break-even volume that somebody spends real money against. The selftest proves the arithmetic on labelled synthetic fixtures; the plane carries the facts. Fixtures prove math, never market truth.

05Go-to-market sequence

The sequencing falls out of the ladder rather than being asserted over it.

PhaseProduction postureWhat it buys
P0 · proofservice bureau / job shopMaterial spec locked on SKU 1. Zero capital at risk. Failure is cheap and fast.
P1 · demand signalstill rentingReorder rate on a consumable is the only honest demand number. Rent until the ladder says otherwise.
P2 · step uplease, at the computed crossoverUnit cost falls; commitment stays reversible.
P3 · ownbuy, at the second crossoverMargin structure changes. Only justified by measured volume, never by optimism.
P4 · SKU 2inherits P2/P3 capacityBird-call toy ships once it passes the bioacoustic gate, onto a supply chain already proven by SKU 1.

The discipline this encodes: SKU 1 de-risks the material, SKU 2 monetises the capability, and no capital moves until a crossover volume says it should.

06What is not yet known

Stated plainly, because the engine is deliberately refusing to guess at it.

Open itemBlockingStatus
Kultra® price/kg, MOQ, current supply availabilityall unit economicsneed quote
Compression-mould tier economics (capex, tooling, cycle, per-unit)ladder rows for SKU 1need quote
Whether TKS rubber meets chew-toy durability + ASTM F963SKU 1 releaseuntested
Reference recordings of real birds (licensed corpus) + pass thresholdSKU 2 release gateemit→measure loop closed; needs real calls to score against
Real demand figuresGO/NO-GOresearch fetches must run

The estate's own product scorer independently reaches the same verdict — DESIGN-READY / DATA-PENDING, with four of five needs pending real fetches and an explicit note that no fabricated market or cost figures are permitted. The engine and the scorer agree, which is the point: the numbers to go get are now a short, named list rather than an open question.