Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 40 additions & 36 deletions .fleet/design-review.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,93 +2,99 @@
"$schema": "fleet.design-review.v1",
"version": 1,
"project": "swe-interview-prep",
"target": "Four-surface Learning OS: Dashboard, Learn, Practice, and Wars with complete catalogue preservation",
"target": "Complete Fanout-inspired learning surfaces",
"mode": "preserve",
"register": "product",
"context": {
"product": "PRODUCT.md",
"design": "DESIGN.md"
},
"direction": {
"references": [],
"probes": [],
"references": ["https://fanout.sh/", "https://learn-inference.com/"],
"probes": [
"complete source path",
"focused resumable study",
"searchable notation",
"decision evidence",
"daily-priority integrity"
],
"selected": "existing-design",
"approval": "not-required",
"before": "artifacts/design/software-wars/after-wars-1440.png"
"before": "artifacts/design/daily-learning-dashboard-1440.png"
},
"evidence": {
"screenshots": [
{
"width": 390,
"path": "artifacts/design/final-dashboard-390.png"
"path": "artifacts/design/fanout-learn-390.png"
},
{
"width": 390,
"path": "artifacts/design/final-learn-390.png"
"width": 768,
"path": "artifacts/design/fanout-learn-768.png"
},
{
"width": 390,
"path": "artifacts/design/final-practice-390.png"
"width": 1440,
"path": "artifacts/design/fanout-learn-1440.png"
},
{
"width": 390,
"path": "artifacts/design/final-wars-390.png"
"path": "artifacts/design/fanout-inference-390.png"
},
{
"width": 768,
"path": "artifacts/design/final-dashboard-768.png"
"path": "artifacts/design/fanout-inference-768.png"
},
{
"width": 768,
"path": "artifacts/design/final-practice-768.png"
"width": 1440,
"path": "artifacts/design/fanout-inference-1440.png"
},
{
"width": 1440,
"path": "artifacts/design/final-dashboard-1440.png"
"width": 390,
"path": "artifacts/design/fanout-focused-study-390.png"
},
{
"width": 1440,
"path": "artifacts/design/final-learn-1440.png"
"width": 768,
"path": "artifacts/design/fanout-focused-study-768.png"
},
{
"width": 1440,
"path": "artifacts/design/final-practice-1440.png"
"path": "artifacts/design/fanout-focused-study-1440.png"
},
{
"width": 1440,
"path": "artifacts/design/final-practice-selector-1440.png"
"width": 390,
"path": "artifacts/design/fanout-model-routing-390.png"
},
{
"width": 1440,
"path": "artifacts/design/final-wars-1440.png"
"width": 768,
"path": "artifacts/design/fanout-model-routing-768.png"
},
{
"width": 390,
"path": "artifacts/design/software-wars/final-tradeoff-playground-390.png"
"width": 1440,
"path": "artifacts/design/fanout-model-routing-1440.png"
},
{
"width": 390,
"path": "artifacts/design/software-wars/final-tradeoff-diagram-390.png"
"path": "artifacts/design/fanout-notation-390.png"
},
{
"width": 768,
"path": "artifacts/design/software-wars/final-tradeoff-playground-768.png"
"path": "artifacts/design/fanout-notation-768.png"
},
{
"width": 1440,
"path": "artifacts/design/software-wars/final-tradeoff-playground-1440.png"
"path": "artifacts/design/fanout-notation-1440.png"
}
],
"projectCheck": {
"command": "vitest run; tsc --noEmit; biome check .; docs validation; generated-curriculum + production Vite build; Playwright smoke/mobile/Wars; strict OpenSpec validation",
"status": "pass"
"command": "pnpm quality",
"status": "passed"
},
"critique": {
"score": 36,
"score": 37,
"maximum": 40
},
"audit": {
"score": 17,
"score": 16,
"maximum": 20
},
"unresolved": {
Expand All @@ -97,13 +103,11 @@
},
"detector": {
"posture": "advisory",
"findings": [
"The final scoped detector ran exactly once and found one advisory legacy color literal in CodeEditor; it was aligned to the documented rose-danger token before handoff."
]
"findings": []
}
},
"ownerFeedback": {
"decision": "keep",
"note": "Owner reviewed the four-surface direction and responded: looks good, keep going. Dashboard resumes work; Learn is high-level and searchable; Practice is the existing Playground with all 298 canonical problems; Wars presents the one-minute and thirty-minute formats. Complete concept, roadmap, problem, public-curriculum, progress, and legacy routes remain visible and portable."
"decision": "pending",
"note": ""
}
}
54 changes: 54 additions & 0 deletions .impeccable/critique/2026-08-19T20-34-28Z__src-pages-today-tsx.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
target: Evidence-driven daily learning and decision labs
total_score: 33
max_score: 40
na_heuristics:
p0_count: 0
p1_count: 0
timestamp: 2026-08-19T20-34-28Z
slug: src-pages-today-tsx
---
Method: dual-agent critique (A: design_assessment · B: detector_assessment)

