Ninety steps, nine windows, and the exact prompt to paste into each of them on each day — building toward a commentary of the whole Qurʾān drawn from the agreement of twenty-one mufassirūn.
Read this before day 1. Three automatic methods were built and all three failed, and the failures decide the architecture.
1. Clustering commentary windows scored 71% agreement against a hand annotation — against a 70% baseline of simply declaring every verse a separate sense. No better than nothing.
2. A stricter plain-count vote declared 3:97 “contested 5-way” when all five commentators agree the maqām is the Station of Ibrāhīm — they merely differ in what they discuss around it (recitation, grammar, the footprints). False disagreements, which would have filled the disagreements paper with fiction.
3. The consensus word returned words from the āyah itself — khāfa, karīm, Ibrāhīm — because commentators quote the verse before explaining it. Removing the verse left proper names and adjacent-verse quotations.
Conclusion: tafsīr is discussion, not a dictionary. No filter reliably extracts “the agreed meaning” without a reader. Therefore the tools PREPARE EVIDENCE and the nine windows READ AND JUDGE. That is not a compromise; it is the only honest design, and it is what nine windows are for.
The eventual goal is a commentary on the whole Qurʾān in which each word carries the meaning most of the tradition agrees on. You are not a scholar and will not be adjudicating between the mufassirūn. That is precisely why the method must be reportorial rather than judicial: the work records what the commentators said and where they converge, and it never decides who is right.
The claim this project may honestly make: “Across twenty-one commentaries, N of them gloss this word here as X; the remainder say Y and Z, recorded in full.”
The claim it may never make: “This word means X.”
The first is a measurement anyone can check. The second requires an ijāzah. Keeping to the first is what makes an unaffiliated researcher publishable rather than dismissed.
THE STANDARD, LOCKED 17 AUGUST 2026. Any deviation and the work does not proceed.
Every lemma carries exactly one agreed answer. 840 of 840. No gaps.
A lemma's record is one of exactly two kinds. settled — one sense inventory, each sense with its gloss, its supporting editions, and the dissent kept underneath. divided — the commentators do not converge, and that is the answer: the split is recorded with both readings and who is on each side. A divided lemma is RESOLVED, not a gap. There is no third state; “unclear” and “contested, left open” are refused.
This is not nine-way unanimity, and the difference matters. Every lemma read by all nine windows was measured at 2,460 hours = 46 h per window per day — impossible. It is also undesirable: 100% inter-annotator agreement on lexical semantics reads to a reviewer as a trivial task or as annotators who were not independent. Unanimity is nine readers spontaneously agreeing; resolution is every lemma carrying one agreed answer. The second is the standard.
It is a gate, not an intention. resolve.py measures
coverage against the shards, never against the entries, so a lemma
nobody annotated shows as missing rather than vanishing, and it
refuses to write unless all 840 are resolved — a partial
resolution file would look complete, which is worse than none.
The companion reliability gate: mean agreement on the overlap sample
≥ 95%, or the release stops. Day 1 measured 67%.
One record per lemma-sense — not per instance. A window
reads a stratified sample of a lemma’s occurrences, decides how many
distinct senses that lemma carries, and writes one entry per sense,
each anchored to a representative āyah. A lemma with one sense yields
one entry; maqām, which carries two, yields two — the
worked pair in REFERENCE-ENTRY.json.
This is a correction, and it matters more than it looks. An earlier version of this plan set the unit at the lemma-instance — one record for every occurrence of every word. That is 40,277 records, which at the observed rate is roughly 671 hours of reading. The work was not seven days; it was four months, and nothing in the plan said so.
The unit is now the lemma-sense, and the sample is bounded by
read_plan. The nine shards carry 16,075 instances on the
first pass, not 40,277 — the reader samples, escalates on
disagreement, and stops when the sample is stable. That is what brings
273 hours within reach of nine windows in six days.
Every shard file carries the unit in its own header, so a window cannot
read this wrong even if it never opens this page:
"unit": "ONE ENTRY PER LEMMA-SENSE, not per instance".
{
"id" : "CE-014-0079", stable, never reused
"lemma_bw" : "maqAm",
"ayah" : "17:79",
"surah" : "Al-Isra", "place": "Makki", "rev_order": 50,
"consensus" : {
"gloss_en" : "a station of honour; rank",
"gloss_ar" : "<the Arabic the commentators actually used>",
"editions" : ["tabari","baghawi","razi","qurtubi","ibnkathir_ar"],
"n_agree" : 5,
"n_glossing" : 7, editions that addressed the word at all
"share" : 0.71,
"earliest" : {"ed":"tabari","died":923}
},
"minority" : [ never discarded
{"gloss_en":"the place of intercession","editions":["jalalayn"],
"n":1,"note":"reads it as the Praised Station of intercession"}
],
"evidence" : [ one per edition, quoted verbatim
{"ed":"tabari","died":923,"lang":"ar","quote":"...","supports":"consensus"}
],
"flags" : ["none"], contested | thin | verse-only | ...
"confidence": "clear", clear | argued | disputed
"annotator" : "window-3",
"reviewed" : false
}
gloss_en and is marked
as the annotator’s.thin fires below
three glossing editions.contested and carries no consensus — it goes to the
disagreements paper instead.| Band | Lemmas | Instances | Verdict |
|---|---|---|---|
| content lemmas, 20+ | 440 | 36,575 | too narrow for the eventual goal |
| content lemmas, 9+ | 850 | 41,732 | the lock — 83% of content text |
| content lemmas, 5+ | 1,341 | 44,745 | v2.0 roadmap |
The 850 split three ways: 840 into the nine shards, 5 held as calibration (every window reads all five on Day 1, so nine readers can be compared before any real work is kept), and 5 held out blind (read last, by a window that has not seen them, to measure the layer against itself).
| Measure | Value | Source |
|---|---|---|
| lemmas per window | 93–94 | the nine shard files |
| instances per window (all occurrences) | 3,877–6,152 | shard totals |
| instances actually read, first pass | 16,075 | sum of read_plan.first_pass |
| estimated minutes per window | 1,818–1,830 | estimated_minutes in each shard |
| load spread across the nine | 1.007 | max ÷ min |
| total across all nine windows | 273 h | sum ÷ 60 |
| per window, per day, over six days | 5.1 h | 273 ÷ 9 ÷ 6 |
15 to 16 lemmas per window per day. Occurrence counts run from 9 to 2,699 with a median of 20, so lemma size is wildly uneven — which is exactly why the shards were balanced on estimated minutes rather than on lemma count. A spread of 1.007 means no window finishes days ahead of another.
SCOPE.md and do not move it
again.tafsir_signal.py extract 9 999 to widen the evidence
cache from the 9–30 band to the whole lock. One pass, ~5 minutes.make_shards.py 9 to cut 850 lemmas into nine shards,
interleaved by frequency rank so every window gets the same mix of hard
and easy.04-SENSE-LAYER/entries/window-1..9/. Each window
writes only to its own directory, for the whole seven days.contested and the reason recorded.You are WINDOW 3 of 9 on the Qur'anic consensus-tafsir project.
WORKING DIRECTORY
C:\Users\walee\Downloads\Quran Research\
YOUR OUTPUT DIRECTORY - write ONLY here
04-SENSE-LAYER\entries\window-3\
Never write to another window's directory, to any shard file, or to
the toolkit. If you believe a tool is wrong, report it - do not edit it.
WHAT THIS PROJECT IS
For each Qur'anic word at each verse, record THE MEANING MOST OF THE 21
COMMENTATORS AGREE ON, with every dissenting reading kept.
You are reporting what the mufassirun said. You are NOT deciding who is
right. Never write "this word means X". Write "N of M editions gloss it
as X; the others say Y".
TODAY IS CALIBRATION. Do these five lemmas, which every window is doing:
maqAm, >um~ap, dyn, rwH, xalyfp
FOR EACH LEMMA
1. python 01-TOOLKIT\brief.py <lemma>
Read the whole brief. Every occurrence, the Arabic with the word
marked, both public-domain translations, and what the commentators
say around the word at that verse.
2. python 01-TOOLKIT\tafsir_signal.py stats <lemma>
Read the full evidence file it writes.
3. For EACH occurrence, decide:
- what each glossing edition says the word means THERE
- which reading the most editions share -> consensus
- every other reading -> minority, quoted verbatim
- if no reading leads, flag "contested" and give no consensus
4. Write one JSON entry per occurrence to your directory, in the schema
at 02-RESEARCH-PAPERS\paper-sense-layer\PLAN-90-v2.html
5. python 01-TOOLKIT\audit_entries.py window-3
RULES THAT MAY NOT BE BENT
- Quote verbatim. Never paraphrase into an evidence field.
- Silence is not agreement. An edition that does not discuss the word is
absent, not supporting.
- n_agree may never exceed n_glossing.
- Fewer than 3 glossing editions -> flag "thin".
- If you are unsure, flag it. An honest flag is worth more than a
confident guess, and Waleed reviews every flag.
- Record how long each lemma took.
REPORT AT THE END OF THE SESSION
- the five lemmas, with consensus gloss and n_agree/n_glossing for each
- every flag raised
- minutes per lemma
- anything in the instructions that was ambiguous
You are WINDOW 3 of 9, day [2|3|4|5], continuing the consensus-tafsir work.
Write ONLY to 04-SENSE-LAYER\entries\window-3\
Your shard: 04-SENSE-LAYER\shards\shard-3.json
START OF SESSION
1. python 01-TOOLKIT\progress.py window-3
- tells you what is done and what is next
2. Take the next 14 lemmas, highest frequency first.
FOR EACH LEMMA - the loop you calibrated on day 1
python 01-TOOLKIT\brief.py <lemma>
python 01-TOOLKIT\tafsir_signal.py stats <lemma>
read every occurrence
write one entry per occurrence
python 01-TOOLKIT\audit_entries.py window-3
REMEMBER
- report agreement, never adjudicate
- quote verbatim, never paraphrase into evidence
- silence is not agreement
- flag rather than guess; Waleed reviews every flag
- if a lemma takes more than 40 minutes, flag it "hard" and move on
END OF SESSION
python 01-TOOLKIT\audit_entries.py window-3 --summary
git add -A && git commit -m "window 3 day N: X lemmas"
Report: lemmas done, flags raised, minutes each, anything unclear.
You are WINDOW 3 of 9, day 6: INDEPENDENCE CHECK.
PART A - re-annotate yourself
Take the FIRST 5 lemmas you completed on day 2.
Do NOT open your previous entries. Do not look them up.
Annotate them again from the brief, exactly as before.
Write to 04-SENSE-LAYER\entries\window-3\recheck\
PART B - the held-out five
Every window today annotates the same five lemmas, untouched so far:
[Waleed names them - held back from all shards]
Write to 04-SENSE-LAYER\entries\window-3\heldout\
PART C - report honestly
Where your day-6 answer differs from your day-2 answer, say so plainly.
Do NOT quietly correct the old one. The disagreement is the measurement.
Then: python 01-TOOLKIT\audit_entries.py window-3 --recheck
n_agree <= n_glossing, every quote traceable to the
corpus.ayah reference resolves and every edition key
exists.README, SCHEMA, LIMITATIONS
— the last carrying the flags, the contested entries and both
agreement rates.v1.0.0. Include the
tooling — the dataset without the gates is not reproducible.The dataset is the scholarly deliverable. Phase 2 is what turns it into something a Muslim with a phone can use, and it is now part of this plan rather than a wish-list beside it. Twenty-one items, in the order they should be built.
The rule that governs all twenty-one: a feature ships only if a reader could check it. Every number comes from the corpus, every gloss carries a name and a death date, and nothing on the page speaks in this project’s own voice about what the Qurʾān means.
| # | Feature | Why it earns its place | Est. |
|---|---|---|---|
| P1 | Revelation order | One toggle reorders the reading into the order it came down.
rev_order already sits unused in the corpus. |
1 h |
| P2 | Rare-word badge | “This word occurs once in the whole Qurʾān.” Countable, checkable, and quietly astonishing. | 0.5 h |
| P3 | Deep links + attributed copy | Every āyah gets a URL; copy always carries the reference and the commentator’s name. This is how it spreads and how attribution survives being spread. | 1.5 h |
| P4 | Chronology slider | Drag 923 → 1505 and watch the commentary develop. The data is already in the file. | 2 h |
| P5 | Root atlas | Tap a root, walk its whole family with counts and jumps. Teaches the root system by using it. | 3 h |
| P6 | Transliteration + tashkīl toggle | Most of the ummah cannot read Arabic script. This single item widens the audience more than the rest combined. | 2 h |
| P7 | Ḥif̣ẓ mode | Progressive word-hiding, offline, private, no account. Juzʾ ʿamma is precisely what is memorised. | 3 h |
| P8 | The whole Qurʾān | 114 sūrahs across 30 juzʾ files with an index. Today the reader has one thirtieth of the book. | 1 h |
| # | Feature | Why it earns its place | Est. |
|---|---|---|---|
| P9 | The agreement bar ♛ | “6 of 7 commentaries that gloss this word here read it the same way”, with the dissent one tap away. This is the entire point of the 850-lemma layer, made visible, and nothing else in the world carries it. Blocked until Day 6 closes. | 4 h |
Tier 1 makes the reader better. Tier 3 is what makes someone forward it. Each of these replaces work a Muslim is doing by hand today.
| # | Feature | The hour it gives back | Data |
|---|---|---|---|
| P10 | The Ṣalāh Companion | The sūrahs actually recited in prayer, word by word, so a person finally understands what they have been saying five times a day for thirty years. Juzʾ ʿamma already is this — it needs only to be named and ordered that way. | have it |
| P11 | The Duʿāʾ Index | Every supplication in the Qurʾān, indexed by need — forgiveness, fear, debt, children, parents, guidance. People search for these at the worst moments of their lives and get a forum post. | have it |
| P12 | The Khuṭbah Builder | Pick a theme → every āyah on it, with the classical commentary, formatted to print or project. An imam rebuilds this by hand every single week. Highest leverage on the list: reach one khaṭīb, reach a congregation. | have it |
| P13 | The Reading Planner | “Finish by Eid” → today’s exact pages. Computed
from juz, hizb and page, all sitting
unused in the corpus. Every Ramaḍān, this is a thing more than a
billion people work out on paper. | have it |
| P14 | The 300 Words | A frequency-ordered path: learn these 300 and you understand most of what you recite. The pedagogy is proven; what has never existed is the path built on real counts with the commentary attached. | have it |
| P15 | The Claim Checker | Paste the forwarded message — “the word X appears exactly N times” — and get the true count, three ways, with the query. This project’s defect register is already built on exactly this work. It is the one tool here nobody else is equipped to make. | have it |
| P16 | Teacher’s worksheet pack | Printable per-sūrah sheets for maktab and weekend schools. Built by hand, every week, in every city. | have it |
| P17 | Root threads | Follow one root — ṣ-b-r, ʿ-l-m — through the whole book in one view. Thematic study, made mechanical. | have it |
| P18 | Send-to-family / offline install | One file over WhatsApp; installs to the home screen; works with no signal, forever. In much of the ummah that is the difference between usable and not. | have it |
| P19 | Low-vision & elderly mode | Large print, high contrast, bigger tap targets. The people most likely to read Qurʾān daily are the people this project currently serves worst. | have it |
| P20 | Tajwīd colour layer | The coloured muṣḥaf every student learns from. Free data exists and was tested. It does not align with our text — see below. | source found, paired text only |
| P21 | Translations in every language | 74 editions across 55 languages, with written permission to re-publish. Verified live. See below. | CLEARED |
| P22 | Recitation audio | Split out from P21 because its blocker is different and real: rights sit with each individual reciter, and audio breaks the zero-external-URL property that makes this work offline. | stream-only |
P21 is cleared, and by more than expected. The Encyclopedia of the
Noble Qurʾān (quranenc.com) carries an explicit,
written grant — not an API term of service, which could never convey
a third party’s copyright, but a permission from the publisher
itself:
“Contents of the translations can be downloaded and re-published, with the following terms and conditions: 1. No modification, addition, or deletion of the content. 2. Clearly referring to the publisher and the source (QuranEnc.com). 3. Mentioning the version number when re-publishing the translation. 4. Keeping the transcript information inside the document. 5. Notifying the source (QuranEnc.com) of any note on the translation. 6. Updating the translation according to the latest version issued from the source (QuranEnc.com). 7. Inappropriate advertisements must not be included when displaying translations of the meanings of the Noble Quran.”
All seven conditions are already how this project works. It quotes
verbatim and never paraphrases (1); it attributes everything (2); the API
returns a version field per edition (3, 6); it carries no
advertising of any kind (7). Condition 6 becomes a build gate: the
acquisition script records each edition’s version and refuses to ship
a stale one.
Measured, not assumed: /api/v1/translations/list
returned HTTP 200 with 74 editions across 55 languages, and single
āyah fetches returned real text in English, Urdu and Indonesian.
“All languages” is not yet true, and the gap must be named. The 55 verified do not include Bengali, Russian, Malay, Italian, Swedish or Bulgarian. Those exist at Tanzil — 114 translations across 49 languages — but under materially weaker terms: “for non-commercial purposes only. If used otherwise, you need to obtain necessary permission from the translator or the publisher”, which is a permission to use, not a grant to redistribute. Two routes close the gap honestly: request permission per translator, or use only translations whose translator died before 1957 and are therefore past life+70 — the same gate that already governs the tafsīr layer.
P20: the data is free; the alignment is the problem. Two sources were tested against this corpus, not merely read about.
cpfair/quran-tajweed — CC BY 4.0, 18 rules, the whole Qurʾān. But it is unmaintained, and its annotations are raw character offsets into one specific Tanzil file from April 2017, whose own README warns the encoding has changed since. An offset that is wrong by one codepoint colours the wrong letter and nothing complains.
quran.com v4 uthmani_tajweed — maintained, and
inline markup rather than offsets, so no alignment risk by construction.
Tested on seven āyāt: with the markup stripped, 0 of 7 matched
our text. Four systematic differences — a trailing āyah
numeral, superscript alif written with a tatweel, pause marks we do not
carry, and our own basmala prefix on 36:1 and 112:1.
Therefore: never map either onto our corpus. The tajwīd view renders the source’s own text together with its own markup, as a paired rendering, and our corpus remains the sole authority for every count. They are displayed side by side and never merged. This is the one place in the project where a second text is admitted, and it is admitted because merging them is exactly the silent-corruption failure this repository has been burned by before.
These are not a phase. They are the standing obligations, and they are numbered so a window can be told “you skipped 61”.
miqbas is flagged on every entry it appears in —
attribution disputed, and measured to share text with a 1973 work.verse-only.thin.weak.contested and carries no consensus.Three ways this fails, named now.
Windows drifting apart. Nine annotators applying a rule slightly differently produces a dataset nobody can use. Day 1 calibration and day 6 cross-check exist for this, and skipping either forfeits the paper.
Consensus by exhaustion. On day 5, with 40 lemmas left, the temptation is to record the first plausible gloss as consensus. That produces a resource that looks complete and is worthless. Cut lemmas instead, and say so.
Calling it a tafsīr too early. What seven days produces is a dataset of what the commentators said. It becomes a tafsīr only after scholarly review. Publishing it as the former is honest and citable; publishing it as the latter, without an ijāzah, would end the project.