Zenith Movement Systems spec · how it works

Research-backed, and it has to prove it

Zenith publishes training content that claims to be grounded in real science. That claim is only worth something if the system can't fake it. So every stage, sourcing, sorting, sequencing, citing, is built so the model can never invent a source or overstate a finding. Here's the pipeline.

Systems
01 · research/fetchResearch.jsReal papers, or nothing

The foundation of the whole honesty claim: sources come from PubMed, pulled live through NCBI's API, parsed, and quality-scored. Nothing downstream can cite a paper that wasn't actually fetched here. The model is never the source of a citation, it only ever works with real papers this stage returned.

And they're not treated equally. Each paper is scored on study type (a meta-analysis outranks a case report) and recency, so stronger evidence surfaces first.

// papers scored on evidence quality, not just relevance
breakdown.studyType = bestType * cfg.weights.studyType;  // meta > RCT > ...

const age = new Date().getFullYear() - paper.year;
if (age <= cfg.recency.fullCreditYears) recencyPts = 10;   // recent = full credit
else if (age >= cfg.recency.zeroCreditYears) recencyPts = 0;  // old = none
02 · classifyRelevance · checkExerciseRelevanceSpend the model only on the hard cases

This is a pattern the system uses in two places, and it's my favorite piece of the design. Before anything goes to the model, a deterministic pass resolves every case it can for free. A movement whose muscle clearly belongs to the topic is relevant; one that clearly belongs to a different topic is irrelevant. Only the genuinely ambiguous middle, where cheap logic can't decide, is sent to Claude.

// each topic maps to the muscle tags that legitimately belong to it
const TOPIC_MUSCLES = { hamstring: ['hamstrings'], glute: ['glutes'],
                        core: ['abdominals', 'lower_back'], /* ... */ };

// obvious match -> relevant (free) | obvious mismatch -> irrelevant (free)
// everything else -> the Claude pass, batched — only the ambiguous middle

It's cheaper, and it's more honest: the model isn't asked to re-decide things that were never in doubt, so there's less surface for it to get a clear case wrong. The same shape is reused for research relevance and for exercise matching.

03 · content/sequenceProtocol.jsThe model doesn't order the workout

When the builder assembles a session, warmup then main work then cooldown, that ordering is fully deterministic. The comment in the file says it plainly: "Claude no longer orders movements." Exercises are bucketed by their source metadata and name signals, so the same selection always produces the same sequence, and partner or machine-only moves are auto-excluded and reported as gaps rather than silently dropped.

// deterministically bucket SOURCED exercises — same input, same output
exercises.forEach((e) => {
  if (isWarmup(e))      warmup.push(e);
  else if (isCooldown(e)) cooldown.push(e);
  else                 main.push(e);
});
// partner/machine moves -> excluded, reported as gaps (not hidden)
04 · content/verifyCitations.jsThe two-way citation check

The final gate, and the strictest. Every finding in a generated entry passes two checks and a topicality test. Check one is deterministic: the cited URL must trace to a paper actually in the fetched set. Check two is auditable model judgment: does the abstract actually support the claim, supported, overstated, or unsupported. And a finding can be perfectly supported yet still be the wrong kind of source (a supplement or off-topic clinical study), so it only passes if it's also on-topic.

// a finding PASSES only if all three hold:
pass: c.inSet                       // URL traces to a real fetched paper
   && verdict === 'supported'     // abstract backs the claim (model, audited)
   && !offTopic;                    // not a supplement/off-topic study

It doesn't rewrite anything. It reports how many findings passed and which need review, and a human decides. A mismatch is a flag, never something to smooth over in the prose.

05 · the whole pipelineWhy it holds together

Every stage draws the same line in a different place. Sourcing pulls real papers so citations can't be invented. Classification lets cheap logic handle the clear cases and only spends the model on genuine ambiguity. Sequencing is fully deterministic. And the citation gate treats any mismatch as a review flag, on purpose, its output shape deliberately mirrors the exercise-relevance check so both feed the same editorial gate. The system is built so that "research-backed" is a property it can actually enforce, not a phrase in the marketing.

The pattern: a brand that claims to be grounded in science needs a system that literally cannot cut the corner. Real sources, deterministic sorting and sequencing, and a citation check that flags overreach instead of rationalizing it. The model does the language. The pipeline guarantees the truth behind it.