[{"slug":"ZV-2026-0289","server_name":"seqbench.com","severity":"breaking","title":"seqbench.com: enzyme on golden_gate_from_parts narrowed to a closed enum (BsaI, BsmBI, BbsI, SapI); previously valid values may now be rejected.","summary":"[risky] Optional field mergePreAddedArms was added to cloning_simulate; may shift model behaviour. [breaking] enzyme on golden_gate_from_parts narrowed to a closed enum (BsaI, BsmBI, BbsI, SapI); previously valid values may now be rejected. [safe] Description of primer_specificity changed (13% word delta). [risky] Optional field intendedTemplate was added to primer_specificity; may shift model behaviour. [risky] Description of verify_assembly changed (38% word delta). [risky] Optional field dephosphorylateVector was added to verify_assembly; may shift model behaviour. [risky] Optional field mergePreAddedArms was added to verify_assembly; may shift model behaviour. [risky] Optional field vectorEnzyme3 was added to verify_assembly; may shift model behaviour. [risky] Optional field vectorEnzyme5 was added to verify_assembly; may shift model behaviour. [risky] Description of verify_construct changed (39% word delta).","changes":[{"kind":"input_property_added","path":"inputSchema.properties.mergePreAddedArms","tool":"cloning_simulate","after":{"type":"boolean","default":true,"description":"Gibson only. When two fragments already share terminal sequence, count that share ONCE (the default — it is a homology arm the fragments already carry) or set false to concatenate it twice. The second reading is the right one when the shared block is a genuine tandem repeat, e.g. a 2x tag or enhancer split between its copies: nothing in the two fragments can tell the two apart, so the choice belongs to the caller. Either way the share is reported in preAddedArms and both readings are returned in `readings`."},"detail":"Optional field `mergePreAddedArms` was added to `cloning_simulate`; may shift model behaviour.","severity":"risky"},{"kind":"enum_narrowed","path":"inputSchema.properties.enzyme","tool":"golden_gate_from_parts","after":"enum[BsaI,BsmBI,BbsI,SapI]","before":"open","detail":"`enzyme` on `golden_gate_from_parts` narrowed to a closed enum (BsaI, BsmBI, BbsI, SapI); previously valid values may now be rejected.","severity":"breaking"},{"kind":"description_changed","tool":"primer_specificity","after":"Self-hosted e-PCR-style screen for off-target amplicons predicted by a primer pair against a small set of curated reference genomes (currently: E. coli K-12 MG1655, B. subtilis 168, human mitochondrion rCRS, Mycoplasma hyorhinis SK76 — see genomesChecked in the response for the exact list, and note that the nuclear human and mouse genomes are NOT covered). Amplicons are 1-based inclusive on the plus strand; a product across a circular genome's origin reports an end lower than its start and sets wraps: true. This checks background/host-genome specificity, NOT whether the primers hit your intended target — pair it with in_silico_pcr against your own template for that. Each off-target end reports its 3' ANCHOR — the primer's unbroken run of matched bases at the extending end — with that anchor's nearest-neighbour ΔG and a margin against the intended, fully matched reaction, so a site can be told apart by WHERE its mismatches fall rather than only how many there are: one mismatch at the 5' end leaves a site nearly as strong, and one at the 3' base leaves it unable to prime at all. Batchable over candidate REVERSE primers against one fixed forward primer (screen many candidates against a shared partner) — not independent primer-pair batching, which this tool doesn't support. A primer may carry a non-templated 5' tail (a restriction site, a Gibson arm, a tag): the screen looks for a 3'-anchored annealing region as well as a full-length match, so a tailed cloning primer is screened rather than silently matching nothing. Each end's `anchor` is the annealed run, which is the length that matters for extension, and `start`/`end` are measured on the ANNEALED footprints — the bases each primer actually pairs with on the genome — so `length` (the product, tails included) equals end - start + 1 only for untailed primers. Screening a TAILED primer without `intendedTemplate` inflates every margin by the tail's own free energy, because nothing about an oligo says where its non-templated part ends; `intended.basis` reports which footprint the margins rest on.","before":"Self-hosted e-PCR-style screen for off-target amplicons predicted by a primer pair against a small set of curated reference genomes (currently: E. coli K-12 MG1655, B. subtilis 168, human mitochondrion rCRS, Mycoplasma hyorhinis SK76 — see genomesChecked in the response for the exact list, and note that the nuclear human and mouse genomes are NOT covered). Amplicons are 1-based inclusive on the plus strand; a product across a circular genome's origin reports an end lower than its start and sets wraps: true. This checks background/host-genome specificity, NOT whether the primers hit your intended target — pair it with in_silico_pcr against your own template for that. Each off-target end reports its 3' ANCHOR — the primer's unbroken run of matched bases at the extending end — with that anchor's nearest-neighbour ΔG and a margin against the intended, fully matched reaction, so a site can be told apart by WHERE its mismatches fall rather than only how many there are: one mismatch at the 5' end leaves a site nearly as strong, and one at the 3' base leaves it unable to prime at all. Batchable over candidate REVERSE primers against one fixed forward primer (screen many candidates against a shared partner) — not independent primer-pair batching, which this tool doesn't support. A primer may carry a non-templated 5' tail (a restriction site, a Gibson arm, a tag): the screen looks for a 3'-anchored annealing region as well as a full-length match, so a tailed cloning primer is screened rather than silently matching nothing. Each end's `anchor` is the annealed run, which is the length that matters for extension.","detail":"Description of `primer_specificity` changed (13% word delta).","severity":"safe","descriptionDelta":0.12690355329949243},{"kind":"input_property_added","path":"inputSchema.properties.intendedTemplate","tool":"primer_specificity","after":{"type":"string","description":"The template these primers are meant to amplify. Only their annealing footprints are read from it, so an amplicon, a plasmid or a cassette is always enough (at most 1,000,000 bp). Passing it is what makes closestCompetitorMargin true for a primer carrying a 5' tail: a tail is non-templated by definition, so nothing about the oligo says where it ends, and without a template the screen has to assume the whole oligo anneals — which credits the intended reaction with a duplex the tail cannot form ANYWHERE and inflates every margin by that tail's own free energy. Searched on both strands as given; a primer that cannot be found on it is an error rather than a silent fall back to the whole oligo."},"detail":"Optional field `intendedTemplate` was added to `primer_specificity`; may shift model behaviour.","severity":"risky"},{"kind":"description_changed","tool":"verify_assembly","after":"Deterministic self-check: given the same method/parts cloning_simulate would use (restriction-ligation, Gibson, or Golden Gate — optionally deriving a part by in-silico PCR first), re-derive the expected WHOLE product and diff it against a claimed final sequence. Returns pass/fail plus the exact position and nature of any discrepancy — not an opinion, the same deterministic simulation SeqBench already runs, run a second time as a check. A recipe that can give more than one molecule is checked against ALL of them and `matchedCandidate` names the one the claim matched: a non-directional ligation really does put the insert in both ways round (half the plate carries each), a vector cut more than twice offers more than one backbone, and a Gibson junction whose fragments already share terminal sequence has two honest readings (one homology arm, or a tandem repeat present twice). See verify_construct for a narrower, insert-only check that doesn't require declaring the vector/enzymes/method.","before":"Deterministic self-check: given the same method/parts cloning_simulate would use (restriction-ligation, Gibson, or Golden Gate — optionally deriving a part by in-silico PCR first), re-derive the expected WHOLE product and diff it against a claimed final sequence. Returns pass/fail plus the exact position and nature of any discrepancy — not an opinion, the same deterministic simulation SeqBench already runs, run a second time as a check. See verify_construct for a narrower, insert-only check that doesn't require declaring the vector/enzymes/method.","detail":"Description of `verify_assembly` changed (38% word delta).","severity":"risky","descriptionDelta":0.3846153846153846},{"kind":"input_property_added","path":"inputSchema.properties.dephosphorylateVector","tool":"verify_assembly","after":{"type":"boolean","default":false,"description":"The linearised vector was CIP/rSAP-dephosphorylated (restriction method). Affects the self-ligation background warnings, not the product."},"detail":"Optional field `dephosphorylateVector` was added to `verify_assembly`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.mergePreAddedArms","tool":"verify_assembly","after":{"type":"boolean","default":true,"description":"Gibson only. When two fragments already share terminal sequence, count that share ONCE (the default — the fragments already carry their arm) or set false to concatenate it twice, which is the right reading when the shared block is a genuine tandem repeat. You should rarely need this: the check tries BOTH readings and reports which one matched in `matchedCandidate`. Setting it restricts the check to one."},"detail":"Optional field `mergePreAddedArms` was added to `verify_assembly`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.vectorEnzyme3","tool":"verify_assembly","after":{"type":"string","description":"Vector 3′ enzyme (restriction method); defaults to enzyme3."},"detail":"Optional field `vectorEnzyme3` was added to `verify_assembly`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.vectorEnzyme5","tool":"verify_assembly","after":{"type":"string","description":"Vector 5′ enzyme (restriction method); defaults to enzyme5. Set a different, compatible enzyme (e.g. BglII for a BamHI insert) to verify heterologous-overhang cloning."},"detail":"Optional field `vectorEnzyme5` was added to `verify_assembly`; may shift model behaviour.","severity":"risky"},{"kind":"description_changed","tool":"verify_construct","after":"Re-derive a construct's insert from the PCR (template + primers) claimed to have produced it, then check — independently of that claim — whether the expected insert actually appears (either orientation) in the claimed final construct, at what identity, and with exact mismatch positions if not. Optionally also checks for a premature stop in a declared reading frame. Primers may carry a non-templated 5' tail (a restriction site, a Gibson arm, a tag): a construct missing ONLY tail bases still passes, since that is exactly what digesting a tailed amplicon removes before ligation — see match.templateCoveragePct and match.unalignedIsTailOnly, and note the pass does not establish that the right enzyme made the cut. This re-derives from the claim's own stated inputs; it does not review the claim's prose.","before":"Re-derive a construct's insert from the PCR (template + primers) claimed to have produced it, then check — independently of that claim — whether the expected insert actually appears (either orientation) in the claimed final construct, at what identity, and with exact mismatch positions if not. Optionally also checks for a premature stop in a declared reading frame. This re-derives from the claim's own stated inputs; it does not review the claim's prose.","detail":"Description of `verify_construct` changed (39% word delta).","severity":"risky","descriptionDelta":0.3870967741935484}],"published_at":"2026-08-22T10:22:29.253Z"}]