Skip to content

Commit a9cc50d

Browse files
committed
concept-pipeline audit, four fixes. (a) delete the COMPOSE YOUR OWN section — the PolyaTailPass example was selling a python-side Pass trait extensibility surface that doesn't exist in the v1.1 engine (no Pass base class, no PassRuntime, no ir.with_appended_bases, no rt.rng.range / rt.trace.emit, no exp.add_pass) — same fictional API we already deleted from guide-custom-pass / guide-custom-shm, so this section comes out cleanly. lead paragraph "you can insert, replace, or reorder anything" was overstating the same composability and is softened to "call them in that order; the engine trusts you on the ordering and composes whichever passes you've requested" which matches what the engine actually enforces (it accepts wrong order silently, per the lesson-2 audit). (3) Phase 01 "Truth fields recorded" card replaced its fictional illustrative values (IGHV3-23*01 / IGHD3-10*01 / IGHJ4*02 / productive=True) with what seed=42 actually produces — IGHVF10-G38*04 / IGHD2-15*01 / IGHJ2*01 / v_trim_3=0 / d_trim_5_3=0/4 / j_trim_5=1 / np1=13 / np2=0 / productive=False — and adds an honest one-line note that this draw isn't productive (junction has a stop codon) and you can pass respect=ga.productive() at sample time to filter for productive draws only. (4) Next-chapter button target was concepts.html (the hub) but the heading reads "02 / The Persistent IR" — retargeted to concept-persistent-ir.html so the click matches the heading. (5) footer was using <footer class="footer"> (a different class than the standard <footer class="foot"> used everywhere else on the site), missing the License link and the AIRR-fields anchor — swapped to the standard foot shape with all three project links and the LICENSE pointer for consistency with the rest of the concept chapters and the index.
1 parent 5d6ee1f commit a9cc50d

1 file changed

Lines changed: 34 additions & 61 deletions

File tree

website/concept-pipeline.html

Lines changed: 34 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@
3838
<span class="eyebrow">Chapter 01 · The architecture</span>
3939
<h1>The Simulation Pipeline.</h1>
4040
<p class="lead">
41-
A GenAIRR simulation is a small composition of <em>passes</em> applied in a fixed order
42-
to a persistent IR. The DSL surfaces them as three phases —
43-
<b>recombine</b>, <b>mutate</b>, <b>corrupt</b> — because that's how biology and the lab
44-
actually happen. The engine surfaces them as a flat list of pure functions, so you can
45-
insert, replace, or reorder anything.
41+
A GenAIRR simulation is a small composition of <em>passes</em> applied to a persistent IR.
42+
The DSL surfaces them as three phases — <b>recombine</b>, <b>mutate</b>, <b>corrupt</b>
43+
because that's how biology and the lab actually happen. Call them in that order; the engine
44+
trusts you on the ordering and composes whichever passes you've requested.
4645
</p>
4746
</section>
4847

@@ -141,22 +140,21 @@ <h2>Recombination — building a clean V(D)J.</h2>
141140
</div>
142141
</div>
143142

144-
<!-- What's recorded -->
143+
<!-- What's recorded — actual seed=42 output -->
145144
<div class="ph-recorded">
146-
<div class="phr-head">Truth fields recorded</div>
145+
<div class="phr-head">Truth fields recorded (seed=42, real output)</div>
147146
<div class="phr-fields">
148-
<span class="phr-field"><span class="phr-k">truth_v_call</span> <span class="phr-v">IGHV3-23*01</span></span>
149-
<span class="phr-field"><span class="phr-k">truth_d_call</span> <span class="phr-v">IGHD3-10*01</span></span>
150-
<span class="phr-field"><span class="phr-k">truth_j_call</span> <span class="phr-v">IGHJ4*02</span></span>
151-
<span class="phr-field"><span class="phr-k">v_trim_3</span> <span class="phr-v">4 bp</span></span>
152-
<span class="phr-field"><span class="phr-k">d_trim_5 / 3</span> <span class="phr-v">2 / 3 bp</span></span>
147+
<span class="phr-field"><span class="phr-k">truth_v_call</span> <span class="phr-v">IGHVF10-G38*04</span></span>
148+
<span class="phr-field"><span class="phr-k">truth_d_call</span> <span class="phr-v">IGHD2-15*01</span></span>
149+
<span class="phr-field"><span class="phr-k">truth_j_call</span> <span class="phr-v">IGHJ2*01</span></span>
150+
<span class="phr-field"><span class="phr-k">v_trim_3</span> <span class="phr-v">0 bp</span></span>
151+
<span class="phr-field"><span class="phr-k">d_trim_5 / 3</span> <span class="phr-v">0 / 4 bp</span></span>
153152
<span class="phr-field"><span class="phr-k">j_trim_5</span> <span class="phr-v">1 bp</span></span>
154-
<span class="phr-field"><span class="phr-k">np1_length</span> <span class="phr-v">5 bp</span></span>
155-
<span class="phr-field"><span class="phr-k">np2_length</span> <span class="phr-v">4 bp</span></span>
156-
<span class="phr-field"><span class="phr-k">junction</span> <span class="phr-v">TGTGCG…GGGTGG</span></span>
157-
<span class="phr-field"><span class="phr-k">junction_aa</span> <span class="phr-v">CARDVPYAFDIW</span></span>
158-
<span class="phr-field"><span class="phr-k">productive</span> <span class="phr-v">True</span></span>
159-
<span class="phr-field phr-more">+ 16 segment-coordinate fields</span>
153+
<span class="phr-field"><span class="phr-k">np1_length</span> <span class="phr-v">13 bp</span></span>
154+
<span class="phr-field"><span class="phr-k">np2_length</span> <span class="phr-v">0 bp</span></span>
155+
<span class="phr-field"><span class="phr-k">junction_aa</span> <span class="phr-v">CVKDDGNSRIL*…WYFDLW</span></span>
156+
<span class="phr-field"><span class="phr-k">productive</span> <span class="phr-v">False</span></span>
157+
<span class="phr-field phr-more">this draw is non-productive (the junction contains a stop codon); pass <code>respect=ga.productive()</code> at sample time to filter</span>
160158
</div>
161159
</div>
162160
</section>
@@ -380,36 +378,6 @@ <h2>What stays true.</h2>
380378
</div>
381379
</section>
382380