# Evidence-driven daily learning critique

The result is product-specific in behavior: a learner predicts, reveals deterministic evidence, records a decision receipt, and must still pass a causal explain-back before mastery changes. The visual language deliberately preserves the existing Learning OS rather than introducing a new brand system.

## Nielsen heuristic score

| Heuristic | Score |
| --- | ---: |
| Visibility of system status | 4 |
| Match between system and real world | 4 |
| User control and freedom | 3 |
| Consistency and standards | 4 |
| Error prevention | 3 |
| Recognition rather than recall | 4 |
| Flexibility and efficiency | 2 |
| Aesthetic and minimalist design | 3 |
| Error recovery | 3 |
| Help and documentation | 3 |
| Total | 33/40 |

## Findings and resolution

- P1: The evidence ladder initially called a typed but editable prediction frozen. It now completes only after reveal, and focused UI coverage verifies the transition.
- P1: A generic prediction example contradicted two lab prompts. Every decision lab now supplies a task-specific example.
- P1: Ten inference inputs formed an undifferentiated wall. They are now grouped by hardware budget, model shape, workload, and reserve, with the governing formula and assumptions available inline.
- P1: Small instructional text failed contrast guidance, the primary textarea lacked an accessible name, and the lab nested a main landmark. Contrast tokens, labels, focus rings, and landmark structure were corrected.
- P1: Editing a revealed input could silently erase an attempt. Revealed inputs now lock and an explicit new-attempt control retains the configured values while resetting staged evidence.
- Capture issue: the first desktop Labs screenshot fired before its lazy route rendered. A page-specific clean recapture proves the surface is populated at 1440px.

No P0 or P1 findings remain. The detector ran once and returned no implementation-integrity findings.

## Persona check

- Power users get one direct daily action and an explicit restart path, but presets and receipt duplication remain future efficiency opportunities.
- Screen-reader and low-vision users now receive named fields, valid landmarks, stronger contrast, focus rings, required-field guidance, alerts, and live evidence state.
- Distracted mobile users get a single-column flow and explicit attempt boundaries; draft persistence before receipt creation remains a possible future improvement.

## Questions carried forward

- Should the Labs index eventually surface the exact lab recommended by today's priority?
- Would reusable presets materially improve repeated capacity experiments without weakening prediction-first behavior?
- Should unfinished local lab drafts survive navigation, or is a receipt the correct first durable boundary?
10 changes: 10 additions & 0 deletions PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ account-scoped in the browser.
public curriculum.
- Every ranked Blitz question must have one explicit canonical Learn concept,
authoritative sources, and authored reasoning for every answer option.
- Dashboard answers “what should I learn today?” with one deterministic
recovery, retention, or progression priority and an explicit evidence
contract before showing optional history or catalogue context.
- Decision labs, formulas, and paper contracts may produce local evidence, but
only the existing authenticated Feynman-to-FSRS path may grant mastery.
- Learn Inference is represented as a 42-section companion path that links to
the canonical book; the product stores original summaries and retrieval
prompts, not copied source bodies.
- Focused study and decision-lab drafts are account-scoped, version-aware
continuity state. Completing a draft is evidence, not mastery.
- Blitz ratings and Tradeoff ratings are separate; ranked state, deadlines,
answers, and match outcomes remain server-owned.
- Production remains a Vite/React application on Cloudflare Pages with Pages
Expand Down
1 change: 1 addition & 0 deletions PROJECT_STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ External: LeetCode API (import), multi-provider LLM APIs

