feat(content): cloze pick-the-right-word exercises across the story ladder (learn uplift t11)#4
Conversation
…adder (t11, contract §3.6.1)
Add one pick-the-right-word cloze exercise (contract v1.0 §3.6.1's second
`cloze` variant: text + blanks, checkable without a driver) to each of the 11
graded-reader stories, covering all five CEFR rungs (A1-C1) and all three
coarse levels. Each exercise's text is lifted near-verbatim from its story's
body so it stays answerable from the reading alone, with level-graded
distractors (same-word-class confusions for A1/A2; gender/number agreement
and idiom traps for B1; subjunctive-mood and lexical-register contrasts for
B2; a deviner/devenir near-homophone reading trap for C1). Every new exercise
reuses an existing exercise's item_id from its own story, so results accrue
to already-tracked curriculum items; no existing item_id or exercise changed.
Re-sync french/contract_cite/{schemas/{story,practice}.json,_validate.py}
from learn-cli (source commit cdac077) to pick up the text/blanks fields and
the new cloze_blank def the variant needs — purely additive, contract stays
1.0. `learn subject doctor french --json` (built from the learn-cli uplift
branch) reports healthy with the new cloze-items check: "11 pick-the-right-
word cloze item(s) verified: well-formed blanks". Bumped 0.5.0 -> 0.6.0 per
the version-bump-every-PR convention.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QpvZY8K67Q9uGA6keFhTz
|
PR Summary by QodoAdd pick-the-right-word cloze exercises across all story levels (A1–C1)
AI Description
Diagram
High-Level Assessment
Files changed (17)
|
Code Review by Qodo
1. Provenance stamps diverged
|
| - **Source commit:** `cdac077` (2026-07-11) | ||
| - **Cited on:** 2026-07-11 | ||
| - **Cited by:** french-cli (task t4 of the learn uplift) | ||
| - **Cited by:** french-cli (task t4 of the learn uplift; re-synced by task t11 to | ||
| pick up the pick-the-right-word cloze variant fields — `text`/`blanks` on the | ||
| exercise def and the new `cloze_blank` def — added to `story.json` and | ||
| `practice.json`, contract §3.6.1. Purely additive: contract version stays | ||
| `1.0`, and every payload that predates these fields keeps validating | ||
| unchanged.) |
There was a problem hiding this comment.
1. Provenance stamps diverged 🐞 Bug ⚙ Maintainability
The contract provenance stamp was updated to upstream commit cdac077 in the ledger doc and _validate.py, but french/contract_cite/__init__.py still advertises the older ed81b87. This creates an inconsistent provenance trail that makes future contract re-syncs harder to audit correctly.
Agent Prompt
### Issue description
The contract provenance stamp is inconsistent across the cited contract files: docs and `_validate.py` point at commit `cdac077`, while `french/contract_cite/__init__.py` still claims `ed81b87`.
### Issue Context
This repo treats `french/contract_cite/*` as a cite-don’t-import mirror of learn-cli’s contract, so keeping provenance stamps consistent is important for auditability and repeatable re-syncs.
### Fix Focus Areas
- french/contract_cite/__init__.py[5-12]
- docs/contract-provenance.md[26-35]
- french/contract_cite/_validate.py[7-14]
### What to change
- Update the provenance header in `french/contract_cite/__init__.py` to match the new upstream commit (`cdac077`) and the updated “cited by” context (task t11), OR remove/centralize the duplicated provenance text so there is only one authoritative stamp.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


What
11 pick-the-right-word cloze exercises across the full story ladder (one per story, A1–C1), implementing the new optional cloze variant from the learn subject-plugin contract §3.6.1 (
textwith{{blank_id}}placeholders +blanks: [{id, options, answer}]).s'inquiéter que,deviner/devenirnear-homophones.item_idfrom its own story — no new item_ids, no existing exercise touched, learner mastery preserved.story_read_payload()embeds stories verbatim); what WAS stale: the cited contract copy (french/contract_cite/schemas/{story,practice}.json+_validate.py) predated the cloze fields — re-synced from learn-cli perdocs/contract-provenance.md. Contract stays 1.0, additive only.Verification
uv run pytest -n auto→ 113 passed; black/isort/flake8/bandit clean;teken cli doctor . --strict26/26.learn subject doctor french --json→ healthy, all 9 checks includingcloze-items: "11 pick-the-right-word cloze item(s) verified".Part of the learn content workstream: agentculture/learn-cli#9 (umbrella), contract change in learn-cli PR #12's plan (task t11).