joris

Glossary

Plain-language definitions of the terms used across every analysis. Rendered directly from framework/04-glossary.md, which is where they are defined. Each analysis defines only the vocabulary specific to its own drug and disease.

04 — Glossary (generic)

Plain-language definitions of terms used across analyses. An analysis links here and defines only its own specific vocabulary locally (01-rules.md, rule 22). Add new generic terms here.

Clinical and regulatory

TermMeaning
Mechanism of action (MoA)How a drug works in the body.
Line of therapyWhich round of treatment a patient is on. First line is the first treatment; second line is the next after that fails.
Standard of careThe treatment patients normally receive today for that disease and stage.
Single-arm trialA trial with no comparison group. Every patient gets the drug; results are judged against historical results in similar patients.
Randomized controlled trial (RCT)A trial where patients are assigned by chance to the drug or to a comparator.
Open-label / blindedOpen-label means everyone knows who gets what. Blinded means they do not.
First / last patient in (FPI / LPI)When the first and last patients were enrolled.
Last patient out (LPO)When the last patient finishes follow-up.
Database lock (DBL)The point where trial data are finalised before analysis.
ToplineThe first high-level headline results of a trial.
Primary / secondary endpointThe main measure a trial is designed to prove; secondary measures support it.
Objective response rate (ORR)The share of patients whose tumours shrink by a set amount, measured by a standard rulebook (RECIST v1.1 in solid tumours).
Duration of response (DOR)How long a response lasts.
Progression-free survival (PFS)Time until the disease worsens or the patient dies.
Overall survival (OS)Time until death from any cause.
Clinical benefit rate (CBR)Share of patients with a response or prolonged stable disease.
Minimal clinically important difference (MCID)The smallest change patients actually notice or benefit from.
BiomarkerA measurable feature (often a protein or gene) used to select patients or track disease.
Companion diagnostic (CDx)A test that identifies which patients are likely to respond to a drug.
Antibody-drug conjugate (ADC)An antibody that carries a chemotherapy payload directly to tumour cells.
MyelosuppressionReduced production of blood cells by the bone marrow, causing low white cells, red cells or platelets.
SepsisA life-threatening reaction to infection. A risk when white-cell counts are low.
Synthetic lethalityTwo conditions each survivable alone but fatal in combination.
Accelerated approval (AA)An FDA route allowing earlier approval on a surrogate measure, with a confirmatory trial required afterwards.
Fast TrackAn FDA designation that speeds development and review for a serious disease with unmet need.
Breakthrough TherapyA stronger FDA designation for drugs showing substantial early improvement over available therapy.
Orphan DrugAn FDA designation for rare-disease drugs, carrying incentives and extra exclusivity.
PDUFA dateThe FDA’s target decision date for a drug application.
Advisory Committee (AdCom)An external expert panel that advises the FDA. Its vote is not binding.
Special Protocol Assessment (SPA)A written FDA agreement that a trial’s design is adequate to support approval.
Clinical holdAn FDA order pausing a trial, full or partial, usually over safety.
Health technology assessment (HTA)A national body’s review of whether a drug is worth funding (e.g. NICE in the UK, CADTH in Canada).
Key opinion leader (KOL)A senior clinician whose views shape practice in a disease area. A program document records them in two separate groups, because they are not the same kind of witness: investigators, who are paid by the trial and so have a relationship with its sponsor by construction, and independent voices, who are not. Each carries a name, a date, a source and its own conflict disclosure, or it is not recorded at all (01-rules.md, rule 40). See Independent voice and Conflicts checked in Framework and process, below.
DMPKDrug metabolism and pharmacokinetics: how the body absorbs, distributes and clears a drug.
CMCChemistry, manufacturing and controls: how the drug is made and quality-checked.

Financial and market