| Phase | Milestone |
|-------|-----------|
| Fanout-inspired learning surfaces (local, 2026-08-20) | Added the complete 42-section Learn Inference companion path, searchable formula/notation reference, accessible concept topography, eight-source rotating paper programme, focused resumable study, three additional decision labs, scenario presets, and version-aware local drafts. Dashboard remains concept-first: failed practice and due retrieval still outrank progression and evidence-format selection. The size gate has since moved to per-chunk gzipped budgets on the first-load graph, which this expansion stays within. Local verification is recorded in GitHub issue #86; deployment remains separate. |
| First-paint stylesheet stability (2026-08-22) | Removed the build-only asynchronous stylesheet rewrite so production CSS loads through Vite's normal blocking link. The pinned shell reset remains as a stable React handoff instead of compensating for intentionally delayed application styles. Corrected the size gate to bound the four scripts in the generated first-load graph rather than summing click-loaded curriculum documents as initial JavaScript. |
| Fleet code-health baseline (2026-08-14) | Added one CI-enforced quality contract covering whole-source coverage, unused code, complexity, exact duplication, import cycles, severe advisories, suppression markers, docs, build, bundle size, and repository hygiene. Removed an orphan declaration, unused simulation helpers and public exports, and unused direct tooling dependencies; safe package updates reduced high advisories from 29 to six accepted transitive advisories. Remaining measured debt is explicit and can only move downward. |
| Harness and classic system-design expansion (2026-08-13) | Added a seven-build Harness Engineering roadmap with seven practice-backed atomic concepts and two measured synthesis projects. Expanded the structured Tradeoff catalog from 20 to 33 cases with unique IDs, proximity, nearby presence, routing, queues, metrics, ad clicks, hotel reservations, email, object storage, leaderboards, wallets, and exchange matching. The generated public curriculum now contains 19 tracks, 26 roadmaps, and 259 concept pages; all 473 tests, typecheck, docs validation, source reachability, and the production build pass. |
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/daily-learning-labs-1440.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/daily-learning-labs-390.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/daily-learning-labs-768.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-focused-study-1440.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-focused-study-390.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-focused-study-768.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-inference-1440.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-inference-390.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-inference-768.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-learn-1440.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-learn-390.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-learn-768.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-model-routing-1440.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added artifacts/design/fanout-model-routing-390.png
Binary file added artifacts/design/fanout-model-routing-768.png
Binary file added artifacts/design/fanout-notation-1440.png
Binary file added artifacts/design/fanout-notation-390.png
Binary file added artifacts/design/fanout-notation-768.png
60 changes: 60 additions & 0 deletions artifacts/design/reviews/evidence-driven-daily-learning.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"$schema": "fleet.design-review.v1",
"version": 1,
"project": "swe-interview-prep",
"target": "Evidence-driven daily learning and decision labs",
"mode": "preserve",
"register": "product",
"context": {
"product": "PRODUCT.md",
"design": "DESIGN.md"
},
"direction": {
"references": [
"artifacts/design/distilled-today-1440.png",
"artifacts/design/systems-lab-after-1440.png"
],
"probes": [],
"selected": "existing-design",
"approval": "not-required",
"before": "artifacts/design/distilled-today-1440.png"
},
"evidence": {
"screenshots": [
{ "width": 390, "path": "artifacts/design/daily-learning-dashboard-390.png" },
{ "width": 768, "path": "artifacts/design/daily-learning-dashboard-768.png" },
{ "width": 1440, "path": "artifacts/design/daily-learning-dashboard-1440.png" },
{ "width": 390, "path": "artifacts/design/daily-learning-labs-390.png" },
{ "width": 768, "path": "artifacts/design/daily-learning-labs-768.png" },
{ "width": 1440, "path": "artifacts/design/daily-learning-labs-1440.png" },
{ "width": 390, "path": "artifacts/design/daily-learning-inference-capacity-390.png" },
{ "width": 768, "path": "artifacts/design/daily-learning-inference-capacity-768.png" },
{ "width": 1440, "path": "artifacts/design/daily-learning-inference-capacity-1440.png" },
{ "width": 390, "path": "artifacts/design/daily-learning-capacity-planning-390.png" },
{ "width": 768, "path": "artifacts/design/daily-learning-capacity-planning-768.png" },
{ "width": 1440, "path": "artifacts/design/daily-learning-capacity-planning-1440.png" },
{ "width": 390, "path": "artifacts/design/daily-learning-evaluation-confidence-390.png" },
{ "width": 768, "path": "artifacts/design/daily-learning-evaluation-confidence-768.png" },
{ "width": 1440, "path": "artifacts/design/daily-learning-evaluation-confidence-1440.png" }
],
"projectCheck": {
"command": "vitest run; tsc --noEmit; biome check .; docs validation; generated-curriculum + production Vite build; size limit; repository hygiene; responsive Playwright captures",
"status": "pass"
},
"critique": { "score": 33, "maximum": 40 },
"audit": { "score": 17, "maximum": 20 },
"unresolved": { "p0": 0, "p1": 0 },
"detector": {
"posture": "advisory",
"findings": [
"The scoped detector ran exactly once and returned no implementation-integrity findings.",
"The accessibility audit found contrast, textarea naming, and nested-main issues; all were fixed before handoff.",
"The final independent critique found zero unresolved P0 or P1 issues after responsive recapture."
]
}
},
"ownerFeedback": {
"decision": "keep",
"note": "Owner reviewed the evidence-driven daily-learning direction and responded: keep going. Preserve the deterministic daily priority, evidence-gated labs, formula support, and source-led learning contracts."
}
}
55 changes: 55 additions & 0 deletions artifacts/design/reviews/four-surface-learning-os.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"$schema": "fleet.design-review.v1",
"version": 1,
"project": "swe-interview-prep",
"target": "Four-surface Learning OS: Dashboard, Learn, Practice, and Wars with complete catalogue preservation",
"mode": "preserve",
"register": "product",
"context": {
"product": "PRODUCT.md",
"design": "DESIGN.md"
},
"direction": {
"references": [],
"probes": [],
"selected": "existing-design",
"approval": "not-required",
"before": "artifacts/design/software-wars/after-wars-1440.png"
},
"evidence": {
"screenshots": [
{ "width": 390, "path": "artifacts/design/final-dashboard-390.png" },
{ "width": 390, "path": "artifacts/design/final-learn-390.png" },
{ "width": 390, "path": "artifacts/design/final-practice-390.png" },
{ "width": 390, "path": "artifacts/design/final-wars-390.png" },
{ "width": 768, "path": "artifacts/design/final-dashboard-768.png" },
{ "width": 768, "path": "artifacts/design/final-practice-768.png" },
{ "width": 1440, "path": "artifacts/design/final-dashboard-1440.png" },
{ "width": 1440, "path": "artifacts/design/final-learn-1440.png" },
{ "width": 1440, "path": "artifacts/design/final-practice-1440.png" },
{ "width": 1440, "path": "artifacts/design/final-practice-selector-1440.png" },
{ "width": 1440, "path": "artifacts/design/final-wars-1440.png" },
{ "width": 390, "path": "artifacts/design/software-wars/final-tradeoff-playground-390.png" },
{ "width": 390, "path": "artifacts/design/software-wars/final-tradeoff-diagram-390.png" },
{ "width": 768, "path": "artifacts/design/software-wars/final-tradeoff-playground-768.png" },
{ "width": 1440, "path": "artifacts/design/software-wars/final-tradeoff-playground-1440.png" }
],
"projectCheck": {
"command": "vitest run; tsc --noEmit; biome check .; docs validation; generated-curriculum + production Vite build; Playwright smoke/mobile/Wars; strict OpenSpec validation",
"status": "pass"
},
"critique": { "score": 36, "maximum": 40 },
"audit": { "score": 17, "maximum": 20 },
"unresolved": { "p0": 0, "p1": 0 },
"detector": {
"posture": "advisory",
"findings": [
"The final scoped detector ran exactly once and found one advisory legacy color literal in CodeEditor; it was aligned to the documented rose-danger token before handoff."
]
}
},
"ownerFeedback": {
"decision": "keep",
"note": "Owner reviewed the four-surface direction and responded: looks good, keep going. Dashboard resumes work; Learn is high-level and searchable; Practice is the existing Playground with all 298 canonical problems; Wars presents the one-minute and thirty-minute formats. Complete concept, roadmap, problem, public-curriculum, progress, and legacy routes remain visible and portable."
}
}
26 changes: 26 additions & 0 deletions docs/architecture/data-flow.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,32 @@ into `src/pages/LearningDoc.tsx`.
5. BuildLab surfaces a "next weakest concept" card → the loop closes:
drill → explain → mastery update → next weakest concept.

