Files
bikoret/vav_pipeline
Scott KarpandClaude Opus 4.7 d3869c5b75 l1_reader: document te'amim classification principle and shoresh derivation provenance
Two related Pass 2 findings — both about UNSTATED reasoning behind
hard-coded lists in L1Reader.

Finding G — te'amim classification principle:

@melekh_marks and @mesharet_marks were lists of strings with no
documented rule for which marks belong to which class. A future
reader saw the lists but not the deliberation. Added classification
principle to the comment block:

  - The diagnostic test: can the ta'am occupy a sof-pasuk-equivalent
    position? → melekh. Does it only serve a following melekh? →
    mesharet.
  - The hierarchy of melakhim corresponds to syntactic depth
    (sof_pasuk → etnachta → zaqef → tipcha → revia → …).
  - Mesharetim precede their melakhim — the servant goes before
    the king.
  - The classification is BINDING for havdalah: treating a mesharet
    as a phrase-end is a small gilui_arayot.
  - Source authority: Yeivin's Tiberian Masorah §174-§268.
  - Maintenance rule: if OSHB ever encodes a ta'am with a different
    name, BOTH lists must be updated.

Finding H — shoresh derivation provenance:

extract_roots/1 returned a flat root → gematria map without recording
which derivational opinion produced each shoresh. For triliterals
this rarely matters; for weak roots and biliterals it matters
constantly (e.g. וְנָתַתִּי in Devarim 11:14 — OSHB records נת,
classical analysis often gives נתן with assimilated nun). Added
provenance note to the function docstring:

  - The shoresh comes from OSHB lemma database via build_l1.py
  - OSHB pins one root per word at build time; L1 JSON does not
    record which derivational opinion produced it
  - Downstream consumers MUST NOT treat the returned shoresh as
    unique-truth
  - The Talmudic Engine should record the derivational source
    in coupling_trace when a shoresh-based ruling enters L3 —
    otherwise a future re-derivation cannot be reconciled with
    prior opinions stored on top of the OSHB choice
  - Preserving derivational alternatives belongs in the build_l1.py
    enrichment pass, not in this read function

Both docstrings make the WHY visible; the WHAT was already there.
No code change. Tests pass unchanged (288 in vav_pipeline,
8 in shema_voice_trajectory_test).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 12:02:05 -04:00
..
2026-02-26 14:02:34 -05:00
2026-02-26 14:02:34 -05:00

VavPipeline

TODO: Add description

Installation

If available in Hex, the package can be installed by adding vav_pipeline to your list of dependencies in mix.exs:

def deps do
  [
    {:vav_pipeline, "~> 0.1.0"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/vav_pipeline.