--- id: LSN-0022 ticket: pbs-learn-to-discussion-lessons-migration title: PBS Globals, Lifecycle, and Published Entrypoint Legacy Import created: 2026-03-27 tags: [compiler, pbs, legacy-import, globals, lifecycle, entrypoint, lowering] --- ## Context Legacy import from `docs/compiler/pbs/learn/05. Globals, Lifecycle, and Published Entrypoint.md`. This lesson preserves the final topic-19 executable model after the workflow history was pruned from the PBS domain. ## Key Decisions ### Logical frame root and physical entrypoint are separate **What:** The user `[Frame]` callable is the logical frame root, while the compiler-published wrapper is the physical executable entrypoint. **Why:** The language surface should stay clean and semantically owned by user code, while the compiler owns the executable boot protocol. **Trade-offs:** The model introduces synthetic artifacts, but it makes lifecycle orchestration explicit and deterministic. ### Boot is one-shot and compiler-owned **What:** PBS boot orchestration is enforced through compiler-generated lifecycle artifacts plus a hidden boot guard. **Why:** One-shot bootstrap semantics cannot depend on naming convention or informal runtime discipline. **Trade-offs:** Lowering must carry more structure and metadata, but backend and runtime contracts become much less ambiguous. ## Patterns and Algorithms - Model globals as explicit source-level declarations with stable module ownership. - Model lifecycle through `[Init]`, `[Frame]`, and compiler-owned synthetic lowering artifacts. - Publish the wrapper at physical entrypoint index `0`. - Keep `FRAME_RET` in the wrapper path, not at the end of userland `frame()`. - Keep hidden lifecycle state structurally distinguishable from ordinary user globals and callables. ## Pitfalls - Treating `frame()` itself as the physical entrypoint. - Reintroducing manifest-driven entrypoint authority. - Recognizing hidden lifecycle artifacts only by naming convention. - Proving only artifact presence without proving one-shot bootstrap semantics. ## Takeaways - Userland owns frame semantics; the compiler owns executable boot protocol. - Hidden lifecycle artifacts must be first-class structure, not naming folklore. - Topic 19 is the closure that made PBS executable publication deterministic end-to-end.