| name | nahw |
| description | Decide how SENTENCE CONTEXT changes the correct gloss of an Arabic token — particles, prepositions, pronouns, negation, conditionals, relatives, iḍāfa, jar-majrūr, case/mood, referent. Use when sarf alone cannot pick the sense, when a particle is multi-function, or when a gloss is lexically valid but contextually wrong. Encodes the exact context mistakes fought in qamus-highlight. |
Nahw (syntax) skill
Sarf finds the form; nahw decides what it means here. A gloss can be perfectly lexical and still wrong for
its āyah. This skill is operational, not a grammar primer: it tells you when context resolves a sense and
when it forces pending.
⚠️ Grammar-safety (GrammarProblems eval gate). General LLM confidence is not evidence; grammar decisions
require the sarf/nahw evidence ladders. A correct answer with wrong iʿrāb reasoning is unsafe — do not ship
it. An independent study put a general LLM at ~33% on Arabic naḥw (worst on iʿrāb/deep/essay), so iʿrāb,
case/mood, istithnāʾ, لا النافية للجنس, ambiguous iḍāfa/jar-majrūr, multi-sense, and referent-sensitive
decisions require two independent checks agreeing on conclusion AND reason. Uncertain naḥw → pending, never
a public gloss. Gates: evals/grammar-decision-gates.json; policy:
qamus/reports/grammar-risk-policy.md; drill:
drills/grammar-reasoning-safety.md.
Procedures (progressive disclosure — load the one you need)
This SKILL is the fast context gate + contract; each step is a short procedure. Open only what the task needs.
procedures/particle-decision.md — content-letter harakah; مَن/مِن، لَمْ/لِمَ.
procedures/particle-function-decision.md — pick a particle's FUNCTION in context (مَا/إِنْ/لَا/فاء/واو/لام/أَلَا-أَلَّا); see references/particle-functions.md.
procedures/function-token-hover-review.md — require the visible hover to preserve a token's function contribution.
procedures/ma-function-decision.md — classify ما/وما as negative, relative, interrogative, masdariyya, conditional, laysa-like, or preventive.
procedures/governing-particle-mood-review.md — connect particles to verb case/mood and tense effect.
procedures/irab-teaching-diagnosis.md — produce the iʿrāb (role·case/mood·governor) or diagnose the learner/draft error; answer AND reasoning.
procedures/preposition-pronoun.md — jar-majrūr wording by referent; إِلَيْنَا guard.
procedures/negation.md — لَمْ/لَنْ/لَا/مَا/لَيْسَ scope → tense/polarity.
procedures/relative-interrogative.md — مَا/مَن/أَيّ relative vs interrogative vs negation.
procedures/conditionals.md — إِنْ/إِذَا/لَوْ + the إِنْ "if" vs إِنَّ "indeed" collision.
procedures/idafa-jar-majrur.md — construct relationship + definiteness.
procedures/pp-attachment-review.md — decide the PP head: verb, nominal, hidden hāl, hidden ṣifa, or clause.
procedures/irab-case-mood.md — case/mood reading → why it forces the two-vote gate.
procedures/referent-context.md — referent guard, divine-Name vs attribute, contronyms.
procedures/token-only-overrides.md — exact-address token overrides when surface/parse families are unsafe.
procedures/exception-and-vocative-review.md — route vocative and exceptive structures with governed case roles.
procedures/grammar-risk-gate.md — the GrammarProblems gate (answer AND reason).
procedures/grammar-problems-issue-clusters.md — Phase 3.5 grouped issue buckets before corpus-facing authoring.
procedures/hover-application.md — syntax-sensitive tokens → precise pending, not a one-word gloss.
procedures/bulk-source-triangulation.md — route bulk pending-table rows by context risk before any hover decision.
procedures/qamus-entry-authoring.md — nahw evidence → function-word/construction entry candidate.
procedures/corpus-to-qamus.md — the nahw half of the corpus→Qamus pipeline.
procedures/largelexicon-function-token-routing.md — largelexicon function-token, source-crosswalk, source-card repair, and packet-only routing.
procedures/plan15-nahw-route-families.md — Plan 15 nahw-owned routes: governor_irab_fixture_needed, particle_function_rule_needed.
Largelexicon / Plan 15 Routing
When a task mentions largelexicon, Plan 15, qword denominator, all-qword closure, source-card repair,
source-crosswalk, rich hover coloring, or Qamus rollout, decide syntax/function only after source identity is stable.
A qword denominator row or source-crosswalk packet is packet-only until accepted; it is not learner-visible as a
finished hover.
Nahw-owned Plan 15 routes are governor_irab_fixture_needed and particle_function_rule_needed. Use them for
function tokens and grammar-sensitive rows such as أَمْ, لَهُمْ, وَمَا, bāʾ/lām relations, particle clusters,
preposition + majrūr host, and right-gloss/wrong-iʿrāb evidence. Sarf can segment pieces, but nahw certifies the
function, governor, attachment, and phrase-vs-token contribution. Source-card repair and source-crosswalk repair
outrank a syntax guess.
Rules (rules/): particle-context, preposition-pronoun, negation, irab-safety-gates, grammar-problems-gates,
grammar-problems-issue-clusters,
two-vote-required-rules, context-sense, state-transition-rules (the syntax side of the
language state machine: مَن/مِن، لَمْ/لِمَ، أَن/إِن/أَنَّ/إِنَّ
forbidden collisions). Evals (evals/): grammar-problems-matrix, grammar-problems-derived-eval.jsonl
(≥72 cases, run via tools/run_grammar_evals.py +
tools/grade_grammar_reasoning.py), nahw-state-machine-eval, hover-context-eval,
particle-function-eval.jsonl (each particle × its functions, machine-testable),
irab-polysemy-eval.jsonl (per-loc iʿrāb regressions: وما/أَلَّا/فما/عاد/جنّة/أمّة/يقدر/حليم).
References (references/): particles, idafa, jar-majrur, irab-case-mood, quranic-nahw-notes,
particle-functions (closed-class function map), irab-teaching-map (zero→fluency iʿrāb spine),
learner-error-remediation (syntax failure modes → fix).
Curriculum (curriculum/): zero-to-fluency-nahw.md + beginner/intermediate/advanced drills;
drills/particle-disambiguation.md + drills/irab-case-mood.md.
1. Purpose
Choose the context-correct gloss (or an honest pending) for tokens whose meaning depends on the sentence:
particles, prepositions+pronouns, negation/mood, contronyms, multi-sense roots, referents, iḍāfa.
2. Input contract
A token + quran_ref/token_loc + the surrounding tokens (and, if known, the sarf output object). For a
Qurʾānic token, you MAY consult any available source adapter for iʿrāb/role evidence (see sources/README.md)
— optional, internal-only, never named here, never public, and never outranking the Qamus entry or the reasoning
gate.
3. Output contract
{
"quran_ref": "28:82", "token_loc": "28:82:7", "surface_ar": "وَيَقْدِرُ",
"phrase_context": "verbal phrase", "syntactic_role": "verb",
"nearby_tokens": ["اللَّهَ","يَبْسُطُ","الرِّزْقَ","لِمَن","يَشَاءُ","وَيَقْدِرُ"],
"particle_context": ["و"], "governing_particle": null, "case_or_mood_signal": "indicative_or_unknown",
"function_class": "none | oath_waw | comitative_waw | cause_fa | preventive_ma | negative_ma_like_laysa | pp_attachment | exception | vocative | clause_link",
"attachment": {"head": null, "relation": null},
"composition": {"proclitic_functions": [], "host_role": null, "suffix_roles": []},
"parse_key": {"key": "CONJ+V:I:IMPF:ACT:3MS", "summary": "coordinating waw plus indicative imperfect verb"},
"display": {"palette": "qamus-grammar-v1", "segments": [
{"segment_index": 0, "role": "prefix_conjunction", "class": "qg-particle", "label": "CONJ"},
{"segment_index": 1, "role": "stem", "class": "qg-verb", "label": "STEM"}
]},
"candidate_glosses": ["ordains","restricts"], "contextual_choice": "restricts",
"decision": "resolved | pending", "reason": "paired with يبسط الرزق; contrast indicates restricts",
"confidence": "medium", "allowed_for_hover": true
}
4. Particle decision ladder
Read the content-letter harakah (not the first letter): مَن(fatḥa "who") vs مِن(kasra "from", incl. وَمِنَ);
لَمْ vs لِمَ; أَنْ vs إِنَّ; أَنَّى("how") vs أَنِّي("that I"); إِلَّا vs لَا; مَا = negation/relative/interrogative by
context. Particles are diacritic- AND context-sensitive.
5. Preposition decision ladder
The same preposition renders differently by referent: بِهِ "with/by/in it"; لَهُ "for/to him, belongs to him";
عِنْدَ "with/near/in the sight of"; إِلَيْنَا "to us" (jar-majrūr — not root ل ي ن "soft").
6. Pronoun / suffix handling
Attached pronouns ـه/ـها/ـهم/ـكم/ـنا change the wording but not the head sense; do not let a suffix invent a
new stem (and never confuse a tanwīn-alef with the pronoun نا).
For verbs, attached object pronouns are part of the user-visible meaning. Preserve the subject agreement and the
object referent/person/number/gender where material: جَادَلُوكَ is not "to argue; dispute", but a plural subject
arguing/disputing with "you" masculine singular in context.
7. Negation handling
لَمْ → past negation + jussive; لَنْ → future negation; لَا → negation / prohibition / "no"; مَا → negation or
other roles. A hover gloss must respect the governing negative if it changes the meaning.
8. Conditionals & relative pronouns
مَن / مَا / إِنْ / إِذَا can be conditional or relative; the apodosis (jawāb) signals which. Distinguish from the
homographic prepositions مِن / and the temporal لَمَّا.
9. Iḍāfa & jar-majrūr
A genitive construction or preposition+noun changes gloss wording; gloss the phrase role, not just the
lexeme.
Attached باء on a majrūr noun must carry the bāʾ function in the hover. If the entry is بِـ, host-only glosses like
"peace" for بِسَلَـٰمٍ or "Badr" for بِبَدْرٍ are incomplete; use the context sense ("with peace", "at Badr", etc.)
or leave a precise pending when the bāʾ function is not certified.
The visible hover is the contract: do not rely on a hidden pre field to teach a relation that the tooltip's best
gloss omits. A token such as بِسَلَـٰمٍ needs the preposition inside the best hover text when that is what the page
shows.
For any future rich hover, nahw must also make the syntax side of the parse-key/display contract renderable:
parse_key.key (compact ASCII), parse_key.summary, and one qamus-grammar-v1 display class per visible function
segment or phrase role. Use qg-particle, qg-preposition, qg-oath, qg-comitative, qg-result,
qg-relative, qg-vocative, qg-exception, and qg-relation for syntactic functions. If the function, governor,
attachment, clause role, or iʿrāb is not certified, rich-hover rendering is not ready; route to two-vote,
scholar, owner, or precise pending.
When the renderer has role-aware classes, prefer function-specific display roles such as qg-conjunction,
qg-result-fa, qg-lam, qg-ma-particle, qg-preposition, and qg-article instead of collapsing every
function piece into a generic particle color. The learner should be able to see why a wāw is coordination, an oath,
or comitative; why a fāʾ is result/resumption; and what lām or mā is doing in context.
If the function is adverbial or ẓarf-like, do not invent an unsupported qg-adverb class. Use the nearest supported
class for the written piece (qg-particle, qg-preposition, or qg-relation as appropriate) and state the
adverbial role in nahw.function, parse_key.summary, and the learner-facing explanation.
The standalone parser (tools/fusha_standalone_parse.py) is allowed to pre-route syntax-sensitive tokens, but it
does not certify function. Treat context_candidates as an exact nahw question: وما remains wāw plus
function-specific mā pending context; بالكتاب shows bāʾ + article + host but still needs a jar-majrūr/context
decision for RH-LIVE; إنما and لمّا are particle clusters whose function cannot be flattened into one English
gloss. If parser preview and hover disagree, produce a nahw repair/test packet or scholar/iʿrāb packet; do not call
the page complete merely because some color exists.
Largelexicon collision safety is a nahw gate as well as a sarf gate. Short
function-like surfaces such as من, لا, إلا, أم, لهم, and clusters such
as وما must route by function/context, not by first lexicon row. A larger
Qamus table may surface a valid homograph (مَنَّ, إِلًّا, lām + pronoun),
but arbitrary text remains pending_context or lexical_collision_requires_context
until nahw supplies the function, governor, and phrase-vs-token contribution.
Learner-facing tooltip prose must explain Arabic, not workflow. Do not put source-boundary, authoring-process,
deployment, owner-authorization, or internal-evidence statements in a public hover explanation. Those statements
belong in reports, admin gates, and validation logs.
10. Verb–subject–object context
The object/construction can fix a polysemous verb: أَتَى = come/bring/give/commit by object; يَقْدِرُ in a rizq
context contrasting يَبْسُط = "restricts".
11. Nominal-sentence context
Mubtadaʾ/khabar with no verb; a "to be" verb is implied, not lexical.
12. Referent / context guard
Do not propagate: a divine-Name sense onto a human attribute (حَلِيمٌ for Ibrāhīm = "forbearing", not a
Name); a Prophet's proper name onto a common adjective (صَٰلِحًا); a proper-noun sense onto an ordinary noun; an
ordinary verb gloss onto a proper noun.
13. When to resolve vs pending
Resolve when the construction uniquely fixes the sense. Otherwise emit
pending: context-sensitive; needs nahw review with the precise blocker.
14. How to author a qamus grammatical gloss
Write a concise, original English rendering of the function in context (e.g. مَن→"whoever", وَمِنَ→"and from",
بِهِ→"in it"); keep src=qamus/authored; record informed_by internally only.
15. How to update qamus-highlight pending reasons
Map this decision to: pending_reason, an authored-gloss candidate, a sense_quarantine, a source-address
note, or the review queue.
16. Regression examples
examples/function-word-decisions.jsonl + examples/ayah-context-decisions.jsonl — real qamus-highlight cases.
Production finding (hover polish — وَمَا and attached باء)
وَمَا is one Qur'anic word token but two syntactic pieces: wāw + mā. Do not count it as two corpus word tokens,
but do decompose it for the hover gloss. The mā may be relative/maṣdariyyah, interrogative, or negative; use
iʿrāb/context evidence before authoring ("and by the One Who", "and not", "and no" are different decisions).
When ما acts like laysa or as preventive/kāffa after an accusative particle, the parse record must say so; the
hover cannot be selected from a default ma = what/that/not table.
For attached بِـ, the hover must include the preposition's role, not only the governed noun.
For oath waw (واو القسم), the hover must include the oath relation; a governed noun like وَالتِّينِ is not merely
"fig". For attached وَبِـ before a governed noun, preserve both the coordination/resumption and the bāʾ relation
where they are certified, e.g. وَبِالنَّجْمِ as "and by/through the star(s)", not a pending host-only token.
For bāʾ plus possessive suffixes, include both the prepositional relation and the pronoun contribution: بِذُنُوبِهِمْ
is not "Sin.", and بِذُنُوبِكُم is not a generic suffix pending when iʿrāb confirms bāʾ + majrūr noun + possessive
suffix.
Production finding (morphosyntax contract — particles, phrases, clauses)
Before authoring a hover for a function-bearing token, classify the syntactic function, not only the surface
particle:
و may be ordinary coordination, oath-preposition, or comitative wāw. Oath and comitative uses must surface
their contribution; do not collapse them into a bare "and" or a host-only noun hover.
ف may be resumption, coordination, result in a conditional answer, supplemental, or cause. Cause ف can govern
a following imperfect verb into the subjunctive and must not be treated like ordinary "and/then".
أ/hamza may be interrogative or equalization. Equalization hamza contributes "whether" and is not an ordinary
question.
إن and sisters take ism_inna and khabar_inna; negative لا can act like أن; preventive ما can block an
accusative particle's normal case effect.
- Jar-majrūr has two layers: the preposition governs a genitive nominal, and the resulting PP attaches to a verb,
nominal, hidden hāl, hidden ṣifa, clause, or other explicit head.
- Relative pronouns, subordinating conjunctions, purpose lām, and temporal conditionals must record their clause
relation (
relative_clause, subordinate_clause, purpose_clause, temporal_condition, answer_of_condition).
- Hāl, interrogative hāl, mafʿūl li-ajlih, and mafʿūl maʿahu are adverbial accusatives; the hover may be concise,
but the parse record must preserve case, role, and attachment.
- Vocative particles and exceptive particles must preserve the governed noun structure; for exceptions record the
mustathnā minhu, mustathnā, and whether the construction is muttaṣil, munqaṭiʿ, or mufarragh.
Production finding (VN-00 public visual ANDON)
VN-00 public readback found common grammar tokens that were draft-only, flat, or generic despite solved peers.
These are false closure, not acceptable page completion:
هَلْ must be a question particle with a function-specific qg role, not a generic token shell.
إِنَّكُم and لَعَلَّهُمْ must expose the particle/function host plus attached plural pronoun.
مَا and وَمَا require contextual mā classification before transclusion; a default table gloss is not enough.
فِيهَآ, دُونِهِمْ, and similar preposition/host plus pronoun rows must expose both the relation and the
attached pronoun.
- v016 added
إِنِّىٓ, أَحَدُهُمَآ, and article-plus-host rows such as وَٱلشَّمْسَ, وَٱلْقَمَرَ,
ٱلْءَايَةَ, and ٱلْعَيْنِ: attached pronouns, waw, and the definite article are learner-visible grammar
pieces, not optional metadata.
- n0030/v030 repeated the relation-plus-pronoun and particle-cluster problem:
لَهُمْ, بِهِۦ, وَلَهُمْ, فِيهَآ, لَكُمْ, عَلَيْكُمْ, and
لَعَلَّكُمْ must expose the relation or particle role plus attached
pronoun. وَإِن and أَنَّكُمْ must be context-classified instead of left
as a generic function-token shell.
يَوْمَئِذٍۢ requires temporal-expression review: يَوْمَ is the time noun and ئِذٍۢ is the attached
"then/that time" element. Do not accept a bare "day" hover as rich closure.
- Tanwin/case endings must not be used as opaque public grammar labels. Explain
them as small ending marks tied to the certified governor/context, and do not
let the renderer color a base letter when only the diacritic is being taught.
- v045 added validator-sensitive context traps:
فِيهَا/فِيهِ must surface as فِي plus attached pronoun, not
a fake fāʾ+noun stem; لَّدُنكَ needs a supported relation/preposition class plus attached كَ; بُطُونِ
may be definite in English only by context, not by a hidden article; and وَٱلرُّمَّانَ needs visible wāw +
article + lexical host without mislabeling final انَ as dual.
- v003 added the common-particle/proclitic addendum:
لِمُؤْمِنٍ, أَن, and وَيَأْمَنُوا۟ are not closed if
they only display a phrase-like translation. The lām, wāw, subordinating أَن, governed host, and attached
pronoun or plural role must be visible where the public hover claims pedagogical completeness. Same-surface
particle peers are reuse candidates only after context/function checks; if the context is uncertain, route the
row to particle_function_rule_needed, governor_irab_fixture_needed, or scholar review instead of shipping a
generic function-token gloss.
- Batch05a added a postdeploy projection gate:
لَكَفَّرْنَا is not closed when its opening lām/function and
attached subject role are unclear, and بِكُفْرِهِمْ is not closed when bāʾ, host, and attached possessive
pronoun are not learner-visible. A source-addressed row may still fail nahw if the public layer hides the
function role, pronoun contribution, or phrase-vs-token relation.
- Batch05d merge09/merge10 added a function-token projection gate:
فَإِذَا is not closed merely because it
has an exact occurrence payload. The fāʾ prefix, إِذَا particle role, and following-clause trigger must project
through the public hover or the row routes to a nahw/source-edge blocker before reuse.
Same-surface or equivalent-function rich peers are transclusion obligations. If a page has a weaker public payload,
emit a replacement/append candidate or an exact nahw blocker before any visual_complete claim.
Governor / iʿrāb / dependency candidate lattice (the P2 grammar-checker engine)
The checker now emits a conservative governor/dependency candidate lattice — the executable form of the grammar-safety gate
above. A dependency edge points a dependent at a governor (ʿāmil) with a governor_justification. Use it whenever you assign or
review a case/mood.
- Case/mood is a CONSEQUENCE of a stated governor. Assert a case only together with the governing element that licenses it.
Naming the right ending with an absent or wrong governor is
governor_not_justified = right answer, wrong reason — UNSAFE,
routed to scholar / two-vote, never auto_safe. This class is in fusha_check.IRAB_SENSITIVE_ISSUE_CLASSES.
- Resolve only the layer-1-safe rule, and only with evidence. A standalone preposition governs the following noun in the genitive
— resolve this only when the ending is confirmed (voweled / source-addressed). For arbitrary/unvoweled input the ending is not
visible, so even this stays a candidate (gate ≥ two_vote), never resolved.
- PP-attachment stays UNRESOLVED unless justified. Which head a prepositional phrase attaches to (verb / nominal / hidden hāl /
hidden ṣifa / clause) is not decidable from the surface — keep it unresolved; never pick a head without evidence.
- iḍāfa keeps its alternatives. A bare noun+noun is ambiguous: muḍāf-ilayh (genitive) OR a nominal sentence (mubtadaʾ + khabar,
nominative) OR ṣifa / badal. Keep all readings; assert a case only when the ending is visible.
- Coordinating wāw is HEADLESS. A coordinating wāw has no single governor; never invent one.
- Single-governor spine. Each governed node has at most one head (headless allowed for the coordinating wāw); a resolved governed
token needs a head.
- iʿrāb suggestion-gating. A correction that touches case/mood/governor is never
auto_safe without a stated governor
justification. Prefer abstain/reject (reject_reason='governor_not_justified') over a wrong fix; route to nahw / scholar review.
- CEFR is scaffolding, not certification. Expose iʿrāb terminology and governor reasoning only at C1+; A1/A2 stay plain. The level
is caller-supplied; the skill never asserts or certifies a learner's level.
- The lattice feeds rich-hover + learner feedback. A justified edge feeds the rich-hover parse key +
qg-* coloring (§9); a
diagnostic becomes a Point→Teach→Bottom-out learner event whose Teach references the cause (the governor) and whose Bottom-out is
withheld past the gate.
Executable gates (the source of truth — consult, never restate):
tools/fusha_governor.py (build_dependency_lattice) builds the lattice;
tools/validate_dependency_lattice.py enforces it;
qamus/schemas/dependency-candidate-lattice.schema.json is the field
contract; tools/fusha_conflicts.py surfaces a morphology↔governor or verdict↔suggestion conflict
(it never picks a side); tools/fusha_suggest.py gates iʿrāb corrections;
tools/fusha_learner_feedback.py is the hint ladder;
tools/fusha_cefr_gate.py gates explanation depth. Procedures:
procedures/governor-dependency-lattice.md,
procedures/irab-right-answer-wrong-reason.md,
procedures/suggestion-gating-for-irab.md; fields:
references/dependency-candidate-fields.md; evals:
evals/governor-dependency-lattice.jsonl,
evals/irab-right-answer-wrong-reason.jsonl.
The six nahw principles (encode these)
- Particles are context-sensitive — handle مَن/مِن، لَمْ/لِمَ، أَنْ/إِنَّ، أَنَّى/أَنِّي، إِلَّا/لَا، مَا by diacritic and
context.
- Jar-majrūr & iḍāfa change wording — بِهِ، لَهُ، عِنْدَ، إِلَيْنَا render by referent/role.
- Negation & mood matter — respect لم/لن/لا/ما's effect on the governed verb.
- Context resolves contronyms & multi-sense roots — يَقْدِرُ→"restricts" in rizq context; حذّر→"warn";
أتى by object; ملك/مُلك/مَلَك by vowels/context.
- Referent matters — never carry a Name/Prophet/proper-noun sense to a common word, or vice-versa.
- Prefer phrase-aware pending over a wrong one-word gloss.
How nahw feeds the rest
- Qamus entry authoring/repair: better sense selection, usage notes, teacher notes.
- Hover-gloss: context-aware sense; distinguishes مَن/مِن، لَم/لِمَ، أن/إن; avoids referent errors; honest pending.
- Pending-reason refinement: turns vague pendings into precise, reviewable reasons.
- Catalogues: classifies particle/construction candidates from Nawawī40/Ṣaḥīḥayn.
Do not resolve; mark pending (examples)
- A bare لا before a noun vs a verb (لا النافية للجنس vs verbal negation) when the next token's POS is unknown.
- مَا with no clear negation/relative/interrogative signal.
- A multi-sense root with no disambiguating object/referent in range.
Production finding (P4/P5)
A surface-keyed gloss is safe only with the harakāt guard in place: وَمِنَ "and from" (kasra on the mīm,
even under the و proclitic) is the preposition and may be glossed, while وَمَن "and whoever" (fatḥa) must not
inherit it — the content-letter harakah, read by the guard, keeps the two apart across all occurrences.
References (SN ingest)
The corpus distillation added four operational references and a negation rule file:
Production finding (SN ingest — negation scope & function-word inventory)
Two additions from the verb‑charts + AMAU corpus:
- The governing negative sets the tense, not the verb's surface form. لَمْ over a present‑tense form yields a
past meaning ("did not"); لَنْ negates the future ("will never"). Resolve the لَمْ/لِمَ homograph (harakāt)
first, then apply the negation effect — never gloss the bare surface tense under a negative.
- The corpus confirms a stable function‑word inventory with English glosses (prepositions قَبْلَ/بَعْدَ/
أَمَامَ/فَوْقَ/تَحْتَ/وَرَاءَ, pronouns هُمَا/أَنْتُمْ/أَنْتُمَا, particles). These are safe hover candidates only
through the content‑letter‑harakah guard — a surface key alone still cannot separate مَن/مِن، لَمَّا/لِمَا.
Production finding (PP1 — particle p001–p100 proofing pilot)
Proofing all 100 particle entries' example āyāt (219 āyāt, 3,757 tokens) confirmed the proving‑ground value:
the function‑word tops in particle āyāt (وَمَآ, لَمْ, أَمْ, وَإِن, وَمَن) are correctly pending (homograph /
multi‑function — مَا alone has negation/relative/interrogative/maṣdariyyah readings), while the content tokens are
authorable. 26 content glosses were certified+applied (+141 occ → 70.76%). New person/POS homograph classes
the key‑aware 2‑vote caught and kept pending: هَدَيْنَا "We guided" ↔ هَدَىٰنَا "He guided us" (subject person);
حَرَّمَ "forbade" (verb) ↔ حُرُم "sacred" (noun); وَلَدٌ "child" (noun) ↔ وَلَدَ "begot" (verb). Lesson: the live
norm_strict key drops the person/voice/POS‑distinguishing harakāt, so a same‑key set must be one word AND one
person/POS before a surface gloss is safe.
naḥw@2.1 — CANDIDATE increment (2026-07-12 calibration cycle) — NOT released; does not amend @2
These rules are candidate (drafted forward from the C1/C4/C5 + W13 + DR-1/DR-6 calibration; Fable
adjudicates). Each is written for a deterministic projector: explicit CONDITION, PROJECTION, GUARDS,
DEFEATERS. Machine-readable rows (with projector blocks + source-addressed evidence + red-first fixtures)
are in qamus/skills/rule-registry-increment-21.jsonl;
discriminators in tools/skill_fixtures/skill_rules_increment21.py.
Projector-ready (deterministic consequence / guard):
nahw-jazm-only-on-mudari (HARD invariant) — CONDITION aspect != imperfect and a mood
(jussive/subjunctive/indicative) is asserted → PROJECT violation; strip the mood from the perfect/imperative.
Mood is a category of the muḍāriʿ ONLY; a mabnī perfect/imperative carries no iʿrāb mood.
nahw-ma-man-function-per-occurrence — CONDITION a مَا/مَن reading is applied from a different occurrence of
the same surface (5:116 carries relative مَا AND nāfiya مَا in one āyah) → PROJECT prevent the cross-occurrence
propagation; resolve each occurrence on its own local function + scope.
nahw-la-nahiya-jussive-governor — CONDITION the particle is لا الناهية before a muḍāriʿ → PROJECT it governs
the verb into jussive and the verb is CONTENT keeping its root. GLOSS-OWNERSHIP corollary: the verb glosses only its
own meaning (تحزنوا = "grieve"); the negation belongs to لا, so a token gloss "do not grieve" wrongly imports it.
nahw-ha-tanbih-not-pronoun — CONDITION surface family يا+أيها/أيتها and the segment is ها → PROJECT type it as
حرف تنبيه (vocative element), never an attached pronoun clitic.
nahw-fused-preposition-closed-class-floor — CONDITION surface ∈ fused jarr+pronoun inventory (فيها/عليكم/منه)
→ PROJECT affirm on the function-word floor, do not park in review.
nahw-lam-qasam-nun-tawkid-finite — CONDITION لام + نون التوكيد on an energic verb in an oath-answer frame
(فَلَيُبَتِّكُنَّ 4:119:4) → PROJECT gloss as a finite energic future (marfūʿ), BLOCK any dictionary-infinitive/maṣdar
gloss ("to slit"). GUARD mood distinguishes qasam (marfūʿ) from لام الأمر (majzūm).
Review-gated (identification is contextual; the consequence is deterministic once typed):
nahw-mood-from-governor — mood is decidable from a visible governor (لِ/أَنْ/لَمْ/لَا الناهية/شرط) + final
vowel; commit the mood or state an explicit named ambiguity — never "mood context not separately asserted" when a
governor is visible (17:12:16 منصوب بأن مضمرة; the وَلْيَكْتُب family is majzūm).
nahw-lam-prefix-typology — the lām prefix has distinct types, each its own segment with its own consequence:
لام الأمر (jussive governor), لام التعليل/كي (subjunctive via أن مضمرة), لام الجر (jarr), لام الابتداء/التوكيد
(emphasis, no mood effect). Resolve the type before glossing or segmenting.
naḥw@2.2 — CANDIDATE increment (QAMUS-RICH-NORM-001 consolidation) — NOT released; does not amend @2
These rules are candidate (drafted forward from the rich-hover normative-defect ANDON + the norm@1
normalization contract; Fable adjudicates). They apply the norm rendered-field discipline to the
grammatical notes — the naḥw side of the field-language / committed-feature clauses. Machine-readable rows
(with projector blocks + source-addressed evidence + red-first fixtures) are in
qamus/skills/rule-registry-increment-22.jsonl;
discriminators in tools/skill_fixtures/skill_rules_increment22.py;
contract in docs/qamus/RICH-HOVER-NORMALIZATION-CONTRACT.md.
norm@1 rendered-note discipline (projector-ready):
nahw-norm-note-leads-english (N-LANG-03) — CONDITION a sarf_note/nahw_note opens as an Arabic-prose
dump rather than English → PROJECT flag; lead the note in English, Arabic grammatical terms may follow.
nahw-irab-note-not-verbatim-source (N-LANG-01/02) — CONDITION the nahw_note IS the raw upstream-analyzer
Arabic iʿrāb string pasted verbatim (39:71:31 كَلِمَةُ carried "فاعل مرفوع وعلامة رفعه الضمة وهو مضاف") → PROJECT
flag; author an English iʿrāb ("subject, nominative; first term of an iḍāfa"). The raw analyzer iʿrāb is analysis
input, not rendered copy.
nahw-mood-note-commits-or-named-ambiguity (N-PED-02) — CONDITION mood is knowable at the address AND the
note hedges "as (the) context requires" → PROJECT flag; commit the mood in the note (17:12:16 منصوب بأن مضمرة).
GUARD a genuinely qirāʾāt-split/unknowable mood renders a named ambiguity, not a hedge.
naḥw@2.3 — CANDIDATE increment (Window-1 measured flywheel) — NOT released; does not amend @2
These rules are candidate (drafted forward from the first live-seeding window's WAVE-RECORD; Fable
adjudicates). They add the addressing-convention and surface↔gloss binding gates the Window-1 lane needed.
Machine-readable rows (with projector blocks + source-addressed evidence + red-first fixtures) are in
qamus/skills/rule-registry-increment-23.jsonl;
discriminators in tools/skill_fixtures/skill_rules_increment23.py;
evidence in impl-records/WINDOW-1-2026-07-16-WAVE-RECORD.md.
addressing + binding gates (projector-ready):
nahw-basmala-aware-loc-authority — CONDITION a loc word-index on ayah-1 of a basmala-carrying surah
(not 1 or 9) exceeds the basmala-blind ayah_wordcount authority → PROJECT apply the +4 basmala band
before the range verdict; do NOT hold when word-index ≤ authority+4 (87:1:7, 96:1:7, 17:1:22 were falsely
held in W1 until cap+4). GUARD surah 1/9 get no offset; a word-index beyond authority+4 is a genuine
overflow, correctly held; :100+ fragment pseudo-locs are exempt.
nahw-surface-gloss-single-wordlist-binding — CONDITION a row's gloss resolves from a NEIGHBOURING
word-list index rather than its own surface (basmala-inclusive surface vs basmala-blind gloss at the same
numeric index: 96:1:2 ٱللَّهِ→"the name", 96:1:5 ٱقْرَأْ→"He created") → PROJECT flag the binding corruption;
re-resolve the gloss against the surface's own index; block publish until they agree. GUARD a gloss that
lexically matches its own surface is a valid translation, not a skew (8 corrupt W1 rows).