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
@@ -121,5 +121,5 @@ git diff --check
121
121
-**Audit across dimensions, not just artifacts.** A serious pass reads examples for payoff, rationale, alternatives, determinism, idiom, literate fit, source/result pairing, decomposition, progression, coverage, usefulness, and editorial shape; reads figures for cell fidelity, earned value, one move, mechanism, caption voice, grammar, emphasis, restraint, and fit; and reads journeys for section fidelity, scope, conceptual move, independence from lesson figures, outcome support, and prerequisite order. File-by-file review misses cross-cutting failures that dimension-by-dimension review catches.
122
122
-**When every score is green, resist score inflation and look for unsupported claims.** The current steady state is intentionally boring: one documented `hello-world` waiver, no below-target example diagrams, no below-target journey figures, no orphaned examples, and no stale weak-section backlog. Future audits should preserve that baseline by finding semantic drift, note claims without cells, weak `See also` edges, or journey sections that no longer match their support examples — not by raising 9.0 scores to 9.5 without new evidence.
123
123
-**Journey audit is graph audit plus outcome audit.** A journey section is healthy only when its examples form a prerequisite-respecting mental map and its declared outcomes are backed by cells on those examples. A section can have a beautiful figure and still fail if the support list is a catalog slice, if the `See also` graph isolates one example, or if the section caption describes a conceptual shift the examples do not actually make.
124
-
-**A green total can still hide a weak criterion.** The journey-figure audit found every section figure above the project gate while 15 sections still reused a lesson paint function, which weakens the independence-from-lesson-figures dimension. Keep a watchlist for criterion-level weakness even when the aggregate score remains shippable.
124
+
-**A green total can still hide a weak criterion.** The journey-figure audit found every section figure above the project gate while 15 sections still reused a lesson paint function, which weakened the independence-from-lesson-figures dimension. Bespoke runtime, control-flow, and iteration section figures reduced that watchlist to 6; keep tracking criterion-level weakness even when the aggregate score remains shippable.
125
125
-**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.
| runtime | Start with executable evidence. | 5 | 4 |program-output| 9.0 |Every page is a runnable program. The smallest mental model: source produces visible output. |
179
-
| runtime | Separate value, identity, and absence. | 6 | 4 |identity-and-equality| 9.0 |Two names can share one object (left, both `is` and `==` true) or hold two equal-but-distinct objects (right, only `==` true). |
180
-
| runtime | Read expressions as object operations. | 5 | 4 |operator-dispatch| 9.0 |Operators are method calls. `a + b` dispatches to `a.__add__(b)`; the data model exposes the syntax. |
181
-
| control-flow | Choose between paths. | 4 | 4 |branch-fork| 9.0 |A value flows through a predicate to one of several branches. |
182
-
| control-flow | Name and shape decisions. | 3 | 3 |naming-decisions| 9.0 | Name an intermediate fact, then dispatch by data shape when a boolean branch is too small. |
183
-
| control-flow | Stop as soon as the answer is known. | 3 | 3 |early-exit| 9.0 |The loop exits at the first match — break short-circuits the rest of the sequence. |
184
-
| iteration | Choose the right loop shape. | 5 | 4 | loop-repetition| 9.0 | Choose the loop whose stopping rule matches the data: exhaustion, condition, or sentinel. |
185
-
| iteration | See the protocol behind `for`. | 3 | 3 |iter-protocol | 9.5 | iter() exposes the iterator behind for; next() pulls one value at a time until exhausted. |
186
-
| iteration | Compose lazy value streams. | 3 | 3 | lazy-stream| 9.0 |Filters and maps compose without materialising intermediate lists; values flow through the pipeline only when next() pulls them. |
178
+
| runtime | Start with executable evidence. | 5 | 4 |runtime-evidence-loop| 9.0 |Examples are evidence loops: source, a run step, and visible output stay together. |
179
+
| runtime | Separate value, identity, and absence. | 6 | 4 |runtime-object-axes| 9.0 |Runtime objects answer separate questions: equal value, same identity, or the singleton that marks absence. |
180
+
| runtime | Read expressions as object operations. | 5 | 4 |runtime-expression-model| 9.0 |Expression syntax enters the data model; object methods produce the result. |
181
+
| control-flow | Choose between paths. | 4 | 4 |control-decision-map| 9.0 |Facts flow into one decision point; exactly one branch owns the next step. |
182
+
| control-flow | Name and shape decisions. | 3 | 3 |control-fact-shape| 9.0 | Name a fact when a condition needs it; match shape when the data structure is the decision. |
183
+
| control-flow | Stop as soon as the answer is known. | 3 | 3 |control-stop-boundary| 9.0 |Early exits draw a boundary: once the answer is found, the tail stays unread. |
184
+
| iteration | Choose the right loop shape. | 5 | 4 |iteration-loop-selector| 9.0 | Choose the loop from its stopping rule: exhaustion, condition, or sentinel marker. |
185
+
| iteration | See the protocol behind `for`. | 3 | 3 |iteration-protocol-map| 9.5 |for is surface syntax; iter() creates an iterator and next() pulls values until StopIteration. |
186
+
| iteration | Compose lazy value streams. | 3 | 3 |iteration-lazy-pull| 9.0 |Lazy pipelines run from the consumer's pull: next() requests one value through each stage. |
187
187
| shapes | Pick the container that matches the question. | 5 | 4 | container-questions | 9.0 | Each container answers a different question: ordered, fixed, lookup, unique. |
188
188
| shapes | Move between shapes deliberately. | 6 | 4 | reshape-pipeline | 9.0 | Most everyday code reshapes data: one input, one transform, one new value. |
189
189
| shapes | Cross text and data boundaries. | 5 | 4 | text-data-boundary | 9.0 | Programs receive text and produce structured data; parsing makes the boundary explicit. |
@@ -202,19 +202,10 @@ This snapshot audits the shipped catalog against the example, example-figure, an
202
202
203
203
## Journey figure independence watchlist
204
204
205
-
These section figures still reuse production example paint functions. They remain above the project gate, but the journey rubric's independence criterion should be the next visual-design frontier.
205
+
6 section figures still reuse production example paint functions. They remain above the project gate, but the journey rubric's independence criterion should be the next visual-design frontier.
206
206
207
207
| Section | Shared figure | Also attached to example |
208
208
| --- | --- | --- |
209
-
| Start with executable evidence. | program-output | hello-world |
210
-
| Separate value, identity, and absence. | identity-and-equality | equality-and-identity |
@@ -224,4 +215,4 @@ These section figures still reuse production example paint functions. They remai
224
215
225
216
## Audit conclusion
226
217
227
-
No gate-blocking edits are required by this pass. The only below-target example is the standing `hello-world` waiver; all example diagrams and journey figures are at or above 9.0; every journey section has declared outcomes; and the example graph has no orphaned sources. The main non-gating watch item is journey-figure independence: several section figures intentionally reuse lesson paint functions and should be the next source of bespoke visual-design work.
218
+
No gate-blocking edits are required by this pass. The only below-target example is the standing `hello-world` waiver; all example diagrams and journey figures are at or above 9.0; every journey section has declared outcomes; and the example graph has no orphaned sources. The main non-gating watch item is journey-figure independence: 6 section figures intentionally reuse lesson paint functions and should be the next source of bespoke visual-design work.
0 commit comments