## Daily priority and decision evidence

1. The existing session planner chooses one reachable concept using ordered
intervention classes: repeated failed practice, due low-confidence mastery,
then roadmap progression. Time is injectable so unchanged state is
deterministic.
2. A pure projection chooses the strongest evidence action for that concept
and exposes the objective, “why today” rationale, time budget, completion
predicate, and what completion unlocks.
3. Formula views, paper opens, calculations, frozen predictions, retrievals,
receipts, pending explanations, and verified explanations remain distinct
evidence states. Versioned decision receipts and paper attempts are stored
in an account namespace in localStorage.
4. Local evidence changes refresh Dashboard immediately. A receipt or paper
attempt remains mastery-pending until the authenticated Feynman action
accepts the explanation; only then can the existing concept-mastery API
update FSRS.
5. Known-unavailable external sources cannot become the primary assignment;
the projection falls back to a local concept, drill, or decision lab.
6. A stable UTC-day rotation selects among available concept-linked paper
contracts, but it runs only after recovery and retention selection and
after any unverified concept-linked decision lab.
7. Mutable decision-lab and focused-study drafts live in a separate
account-scoped continuity store. Definition-version mismatches are ignored;
issuing an immutable receipt clears the corresponding mutable draft.

## Systems Lab attempt flow

1. `/labs/:labId` loads a versioned definition from the SPA bundle and
Expand Down
Loading
Loading