You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/lessons-learned.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -115,5 +115,5 @@ git diff --check
115
115
-**Quality debt must be tracked, not normalized away.**`docs/example-quality-rubric.md` sets a 9.0 target and `scripts/check_quality_scores.py` enforces the score registry: pages below the hard minimum need a concrete improvement backlog entry, stale backlog entries fail once a page clears the gate, and Hello World is the only standing waiver because first examples are traditionally tiny. A score below target is allowed only when the remaining work is named.
116
116
-**No-figure decisions need a registry.** Some examples should not have figures, but that cannot be an invisible omission. `scripts/check_no_figure_rationales.py` validates `no_figure_rationales` so future constraint-shaped pages can opt out explicitly instead of shipping weak diagrams.
117
117
-**Journey sections need outcome contracts.**`scripts/check_journey_outcomes.py` ties each journey section to learner outcomes and support examples so journey pages stay mental maps rather than catalog slices.
118
-
-**Opaque scores hide the next move.**`scripts/score_example_criteria.py` breaks each page into rubric criteria so quality work can target decomposition, boundaries, source/result pairing, graph support, or practical payoff directly. `docs/quality-search.md` records the hill-climbing and simulated-annealing loop for escaping locally tidy but globally weak page shapes.
118
+
-**Opaque scores hide the next move.**`scripts/score_example_criteria.py` breaks each page into rubric criteria so quality work can target decomposition, boundaries, source/result pairing, graph support, or practical payoff directly. The bottom-28 pass showed that most misses were boundary/neighbor problems, not syntax problems. `docs/quality-search.md` records the hill-climbing and simulated-annealing loop for escaping locally tidy but globally weak page shapes.
119
119
-**Deployment smoke belongs beside CI.**`scripts/smoke_deployment.py` checks rendered Worker pages, runtime-boundary pages, journey pages, prototype review pages, and representative Dynamic Worker POST runs for HTTP failures, exception markers, and stale edited-code output. Build success is not enough; the deployed Worker must render and execute edited examples.
Copy file name to clipboardExpand all lines: docs/quality-search.md
+10Lines changed: 10 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,6 +40,16 @@ Greedy hill-climbing tends to overfit the current page shape: it adds one more n
40
40
41
41
This gives the project permission to try non-local changes — different domains, different cell order, or a no-figure rationale — without normalizing failed experiments into production.
42
42
43
+
## Techniques learned from the bottom-28 pass
44
+
45
+
The low-score pages mostly needed the same repair pattern rather than more prose:
46
+
47
+
-**Name the boundary in the page graph.** Pages that were otherwise good still looked weak when they had no prerequisite/neighbor/next-depth `see_also` edges. Adding edges made the intended learning path inspectable.
48
+
-**Use a three-cell spine.** Strong pages usually have setup, contrast/boundary, and payoff evidence. One compressed cell hides too many teaching jobs.
49
+
-**Show the neighboring tool.**`for` vs `while`, `lambda` vs `def`, `list` vs `set`, `None` vs exception/default, and eager vs lazy examples score better because learners see when not to use the feature.
50
+
-**Keep runtime/static distinctions explicit.** Typing pages improved when a cell showed the runtime caveat instead of leaving the type-checker promise implicit.
51
+
-**Let criterion scoring detect stale editorial labels.** Several pages had already gained cells, notes, and graph edges, but the curated comment still said `isolated`. The criterion report is useful for finding those stale labels.
52
+
43
53
## Wider-system unlocks
44
54
45
55
Future improvements that create new quality headroom:
`*args` and `**kwargs` let a function accept flexible positional and keyword arguments. They are the function-definition counterpart to unpacking at a call site.
Comprehensions are expression forms for building concrete collections from iterables. Read them from left to right: produce this value, for each item, optionally only when a condition is true.
Custom exceptions give names to failures in your problem domain. A named exception is easier to catch and explain than a generic error with only a string message.
0 commit comments