TermMeaning
Market capitalisationShare price × number of shares: the market’s price tag on the whole company.
SpotThe current share price — what one share trades at right now. “Spot” is the price everything else is measured against.
Price cacheThe daily price history kept in the repository itself, one file per ticker at data/prices/<TICKER>.json, rather than looked up fresh each time it is needed. Every figure derived from price — the 52-week range, a run-up entry or exit price, a realised peak — is read from it, so the same figure recomputes to the same number from the same commit however long afterwards, and a past date can be priced as honestly as today’s.
52-week positionWhere the last price sits between the 52-week low and the 52-week high, as a fraction: 0 at the low, 1 at the high. Derived from the price cache for whatever date is being asked about, rather than captured once at the moment of writing (03a-company-spec.md C.4). It is deliberately not clamped, so a price outside its own 52-week range shows as below 0 or above 1 instead of being pulled quietly back to the edge.
Enterprise value (EV)Market capitalisation minus cash. Closer to the cost of the business itself, since a buyer would also get the cash.
Cash runwayHow long the company’s cash lasts at its current spending rate.
BurnHow much cash the company spends per month or quarter.
DilutionRaising money by issuing new shares, which shrinks each existing holder’s share of the company.
Private placement (PIPE)Selling new shares directly to selected investors to raise cash.
Short interestThe share of a company’s stock that investors have bet against. High short interest signals scepticism, and can fuel sharp rallies on good news.
13FA quarterly filing in which large investment funds disclose their holdings.
Price targetAn analyst’s estimate of where a stock should trade in about twelve months. Wide disagreement between analysts is itself information. It is never an anchor for a scenario price range, because targets on small companies sit far above spot as a rule (01-rules.md, rule 30).
Run-upThe tendency of a stock to drift upward in the weeks before a major anticipated event. It is also the name of the third call a prediction scores, beside outcome-direction and stock-direction: a position taken before the event and closed before it lands. The call is pre-registered when the prediction is locked and never written afterwards (01-rules.md, rule 37), it carries an entry, an exit rule, a move band, a predicted peak and a priority score, and it is scored on its own rather than folded into the other two (05-prediction-protocol.md). A program whose readout date is not known well enough to time a trade carries no run-up call at all (01-rules.md, rule 39).
Run-up entryThe start of a run-up call: the date and price a position would have been taken at, and the reason for that date rather than another. In practice it is the prediction’s own lock date and the spot price on it.
Exit ruleWhen a run-up position closes, written as a rule relative to the earliest edge of the readout window rather than as a fixed calendar date, so the same rule keeps resolving to a correct date if the window itself moves. The three admissible rules are T-5, T-2 and T-1 trading days before the earliest edge (EXIT_RULES in lib/runup.mjs) — trading days, never months; see “T-5 / T-2 / T-1 (two different meanings)” in Framework and process, below. What the rule later resolves to, an actual exit date and price, is a separate fact recorded separately.
Move bandThe predicted share-price move from entry to exit, written as a low-to-high percentage range rather than a single figure, for the same reason every other modelled number in this framework is banded (01-rules.md, rule 10). At settlement the realised move is compared against it and whether the band contained it is recorded.
Predicted peakWhere and roughly when a run-up is expected to crest: a low-to-high percentage move from the entry price, with an estimated date. It need not sit inside the move band and need not fall on the exit date, because a peak can print and fade before the position closes.
Priority scoreOne number, higher first, ranking programs against each other as run-up trades. It combines seven scored drivers — unmet-need relevance, value-uplift potential, the probability of a positive outcome, date confidence, squeeze mechanics, priced-in-ness, and financing and clustering risk. Each driver carries its own score out of 100 and the reasoning behind it, because a score with nothing behind it is not evidence. The number is stored together with the version of the formula that produced it and is never recomputed when it is displayed, so a changed formula is a version bump a reader can diff rather than a silent drift (01-rules.md, rule 38). lib/runup.mjs is the one place the formula is implemented.
Priced-in-nessHow much of the expected move the market has already made before the event happens. Scored as one of the seven priority-score drivers, and scored as the room still left to run: a high score means the move has not been priced in yet and pushes the program up the ranking, which reads backwards from the name. Its computed part is the 52-week position; drift since the last catalyst, ownership crowding and the spread between analyst targets are read alongside it.
Exit-timing errorHow far a run-up’s planned exit missed the peak that actually printed, counted in trading days and signed. Positive means the peak came after the exit — sold early, value left on the table. Negative means the peak came before it — held too long, past the top. Zero means the exit landed on the peak’s own trading day.
Sell-the-newsWhen a stock falls on good news because the good news was already priced in.
OptionsContracts to buy or sell a stock at a set price by a set date. When traders expect a big move, options get more expensive.
StraddleA matched call and put at the same strike. Its combined price shows the size of move the market expects.
Implied moveHow large a price swing the options market is pricing around an event. Unreliable when the options barely trade.
Implied volatilityThe volatility level implied by options prices. A floor or ceiling value usually means missing data, not real volatility.
Open interestHow many option contracts are outstanding. High open interest with no volume still means the price is unreliable.
Peak salesThe highest annual sales a drug is expected to reach, some years after launch.
Expected net present value (eNPV)A drug’s future value in today’s money, adjusted for the probability of success.
RoyaltyA percentage of sales owed to whoever licensed the drug out.
Sublicensing incomeMoney received from partnering a drug to another company. A licence may take a share of it.
Milestone paymentA one-off payment triggered by a development or sales achievement.
Scenario price rangeThe price range the shares are expected to trade in if one side of a binary event lands. Two are written for each event, one for a positive result and one for a miss. It is a range and not a single price, because nobody can know where inside it the stock settles.
AnchorA named, checkable figure a scenario price range is built from, such as the cash per share the company holds or its 52-week low. Each anchor is tagged with its own evidence and carries a kind from the short list rule 30 admits (01-rules.md). A range with no anchors is a guess, so the framework does not allow one.
Event-move benchmarkA published average of how shares move on a class of clinical readouts — by trial phase, therapy area or trial design. It is a prior over a class, not evidence about one program, so it may shape a scenario range or a run-up band through the written basis beside it, but it is never an anchor and never counts toward the two a range requires (01-rules.md, rule 30). The tables, their source and their limits live in framework/07-benchmarks.md.
Expected valueThe two scenario prices weighted by the probability of each. If a stock is $10, the good case is $20, the bad case is $5, and the good case is 40% likely, the expected value is $11. It is arithmetic, not advice, and it is not a price target. Written out in full here because EV in this glossary already means enterprise value.
Market-implied probabilityThe chance of a positive result that the current share price already implies, given the two scenario prices (01-rules.md, rule 42).
Probability gapThe distance between our probability and the market-implied one, in percentage points. This is what a stock call claims to know (01-rules.md, rule 42).
Commercial value ceilingThe most a positive readout can add to a company: the drug’s value at approval times the probability of approval given a positive readout, assuming none of that value is priced in yet. An upper bound, not a forecast of the re-rating (01-rules.md, rule 43).
Economic shareThe fraction of a drug’s economics the company keeps after partnering, royalties and territorial splits. A fraction above 0 and up to 1, never a count of shares. A company that keeps none of the drug’s economics has no commercial value ceiling for it, declares the hole and takes a no-edge call (01-rules.md, rule 43).
Economic share countThe number of shares a per-share figure is divided by: common shares plus pre-funded warrants plus in-the-money warrants and options (03a-company-spec.md C.4). Not the economic share, which is a fraction of a drug’s economics rather than a count of shares.
Sales multipleThe multiple of peak annual sales an approved drug is worth, used to turn a sales forecast into a value.

