Skip to content

feat: turn M01 into an interactive learning lab - #6

Open
tim8es wants to merge 8 commits into
feature/art-direction-editorial-instrumentfrom
feature/m01-learning-lab
Open

feat: turn M01 into an interactive learning lab#6
tim8es wants to merge 8 commits into
feature/art-direction-editorial-instrumentfrom
feature/m01-learning-lab

Conversation

@tim8es

@tim8es tim8es commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Goal

Replace M01's read-and-self-attest lesson pattern with a compact decision-training lab that teaches, checks, and transfers project-system diagnosis skills.

What changed

  • M01 normal lesson URLs remain unchanged; no new learner-facing router or parallel course path
  • each M01 lesson now includes a realistic decision case, immediate option-specific feedback, worked example, reusable technique, exit check, interactive workbook, and real-project transfer prompt
  • existing M01 validation decision drills are reused inside the normal learning path rather than duplicated as another runtime
  • workbook and drill state persist inside the existing pm01-state-v1 storage object under lab
  • M01 completion now requires all required decision drills plus required workbook evidence; M02-M10 keep the legacy criteria gate unchanged
  • Editorial Instrument visual direction is preserved, but essential learner text now uses stronger contrast tokens and explicit focus states
  • substantive body/workbook text is kept at readable sizes; the workbook intentionally switches to a light paper surface for the work mode

M01 techniques

Lesson 1 — Смотри на проект целиком

  • Seven-flow scan
  • outcome → seven flows → main break → intervention → early signal
  • persistent seven-flow project map

Lesson 2 — Сначала найди причину

  • causal chain
  • symptom → evidence → mechanism → system condition → intervention → early signal
  • persistent causal-chain workbook

TDD / verification

  • RED: Prototype CI #91 (34068722023) failed after adding the new lab-data/readability contracts before implementation
  • runtime regression contracts added separately before the app.js implementation
  • GREEN: Prototype CI #96 (34069073465) completed successfully on head 16fcbb1b7d41a8e3f7e01f8fcdbaeb93d13033b7
  • clean Pages deploy contains only production assets; Pages run fix: keep Learning Lab completion evidence-valid #8 (34069116045) completed successfully for deploy 4bfa595a54673f31937ebc2f1fd60ba0c0fbcd7b
  • public root is reachable after deployment

Scope / safety

  • main unchanged
  • telemetry unchanged
  • no PR merged
  • M02-M10 content intentionally not rewritten yet; M01 is the reference vertical slice
  • real Chromium visual/interaction QA is still a separate empirical gate because this chat has no connected browser/CDP runtime

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 16fcbb1b7d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app.js
Comment on lines +418 to +423
const lessonState = ensureLabState(id);
lessonState.drillAnswers[drillId] = event.target.value;
const drill = lesson?.learningLab?.drills.find((item) => item.id === drillId);
const feedback = document.querySelector(`[data-lab-feedback="${drillId}"]`);
if (feedback && drill) feedback.outerHTML = renderLabFeedback(drill, event.target.value);
saveState();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Persist reused drill answers where validation can read them

When a learner starts #/validation/m01, submits the baseline, and follows the provided lesson links, these reused drills save answers only under pm01-state-v1.lab. However, allDrillsAnswered() in m01-validation-app.js reads only pm01-validation-m01-v1.state.drills, so returning after completing both lessons still shows 0/2 drills and keeps the post-case locked. The learner must then answer the identical cases again after already seeing their feedback, which also invalidates the intended first-choice validation evidence; bridge the in-lesson first answers into the validation state or make the validation flow consume the canonical lab answers.

Useful? React with 👍 / 👎.

Comment thread app.js
Comment on lines +258 to +260
${done
? `<a class="button primary" href="${next ? `#/lesson/${next.id}` : "#/course"}">${next ? "Продолжить к следующему уроку" : "Вернуться к программе"} →</a>`
: `<button class="button primary" id="complete-lesson" ${readiness.ready ? "" : "disabled"}>Завершить урок и продолжить →</button>`}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Enforce the lab gate for previously completed M01 lessons

On an upgraded browser where completed already contains an M01 lesson but the newly introduced lab state is empty, done is true while readiness.ready is false. This branch nevertheless replaces the disabled completion button with a direct link to the next lesson, so the new requirement that M01 completion include drill and workbook evidence is bypassed for every existing learner, even while the status says the required work is unfinished. Migrate or re-evaluate legacy M01 completion before selecting this done path.

Useful? React with 👍 / 👎.

Comment thread app.js
Comment on lines +216 to +220
<header class="lab-intro">
<p class="eyebrow">Learning Lab</p>
<h2>Навык урока</h2>
<p>${escapeHtml(lab.skill)}</p>
</header>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Present the cold decision before explaining the target skill

For both M01 lessons, this skill explanation is rendered before renderLabDrill(coldDrill, ...); for example, it tells the learner to distinguish a symptom from the project system immediately before asking which systemic response to choose. That primes the supposedly cold decision and prevents it from exposing the learner's initial misconception. Render the cold case first and defer the skill/thesis explanation until after the choice.

Useful? React with 👍 / 👎.

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