383-
<!-- ================= COMPOSE YOUR OWN ================= -->
384-
<section class="page custom-pass">
385-
<div class="cp-rule"></div>
386-
<div class="cp-grid">
387-
<div class="cp-text">
388-
<span class="eyebrow">Open at the seams</span>
389-
<h2>Every pass is a function.<br>So is yours.</h2>
390-
<p>
391-
A pass is the <code>Pass</code> trait: it takes an IR, returns a new IR, and emits
392-
zero or more events into the trace. There's no privileged status for the built-ins —
393-
write your own pass, drop it into the chain, and it composes with everything else.
394-
The contracts still apply. The trace still records every choice.
395-
</p>
396-
</div>
397-
398-
<div class="cp-code">
399-
<pre class="code"><code><span class="c-k">class</span> <span class="c-cl">PolyaTailPass</span>(Pass):
400-
<span class="c-c">"""Append a poly-A tail of variable length."""</span>
401-
402-
<span class="c-k">def</span> <span class="c-fn">apply</span>(<span class="c-k">self</span>, ir: Simulation, rt: PassRuntime):
403-
n = rt.rng.range(<span class="c-n">20</span>, <span class="c-n">60</span>)
404-
ir = ir.with_appended_bases(<span class="c-s">"A"</span> * n)
405-
rt.trace.emit(<span class="c-s">"polya_added"</span>, length=n)
406-
<span class="c-k">return</span> ir
407-
408-
exp.add_pass(PolyaTailPass()) <span class="c-c"># composes with the rest</span></code></pre>
409-
</div>
410-
</div>
411-
</section>
412-
413381
<!-- ================= NEXT ================= -->
414382
<section class="page chapter-next">
415383
<div class="cn-rule"></div>
@@ -419,7 +387,7 @@ <h2>Every pass is a function.<br>So is yours.</h2>
419387
<h3>02 / The Persistent IR</h3>
420388
<p>Every base in its arena. Every revision a new layer. How "just clone the IR" makes
421389
branching, retries, and trace replay free.</p>
422-
<a class="btn btn-primary" href="concepts.html">Back to concepts</a>
390+
<a class="btn btn-primary" href="concept-persistent-ir.html">Open chapter 02</a>
423391
</div>
424392
<div class="cn-item">
425393
<span class="eyebrow">Or run it</span>
@@ -431,28 +399,33 @@ <h3>Walk a real molecule.</h3>
431399
</div>
432400
</section>
433401

434-
<footer class="footer">
435-
<div class="footer-inner">
436-
<div>
437-
<div class="brand"><span class="brand-mark">G</span><span>GenAIRR</span></div>
438-
<p class="footer-tag">Synthetic AIRR with ground truth.</p>
402+
<footer class="foot">
403+
<div class="foot-inner">
404+
<div class="foot-l">
405+
<div class="brand foot-brand">
406+
<span class="brand-mark">G</span>
407+
<span>GenAIRR</span>
408+
</div>
409+
<div class="foot-tag">Ground-truth AIRR simulation.</div>
439410
</div>
440-
<div class="footer-cols">
441-
<div>
442-
<h4>Learn</h4>
411+
<div class="foot-cols">
412+
<div class="foot-col">
413+
<div class="foot-head">Learn</div>
443414
<a href="learn.html">Tutorial</a>
444415
<a href="concepts.html">Concepts</a>
445416
<a href="guides.html">Guides</a>
446417
</div>
447-
<div>
448-
<h4>Reference</h4>
418+
<div class="foot-col">
419+
<div class="foot-head">Reference</div>
449420
<a href="reference.html">Python API</a>
450421
<a href="reference.html#configs">Configs</a>
422+
<a href="reference.html#airr">AIRR fields</a>
451423
</div>
452-
<div>
453-
<h4>Project</h4>
424+
<div class="foot-col">
425+
<div class="foot-head">Project</div>
454426
<a href="https://github.com/MuteJester/GenAIRR">GitHub</a>
455427
<a href="https://doi.org/10.1093/bib/bbae556">Cite</a>
428+
<a href="https://github.com/MuteJester/GenAIRR/blob/master/LICENSE">License</a>
456429
</div>
457430
</div>
458431
</div>

0 commit comments

Comments
 (0)