Ft/app improvement#1
Merged
Merged
Conversation
…tracking - Split A1/A2 scoring bands (was lumped 26-50%) - Update TCF question counts to 29/29/18 with correct time limits - Fix streak timezone using local date instead of UTC - Tighten CEFR promotion to 10 exercises across 3+ skills at 85% - Batch extractErrorsFromCorrections into single AI call - Simplify analytics to Sentry breadcrumbs
…aching - Add category inference for corrections (was hardcoded grammar) - Fix speaking score formula to prevent negative values - Add audio transcript event handlers for voice mode - Add MCQ exercise validation (4 options, 1 correct) - Lower temperature to 0.4 for exercise generation - Fix stale closure in usePronunciation - Disable unused audio metering - Add offline caching to profile loading and sign-out cache clearing
- Fix French error in prompts (Quoi qu'il en soit) - Add requireNetwork + retry on generateSpeech/generateEmbedding - Batch memory embeddings in parallel with Promise.allSettled - Always generate A1-C2 mock test questions regardless of target - Update mock test question counts to 29/29/18
- Fix prosody score mapping in pronunciation - Add audio transcript event types to realtime - Add WritingEvaluation fields to exercise types - Remove unused progress-store (dead code) - Add model allowlist to ai-proxy Edge Function
- Add haptic feedback utility (light, medium, success, error) - Add design system constants (Colors, Typography, Spacing, Radii, Shadows) - Add AsyncStorage-based offline cache with TTL and write queue - Add model allowlist to realtime-session Edge Function - Add offline caching to progress/skill data with cache invalidation
…n chart - Add useDictation hook with word comparison and error pattern analysis - Add useDebounce generic hook for search inputs - Add useCefrHistory hook for CEFR level timeline - Add CEFRProgressionChart component (custom step chart, no library) - Add write queue auto-flush on network reconnection to NetworkBanner
- Migrate ErrorBoundary, AudioWaveform, CorrectionBubble, TranscriptView, MCQCard to className - Add React.memo on MCQCard with haptic feedback and accessibility - Remove unused theme prop from CorrectionBubble - FlatList virtualization on TranscriptView
- Migrate login, signup, forgot-password, privacy-policy to className - Add React.memo and haptic feedback to ScoreCard - Add try/catch/finally on all auth screens - Replace Unicode escapes with UTF-8 characters
- Migrate auth terms, onboarding wizard, placement test to className - Enhance placement test with better prompts and results analysis - Add NativeWind CSS import and babel config to root layout - Add SafeAreaView to not-found screen
- Migrate home, conversation index, practice index, mock-test index to className - Add accessibility labels and error banner to home screen - Add accessibility labels to conversation topics and practice skills - Replace Unicode escapes with UTF-8 characters
- Migrate profile index, settings, privacy-policy, terms to className - Add CEFR progression chart to profile - Add accessibility labels to profile tappable items - Register pronunciation and dictation routes in practice layout - Replace Unicode escapes with UTF-8 characters
- Migrate grammar, listening, reading, writing, vocabulary to className - Add offline caching and write queue to vocabulary SRS reviews - Add offline banner to vocabulary screen - FlatList virtualization on vocabulary word list
- Add pronunciation practice screen with word-level feedback - Add dictation exercise screen with TTS and word comparison - Migrate conversation session and history to NativeWind - Add search to conversation history with transcript highlighting - Add BackHandler guard to mock test screen
- Add babel.config.js with NativeWind v4 babel preset - Add jsxImportSource to tsconfig.json for NativeWind - Add @react-native-async-storage/async-storage for offline cache - Migrate mock test results screen to NativeWind
This was referenced May 8, 2026
Simplemart17
added a commit
that referenced
this pull request
May 11, 2026
…ion, reject 10-11
Operator downloaded the Manuel du candidat TCF PDF (Version P, avril 2026, FR,
3.1 MB, SHA-256 2ee5d4d531...). Verbatim transcription of the Expression Orale
rubric reveals a MATERIAL DIVERGENCE from the §6.3 prediction:
The publisher does NOT publish a 9-sub-criterion breakdown for Expression Orale.
The Manuel publishes only:
- 3 evaluation categories (linguistique / pragmatique / sociolinguistique)
with parenthetical etc.-flagged feature lists
- Per-task holistic A1-non-atteint → C2 rating
- 2-evaluator double-blind correction + undisclosed "règle de calcul"
combining 6 ratings → final 0-20 score
- A grille d'interprétation (0-20 → CEFR) — verified consistent with
src/lib/ircc-bands.ts IRCC_CLB_BANDS
Story 10-6's 5-dim proxy is therefore MORE granular than the publisher's
actual rubric, not less. Extending to 9 sub-criteria as Story 10-11 drafted
would invent finer granularity than the publisher uses.
Changes:
- NEW docs/tcf-canada-snapshots/manuel-candidat-tcf-FR-2026-05-11.pdf
(operator-downloaded, archived)
- NEW docs/tcf-canada-snapshots/manuel-candidat-tcf-2026-05-11.md
(verbatim transcription + Analyst's note flagging §6.3 divergence
+ cross-project implications table)
- docs/tcf-spec-source.md §6.3, §5.4, §10b item #1: updated with
snapshot reference + correction stamps; pre-correction "9-criterion
DEFERRED" claim retired
- docs/tcf-spec-citations.md §6: speakingTaskEvaluationSchema row
updated with 2026-05-11 finding; new snapshot integrity row added
- 10-11-phase2-speaking-9-criterion.md: status changed to rejected
with a "STORY REJECTED" header documenting the rescope to future
Story 10-11b (per-task estimatedCEFRPerTask field + JSDoc on
undisclosed combination rule + grille d'interprétation cross-check)
- sprint-status.yaml: 10-11 status → rejected + last_updated stamp
No code changes — Story 10-6's 5-dim proxy schema stays as-is (genuine
≥3-category coverage; the 5 dimensions remain a reasonable approximation
of the publisher's holistic per-task rating). Future Story 10-11b will
file the actionable Phase-2 scope when scheduled.
§10b item #1 operator-action: DONE.
Simplemart17
added a commit
that referenced
this pull request
May 14, 2026
Adversarial 3-layer review (Blind / Edge Case / Acceptance) surfaced 19 distinct findings after dedup. Applied 11 patches; deferred 7; rejected 0. DRIFT DETECTOR HARDENING (5 patches in one file): - H1: every regex anchored to the gate step's actual run: line value via new extractGateStepBlock + extractGateRunCommand helpers. Pre-patch the comment block contained --audit-level=high (in a backtick reference) so the positive guard could pass with a disabled run: line; benign future comments like "# Don't tighten to --audit-level=moderate" would have failed the negative guards. - H2: new Case 7 NEGATIVE guard against continue-on-error: true + if: keys inside the gate step block. A future PR could weaken the gate to a no-op via these workflow-level mechanisms while leaving the run: line intact. - H3: new Case 5 NEGATIVE guard against --audit-level=critical. Spec AC #1 explicitly required this (was missing from initial impl). - M1: Case 8 ordering check rewritten to assert the gate appears AFTER ALL four quality-gate predecessors (Type check, Lint, Prettier format check, Tests). Pre-patch only the first Tests match was checked — brittle to rename and to future steps with Tests prefix. - L2: new Case 6 NEGATIVE guard against --omit=dev regression. Story rationale argues for dev-deps inclusion; drift pin prevents silent weakening. RUNBOOK POLISH (M2 + M3): - M2: consolidated "Last reviewed" date to a single source of truth in § 3. Top-of-file header now points to § 3 (was duplicate — guaranteed drift). - M3: reconciled inconsistent cadence claims ("1st business day of each quarter" vs "next due: 2026-08-14" — 6 weeks apart). Canonical interpretation is now rolling-90-days; next due 2026-08-12. DOC CORRECTIONS (L1 + L4): - L1: CLAUDE.md path reference node_modules/.package-lock.json → package-lock.json. The committed top-level lockfile is authoritative; .package-lock.json is npm's internal hidden cache file. - L4: CLAUDE.md "~1-2s by reusing setup-node npm cache" claim corrected. npm audit makes a fresh HTTPS call to the audit endpoint on every run; doesn't use the package-tarball cache. Actual cost ~2-5s. SPEC WORDING (L3): - Story file AC #4 wording: "indexOf comparison" → "via String.prototype.search regex-position comparison" (matches impl; functionally identical). M4 TEST COUNT RECONCILIATION: main HEAD verified at 1570 tests (Story 12-9 docs were off-by-6; 12-10's 1570→1575 baseline confirmed correct). +3 net round-1 cases (1575 → 1578) — all in the drift test file (H2, H3, L2 added; M1 rewrote existing Case 5 in place). 7 DEFERRED: D1 scheduled audit job (warrants separate story); D2 npm audit network isolation (broader CI concern); D3 SDK 57+ verification recipe (forward-looking); D4 tailwindcss runtime-postcss spot-check (operator at next quarterly review); D5/D6/D7 process hygiene only. All 4 quality gates green. Zero product-code diff preserved.
This was referenced May 14, 2026
Simplemart17
added a commit
that referenced
this pull request
May 16, 2026
… from Story 13-8) Epic 13 closed. 8 of 8 stories shipped: - 13-1 transcript render-storm fix - 13-2 home query fan-out reduction - 13-3 session-feedback aggregate RPC - 13-4 streaming mock-test generation - 13-5 history modal FlatList virtualization - 13-6 Sentry sampling + perf-conservative SDK flags - 13-7 className/style resolution on hot animated rows - 13-8 prompt-truncation perf verification Delivery metrics: - +252 net Jest cases (1607 → 1859) - 65 round-1 review patches across 7 reviewed stories (13-8 review pending) - 0 production incidents - All 4 quality gates green on every story merge - Peak round-1 patch count: 13 (Story 13-3) — under the Epic 12 retro's 15-patch threshold for round-2 auto-trigger Significant discovery (load-bearing finding of the epic): Story 13-8's calibration cycle surfaced that Story 11-7's "25× reduction on user-derived tail" claim was empirically 6.7× — overstated by ~4×. The 25× was computed against user-item content only; reality includes ~1,318 chars of <USER_FACTS>/<USER_WEAK_AREAS> wrapper text per Story 9-4. Still a meaningful ~85% reduction in user-derived bytes per session, but the marketing was wrong. MIN_REDUCTION_RATIO pinned at 5× at CI level. What went well: - Single-chokepoint refactor + delete-don't-alias patterns applied consistently in 6 of 8 stories - Drift detector + comment-stripped source + scoped JSX/function-body extraction became a project-wide idiom - Range-based assertions over exact-value (Story 13-7 P3 → Story 13-8 calibration) replaced over-tight failure mode - Audit accuracy: every Epic 13 story closed its stated audit finding - Verification-as-deliverable pattern (13-8) surfaced a real discrepancy What didn't go well: - 0 of 3 Epic 13 ACs verified empirically on device (all architectural proxies). Device profiling needed before Epic 16 ships. - Story 11-7's claim sat for 4 epics without a CI pin — endemic CLAUDE.md "perf claim drift" pattern - 8 of 9 Epic 12 action items remained open at Epic 13 close — same pattern from Epic 10 retro. Action items aren't getting done. - CLAUDE.md grew to ~80KB; compression sweep is preventive maintenance 9 action items filed: 1. Correct Story 11-7 CLAUDE.md paragraph (25× → 6.7×) 2. Sweep CLAUDE.md for unverified numerical claims (continues Epic 12 AI #9) 3. Device profiling pass before Epic 16 (iPhone 11 + Pixel 4a + 4G-throttled networks; pin the 3 Epic 13 ACs) 4. bmad workflow: action-item accountability (block next-epic on prior AI status, or formally drop) 5. Tune adversarial review prompts to reduce noise (Story 13-4 had 30+ rejects) 6. Codify "Bounded-budget cap pattern" as CLAUDE.md subsection (carry-over from Epic 12 AI #1) 7. Shared test utils (MinimalTestInstance + react-native-reanimated mock + findAllNodes/flattenStyle helpers duplicated in 3 files) 8. Carry forward Epic 12 AIs #5, #6, #7 unchanged 9. Compress mature CLAUDE.md paragraphs (Stories 9-X / 10-X) Epic 14 (UI/UX Consistency) plan sound. No plan revision required. Operator decision required on 14.1 language strategy before Epic 14 kickoff. Sprint-status updated: epic-13-retrospective optional → done.
This was referenced May 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.