Framework and process

TermMeaning
ProgramOne drug in one indication: a single row of a company’s drug list, with its own stage and its own expected event. A company can run several at once. Each program is keyed by the data feed’s own integer id, recorded as bpiq_drug_id.
PipelineAll of a company’s programs together, including the ones that have been stopped. The pipeline table in company.md lists every one, because a company that has shut programs down has a track record and its surviving programs carry more of the value.
MaterialityHow much a single program matters to the share price: dominant, meaningful, or immaterial. Good news on an immaterial program moves the stock very little, however good the science is.
Readout windowThe framework’s own judgement of when a program’s result is expected, and the single thing every timing decision reads instead of the data feed’s catalyst date. It is three dates. Earliest is the first date the readout could plausibly land. Likeliest is the single best guess, which need not be the midpoint of the other two. Latest is the last date it could plausibly land. All three are judged from the sources gathered for the program rather than copied from any one of them. Earliest is the edge everything is anchored on — the re-analysis cadence, the stock-call window, clustering, and a run-up’s entry and exit alike — because a position has to exist before the window opens, so the conservative edge is the one that matters. A window is legitimately absent when no source discloses a date at all, and nothing falls back to the feed’s placeholder in its place (01-rules.md, rule 23).
Readout precisionHow precisely a readout window is known: DAY when a source names a day, MONTH when a source names a month or a season, PERIOD when only a half, a quarter or a year is named, UNKNOWN when nothing is disclosed at all. UNKNOWN is a legal, first-class answer written out plainly, never an empty cell — being transparent that there is no date is the requirement, and inventing one is the failure this framework exists to prevent (01-rules.md, rule 33). The shared list is PRECISION in lib/paths.mjs.
Readout confidenceHow much the window judgement trusts the sources it was built from: HIGH, MEDIUM, LOW or UNKNOWN. It is a separate question from precision — a day can be named by a source you have reason to doubt, and a half-year can be as solid as the company’s guidance ever gets. UNKNOWN is legal here for the same reason it is legal for precision. READOUT_CONFIDENCE in lib/paths.mjs.
Readout disagreementWhether the sources behind a window agree with each other: NONE when there is only one source to judge, CONSISTENT when several agree, UNRESOLVED when they conflict. A disagreement is reported, saying which source points which way. It is never averaged away and never settled by picking one (01-rules.md, rule 24). READOUT_DISAGREEMENT in lib/paths.mjs.
Readout lag benchmarkThe gap between a trial’s registry primary-completion date and the day its sponsor actually announced topline results, collected for comparable completed trials in data/benchmarks/readout-lag.json. It is what a modelled readout estimate is measured against. Until a matching entry exists, the estimate uses the stated default of primary completion plus two to four months and says so in its own evidence tag; once one exists, the tag instead names how many comparable trials the figure rests on, so a reader can tell a stated default from a benchmarked estimate at a glance (01-rules.md, rule 34). An observation is added only after a trial has actually read out and both its dates are confirmed from a primary source — never estimated, interpolated or backfilled.
Date slippageHow often a company has pushed back the expected date of a readout, oldest statement first, read from the data feed’s note field and from the company’s own releases and recorded as part of the readout judgement. Repeated pushes signal execution risk; a date that never moves is evidence of the opposite. Zero slips is a finding too, and is written down as zero rather than left out.
Date confidenceHow well a readout date is known, scored from 0 to 100 out of readout precision crossed with readout confidence. One of the seven priority-score drivers, and the only one that works structurally rather than as another weighted term: the other six are multiplied by it, so a program whose date is not known well enough to time an entry or an exit cannot out-rank one whose date is, however attractive everything else about it looks. It floors at exactly zero when precision is UNKNOWN, and a program there carries no run-up call at all (01-rules.md, rule 39). lib/runup.mjs implements it.
Cadence gateA checkpoint at which a program is re-analysed as its readout approaches: 5 months, 2 months and 1 month before the earliest edge of its readout window (01-rules.md, rule 35). A gate is open once that distance is reached, and covered once a locked prediction sits inside that gate’s own span; an open gate no prediction covers is what makes a program due. The gates are derived fresh on every run from what is already on disk, never stored as a schedule, and a program with no readout window is reported as unschedulable rather than scheduled off the data feed’s placeholder date. A month here is a fixed 30 days, so a boundary does not shift with which months are being counted through. lib/cadence.mjs computes it.
T-5 / T-2 / T-1 (two different meanings)The same three labels name two unrelated things in this framework, and the unit is the only thing that separates them. A cadence gate’s T-5, T-2 and T-1 are counted in months before the readout window’s earliest date, and say when a program is re-analysed (01-rules.md, rule 35; GATES in lib/cadence.mjs). A run-up exit rule’s T-5, T-2 and T-1 are counted in trading days before that same date, and say when a position closes (EXIT_RULES in lib/runup.mjs). A cadence T-5 falls five months before the window opens; a run-up T-5 falls about a week before it. They are nowhere near each other, and reading one as the other would move a trade by months. The numbers are reused because 5/2/1 is memorable, not because the two things measure anything alike. Write the unit every time — “T-5 months” or “T-5 trading days” — and never a bare “T-5”.
Catalyst clusteringThe check for whether two catalysts on the same ticker land close enough together that a price move around either one cannot be attributed to it alone. Two rows conflict when their date ranges sit closer than CATALYST_CLUSTER_MIN_MONTHS apart — six months, in lib/paths.mjs, a judgement call rather than a figure derived from data. The check covers every row in the company’s pipeline table that carries a catalyst, analysed or not, because a program with no document of its own can still land inside another program’s window. An imprecise row widens rather than narrows, so it collides with more than a narrow one would: a false conflict costs a caveat sentence a reader can discount, while a missed one costs a stock call presented as clean when it was not. lib/clustering.mjs computes it.
AttributionWhat the clustering check concluded about one particular program: whether a price move around its own catalyst can be read as belonging to it alone, together with every conflicting row the check found. It is computed and transcribed, never judged by eye — a placeholder half-year and a real day can sit at opposite ends of the six-month bar in ways that are easy to misread. A program whose window is contaminated may not present its stock-direction call as though the move were attributable to it alone (01-rules.md, rule 36). It carries exactly one of the four statuses below.
CLEANNo other catalyst on the ticker lands close enough to conflict with this one. The list of conflicts is empty.
CONTAMINATEDAt least one conflict rests on a date somebody actually disclosed — a readout window of DAY or MONTH precision, or a pipeline row whose catalyst date is exact — on at least one of its two sides. That is a real collision rather than two placeholders touching, so it requires a note explaining it, and the stock-direction call must not be presented as attributable to this program alone.
INDETERMINATEConflicts exist, but every one of them is a guess on both sides: two PERIOD- or UNKNOWN-precision ranges merely touching. That is evidence of not knowing rather than a finding, and it is reported as its own answer instead of being folded into CONTAMINATED. No note is required on each conflict, because the only thing such a note could say is that the dates on both sides are placeholders, and repeating that on every one of them would teach a reader to stop reading the notes — but the stock-direction call must still say plainly that attribution could not be determined for this program.
WAIVEDAn analyst has read a CONTAMINATED or INDETERMINATE finding and judged that it does not contaminate this particular call. Only a person can decide it, the computation never produces it on its own, and it requires a note saying why.
Independent voiceA named commentator on a program’s endpoint who is not an investigator on its own trial and holds no disclosed relationship with its sponsor. “Independent” names the role being looked for, not a verified absence of bias; what makes that absence checkable rather than assumed is the record of where the search for conflicts was made. A disclosed relationship is a contradiction here rather than an ordinary finding, and moves the person into the investigator group instead. A panel of them is never collapsed into a single sentiment score, because one number hides exactly the conflict structure that makes the individual views worth reading (01-rules.md, rule 41).
Conflicts checkedThe record of where a search for one person’s conflicts of interest was actually performed, named source by named source, each with its date. Required beside every investigator and every independent voice, including — especially — the ones whose conflict list came back empty: an empty list is a finding only once the search behind it is on record, and never a default assumed from silence (01-rules.md, rule 40). It records that the search happened. It never certifies what the search did not find, because a thin journal disclosure policy, or a relationship formed after a paper was submitted, produces a clean-looking record for a person who is not clean.
Probability (modelled)The chance, written as a percentage, that a trial meets the exact success definition written down before the result is known. It is worked out from evidence rather than measured, so it is always labelled as modelled. A number can be scored afterwards; a word like “medium” cannot.
Probability bandThe range around a modelled probability, for example 55% to 75% around 65%. It says how firmly the single number is held. A probability without a band pretends to a precision it does not have.
Triage boardThe running list of screened candidates, built from every triage run. Screening is cheap and shallow, so nothing on the board may be cited in an analysis. It exists to decide what is worth analysing next, not to support a claim.
Board stateWhich of the four states a screened candidate is in: screened, shortlisted, dismissed or analysed. A candidate is in exactly one at a time.
ScreenedA candidate has appeared in at least one triage run and no decision has been taken on it. Taking no decision is a valid position and needs no record.
ShortlistedA person has marked the candidate as queued for a full analysis. It is what the next-shortlisted prompt reads when deciding what to offer.
DismissedA person has screened the candidate out. A dismissal carries both a dismissal reason and a written note, because a dismissal with neither is a deletion rather than a decision.
Dismissal reasonThe short tag attached to a dismissal, chosen from a fixed list such as financing-first or not-a-binary. The tag says what kind of dismissal it is, so dismissals can be counted; the note beside it says what specifically was wrong with that candidate. The list lives in data/triage/reasons.json.
AnalysedA full program analysis exists for the candidate. Never set by hand: it is read off the analyses on disk, so it cannot disagree with them.
Derived stateA state worked out from what is already on disk rather than typed by a person. Analysed and archived are derived, so they cannot drift from the analyses and the settled predictions they are read from.
Re-lockA superseding prediction produced without a new evidence sweep: the scenario ranges, expected value, run-up entry and bands are re-derived under the current calibration, while the probability, anchors, readout window and settlement definition are carried verbatim from the record it replaces. Allowed only while the underlying sweep is recent and a two-call currency check finds no intervening event, and its written rationale names it a re-lock, so the ledger can tell it from a refresh without a diff (06-prompts.md § Program re-lock; 05-prediction-protocol.md). A re-lock’s record covers a cadence gate exactly as a refresh’s would (01-rules.md, rule 35). The document wears the split visibly: a re-lock stamp sits beside the original header stamp, while as_of and the document’s framework version keep describing the evidence sweep (program.schema.json, relock).