Skip to content

VNEXT-DOMAIN-001: Capability graph + evidence model v0 for Vietnamese learners #42

Description

@Thunderkill016

Parent: #39
Depends on: #40, #41

Goal

Turn the research/design doctrine into executable domain contracts before UI work.

Deliverables

1. Capability graph v0

Create 12–20 beginner capabilities spanning:

  • listening comprehension;
  • spoken interaction;
  • spoken production;
  • reading;
  • short functional writing;
  • clarification/repair.

Each capability must include:

  • stable id;
  • performance;
  • criteria;
  • conditions;
  • prerequisites;
  • modality;
  • required language components;
  • evidence requirements;
  • delayed-retention rule;
  • transfer rule;
  • Vietnamese risk probes where relevant.

2. Evidence model v0

Define append-only event types for:

  • exposure;
  • recognition attempt;
  • recall attempt;
  • spoken/written production;
  • interaction turn;
  • help/hint/model reveal;
  • feedback;
  • self-repair/retry;
  • delayed retrieval;
  • transfer;
  • checkpoint.

Every event must preserve:

  • capability/task id;
  • modality;
  • aided/unaided;
  • practiced vs transfer context;
  • observed vs self-report;
  • timestamp;
  • content revision.

3. Capability state projection

Derived states:

  • NOT_SEEN
  • EXPOSED
  • SUPPORTED
  • INDEPENDENT
  • RETAINED
  • TRANSFERRED
  • FLUENT

State must be rebuildable from evidence. Never store the state as the source of truth.

4. Vietnamese risk layer

Represent population-level risk priors separately from learner evidence.

Candidate priors:

  • word-final consonants;
  • consonant clusters;
  • /θ/ /ð/;
  • lexical stress / intonation;
  • articles;
  • copula be;
  • inflectional endings;
  • question formation;
  • tense/prepositions/collocations;
  • speaking anxiety/support needs.

A prior may schedule a diagnostic probe. It may NOT mark the learner weak without evidence.

5. Validation

Add tests/fixtures that prove:

  • aided success cannot become INDEPENDENT;
  • immediate success cannot become RETAINED;
  • same prompt repeated cannot become TRANSFERRED;
  • one modality cannot mark another modality as learned;
  • population prior cannot mutate learner state;
  • changed-context success can produce transfer evidence;
  • event replay is deterministic.

Initial capability set

Start from practical beginner functions, not grammar chapters:

  1. recognize a basic greeting;
  2. greet another person;
  3. say own name;
  4. ask another person's name;
  5. respond to an introduction;
  6. ask someone to repeat;
  7. signal non-understanding;
  8. understand a simple identity question;
  9. understand a basic drink-order question;
  10. order one drink politely;
  11. read a very simple sign/menu item;
  12. write one short personal-information response.

Add more only when needed to prove graph/prerequisite behavior.

Definition of done

A headless test can answer:

  • what the learner is trying to do;
  • what evidence exists;
  • what support was used;
  • whether the ability survived delay;
  • whether it transferred;
  • what should happen next.

No learner-facing UI in this issue.

Activity

  1. Thunderkill016 commented on Sep 28, 2026

    @Thunderkill016
    OwnerAuthor

    Headless engine implemented in PR #43 (branch devin/vnext-core-001, CI green — verify:full).

    Modules (src/vnext/ — greenfield, zero coupling to legacy src/core/):

    • capabilities.js — 12 capabilities, 5 modalities, acyclic prereq graph, per-capability VN risk-probe ids
    • evidence.js — EvidenceEvent v0: 11 types, context{missionId, practicedOrTransfer, promptFamily, partnerType}, attempt{observed, outcome, response, latencyMs}, support{hint, translation, transcript, modelAnswer, repeat}, feedback, taskRevision
    • projection.js — pure replay → per-capability milestones + state
    • risk-priors.js — 12 priors; learnerStateEffect: 'none_without_observed_evidence' is a constant, so priors have no write path into learner state
    • planner.js — resume → due retrieval → remediation → transfer → independent attempt → probe/expose; every action carries a reason

    Locked rules (tests/vnext.test.mjs, 9 groups):

    • hint/modelAnswer/translation/transcript support → SUPPORTED max; repeat is not answer-bearing; unobserved self-report never earns INDEPENDENT
    • RETAINED needs unaided success ≥24h after first independence (RETENTION_DELAY_MS is a named constant)
    • TRANSFERRED needs practicedOrTransfer:'transfer' + a promptFamily never proven in practice
    • FLUENT = transfer in ≥2 distinct families
    • modality mismatch earns zero credit — a spoken_production event on a listening capability leaves it NOT_SEEN
    • baseline fail → planner routes to the unmet prerequisite (teaching), not retry
    • replay deterministic; event ids dedupe for resync

    Vertical slice runs in the test: baseline fail → input → hinted retrieval (SUPPORTED) → independent attempt (INDEPENDENT) → delayed retrieval at +24h (RETAINED) → changed-context success (TRANSFERRED) → second novel context (FLUENT), with planner assertions at every transition.

    Next per the issue's DoD: the engine answers all six questions headless. UI stays out of scope until this lands.

  2. Thunderkill016 commented on Sep 28, 2026

    @Thunderkill016
    OwnerAuthor

    PM/architecture review of PR #43

    PR #43 is directionally correct and CI is green, but not accepted yet.

    Direct code review found six blockers:

    1. non-attempt events can currently advance learner state;
    2. equal-timestamp replay depends on arrival order;
    3. mixed learnerIds can be projected together;
    4. failed delayed retrieval can loop back into another due check instead of remediation;
    5. two transfer contexts incorrectly promote directly to FLUENT;
    6. transfer novelty ignores previously practiced-but-aided prompt families.

    A detailed review comment is posted on #43. GitHub does not allow this account to submit REQUEST_CHANGES on its own PR, so the review is recorded as COMMENT, but the PM status is changes required / do not merge.

    No UI work until the corrected head is reviewed.

  3. Thunderkill016 commented on Sep 28, 2026

    @Thunderkill016
    OwnerAuthor

    Re-review of PR #43 @ 2df6c5b

    Accepted fixes: blockers 1, 2, 3, 4 and 6.

    Still blocked on two evidence contracts:

    1. FLUENT threshold — 0.8 × first-independent latency is an uncalibrated magic threshold and only measures speed. Per the vNext doctrine, vnext: headless capability engine — graph, evidence, projection, planner (#42) #43 should stop at TRANSFERRED until a dedicated fluency contract exists.

    2. Capability conditions are not enforced — conditions.supportAllowed is currently dead data. Capabilities default to no allowed support, yet repeat:true can still earn INDEPENDENT. Independent evidence must satisfy the capability's declared conditions.

    Detailed review posted on PR #43. Do not merge / do not start UI yet.

  4. added 2 commits that reference this issue on Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions