Module Checkpoints¶
Page Maps¶
graph LR
family["Python Programming"]
program["Python Meta-Programming"]
section["Guides"]
page["Module Checkpoints"]
capstone["Capstone evidence"]
family --> program --> section --> page
page -.applies in.-> capstone
flowchart LR
orient["Orient on the page map"] --> read["Read the main claim and examples"]
read --> inspect["Inspect the related code, proof, or capstone surface"]
inspect --> verify["Run or review the verification path"]
verify --> apply["Apply the idea back to the module and capstone"]
Use this page at the end of a module.
Its purpose is simple: prevent false advancement. Metaprogramming learners often move on because the examples felt familiar or the terminology started sounding natural. That is not enough. Each module needs an exit bar strong enough that later material does not rest on confusion.
How to use the checkpoints¶
For each module:
- Read the checkpoint.
- Try to explain it in plain language without looking back.
- Prove one part of it in the capstone or another concrete surface.
- If you cannot do both, you are not done with the module.
Use this page to slow yourself down, not to reassure yourself.
Checkpoints by module¶
Module 01: Runtime Objects and the Python Object Model¶
You are ready to move on when you can:
- explain functions, classes, modules, and instances as runtime objects rather than as syntax categories
- describe what names actually resolve to when Python binds methods or closes over values
- distinguish supported introspection surfaces from implementation-specific curiosities
Proof move:
- choose one capstone object and describe it without executing its business behavior
Module 02: Safe Runtime Observation and Inspection¶
You are ready to move on when you can:
- explain why ordinary attribute access is not automatically passive
- separate visible names, stored state, and resolved values
- choose safer inspection tools before reaching for risky value resolution
Proof move:
- inspect manifest and registry output before opening implementation files
Module 03: Signatures, Provenance, and Runtime Evidence¶
You are ready to move on when you can:
- use signatures to explain how a callable is meant to be invoked
- validate a complete call with
bind()and explain whybind_partial()answers a different question - distinguish strong runtime evidence from best-effort provenance hints
- explain why two inspection helpers can answer different questions about the same object
- build a stored-state representation without evaluating properties
Proof move:
- run the Module 03 evidence and representation labs, then use capstone action preflight to prove argument validation remains separate from execution
Module 04: Function Wrappers and Transparent Decorators¶
You are ready to move on when you can:
- describe what happens at definition time and what happens at call time in a decorator
- separate decorator-expression evaluation from bottom-up decorator application
- explain why
functools.wrapsis part of correctness rather than decoration - tell when a wrapper is still transparent and when it has started hiding semantic change
- distinguish logical signature recovery from the wrapper shell's implementation shape
- trace a stateful wrapper's execution, eviction, failure, and reset policies
Proof move:
- run the wrapper lifecycle and bounded-cache labs, then audit the capstone action wrapper before comparing its failed and successful history tests
Module 05: Decorator Design, Policies, and Typing¶
You are ready to move on when you can:
- judge whether policy belongs in a decorator or should become an explicit service or object
- explain what annotation-driven runtime behavior can promise honestly and what it cannot
- describe the review cost of hiding retries, validation, or caching behind wrappers
- predict the exact retry and warning-mode traces before executing them
- separate call-shape binding from partial runtime hint checking
- name the unsupported hint and owner-exit condition in a policy review
Proof move:
- run
make decorator-policy-lab-test, inspectmake decorator-policy-lab, then comparemake capstone-bind-action,make capstone-check-action, andmake capstone-action-wrapper
Module 06: Class Customization Before Metaclasses¶
You are ready to move on when you can:
- explain when a class decorator, property, or explicit helper is sufficient
- describe why post-creation customization is usually less risky than class-creation control
- recognize when a design is drifting toward descriptor or metaclass territory
- prove class-decorator expression, body, and application timing separately
- distinguish dataclass generation, property enforcement, and descriptor reuse
- define surface freezing without implying deep immutability
Proof move:
- run
make class-customization-lab-test, inspectmake class-customization-lab, then usemake capstone-class-creationto explain the exact creation-time evidence that justifiesPluginMeta
Module 07: Descriptors, Lookup, and Attribute Control¶
You are ready to move on when you can:
- classify an object from its hooks instead of assuming that
__set_name__makes it a descriptor - predict data-descriptor, instance-dictionary, non-data-descriptor, and class-attribute precedence before running an access
- explain method binding through the identities of
__func__and__self__ - trace one attribute from class declaration through
__set_name__to per-instance storage - state what a descriptor enforces and what remains outside its boundary
- justify when a descriptor owns an invariant better than a plain method or property
Proof move:
- run
make descriptor-lookup-lab-test, inspectmake descriptor-lookup-lab, and reconcile its static prediction with each observed access - then run
make capstone-field-ownershipand explain how the real field's hooks, storage owner, class access, and metaclass collection preserve the same model without constructing a plugin
Module 08: Descriptor Systems, Validation, and Framework Design¶
You are ready to move on when you can:
- trace a cached derivation through reuse, dependency invalidation, and recomputation
- name the authoritative backend slot, local mirror, hidden I/O, and outage behavior for one external field
- trace normalization, validation, storage, and audit through a composed field in order
- publish a hint interpreter's supported, coerced, validated, and refused surfaces
- distinguish a bounded field-backed record model from transactions, identity maps, query planning, relationships, and migrations
- select the smallest owner that can see an invariant and reject both weaker and stronger alternatives
Proof move:
- run
make descriptor-system-lab-test, inspectmake descriptor-system-lab, and reconcile each mechanism with its named focused test - then run
make capstone-field-systemand explain why the application accepts explicit field subclasses and class-level collection while rejecting caches, backend access, wrapper stacks, hint inference, and transactions in its field layer
Module 09: Metaclass Design and Class Creation¶
You are ready to move on when you can:
- trace
type(name, bases, namespace)into one concrete class object - predict inherited metaclass selection and explain a real conflict as competing class-creation ownership
- separate namespace and structural work in
__new__from finished-class bookkeeping in metaclass__init__ - preserve one assignment-time fact through
__prepare__that final class inspection cannot recover - reject a metaclass for registration alone because
__init_subclass__is sufficient - justify the capstone metaclass through its combined declaration-time and generated class contract
Proof move:
- run
make class-creation-lab-test, inspectmake class-creation-lab, and reconcile the hook and owner decisions with their focused tests - then run
make capstone-class-creationand map its four-entry hook trace, accepted powers, rejected powers, source owners, and failure tests without constructing a plugin
Module 10: Runtime Governance and Mastery Review¶
You are ready to finish the course when you can:
- explain why an AST allowlist and empty builtins narrow a trusted language but do not isolate adversarial execution
- distinguish ABC instantiation enforcement, static protocol compatibility, shallow runtime presence, and behavioral proof
- prove patch restoration after ordinary and exceptional exits while refusing concurrency and crash-safety claims
- show complete import-hook cleanup across both
sys.meta_pathandsys.modules, then prove no-hook behavior - write an approve, constrain, or reject decision with a lower-power comparison, blast radius, observation route, rollback, proof, escalation signal, and non-claim
- audit one capstone decision by connecting JSON evidence, source ownership, and a focused assertion
Proof move:
- run
make runtime-governance-lab-test, inspectmake runtime-governance-lab, and reconcile every evidence key with its owning source and focused test - then run
make capstone-governanceand explain one approved mechanism, the constrained registry, and one rejected power before invoking a plugin
What to do when a checkpoint fails¶
- Re-read the module overview and the most relevant lesson page.
- Return to the capstone proof move instead of reading more abstractions.
- Use the previous module’s checkpoint if the current one feels magical.
Good stopping point¶
You can leave this page when you know:
- which checkpoint you can defend
- which one still fails
- what concrete proof move you will use next