Skip to content

Ft/app improvement#1

Merged
Simplemart17 merged 14 commits into
mainfrom
ft/app-improvement
Mar 4, 2026
Merged

Ft/app improvement#1
Simplemart17 merged 14 commits into
mainfrom
ft/app-improvement

Conversation

@Simplemart17

Copy link
Copy Markdown
Owner

No description provided.

…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
@Simplemart17 Simplemart17 merged commit c378e38 into main Mar 4, 2026
1 check failed
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.
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant