End the session and keep only what was declared
See temporary state expire with the review, standing declarations survive, nothing be promoted to a trait, and a fresh interaction the next day start from the declarations alone.
The last of Part III’s chapters is the one that has to make the whole thing survivable: a session ends, and most of what the session created has to end with it, while the small part the person declared deliberately does not.
Run it
git clone https://github.com/ernanhughes/project-language.git
cd project-language
git checkout 329660f679a5a87831f91fe1430c20ac9360dda8
npm ci
npm run example:personal -- allThe ch28 selector is an end-of-review slice rather than a standalone run of
the whole Part III composition, so the full run is the one to use. The model is
a scripted stand-in and the morning is an invented one.
Expected outcome
The session ends, and the run separates what ended from what did not:
...
Chapter 28: the session ends. Temporary things end with it; nothing is promoted; standing declarations remain
overlay ov-pre-meeting ended; invalidated plan-003, plan-004, plan-013
friction contract fr-one-paper expired
boundary bd-quiet-feeds expired (its removal at each service is a separate act: /personal revoke)
standing records unchanged: pol-arch-review:active, pref-terse-triage:active, acc-keyboard:active
promoted to a durable trait: nothing (promotion is a separate, human act)And a fresh interaction the next day starts from the declarations alone:
...
declared_policy pol-arch-review(active)
declared_preference pref-terse-triage(active)
accessibility_requirement acc-keyboard(active)
plans: none
no malformed or foreign entriesThe three records are dumped in an order the state does not fix, so a run may list them in a different sequence. What does not vary is the set: the standing declarations, and nothing else.
The whole run closes with the list of what it does not establish, and the observation boundary it actually operated in:
...
"observation_boundary": "the Pi session entries and UI notify calls in the harness; fake services' own recorded state; the core/verify readback check",
"model_mode": "scripted faux provider",
"fixture_scope": "one invented architecture-review morning for one invented person, three fake services"Expiry and promotion are different acts
The overlay module states the rule that a temporary thing never becomes a durable trait by itself:
// Chapter 24: the person changes during the day. A scoped, expiring overlay, and no inference of inner state.
//
// Communication POLICY can persist. Communication STATE should usually not.
//
// An overlay is the bounded application of a standing policy, the current context and an explicit temporary instruction.
// It ends with its scope, it sheds its effects when it ends, and it never becomes a durable trait on its own. Promotion to a
// standing policy is a separate act that only a person can perform.
And a boundary’s expiry at the end of a session is not the same as its removal at each service — the run says so explicitly, and revocation is a separate command:
// Chapter 26: protection that travels. A boundary the person declared, carried to another service WITHOUT the history that
// produced it, applied only as exactly as the service allows, and reported honestly stage by stage.
//
// DECLARED != CARRIED != RECEIVED != SUPPORTED != ENFORCED != VERIFIED
//
// Only fake services exist here. A service limitation never enlarges the instruction: a broader-only control is refused or
// the rule is returned for reformulation. Revocation and creation share one adapter path, `transmit`. Verification is its own
// act, a readback checked through core/verify, and nothing earlier implies it.
Mechanism and limitations
Documented: the overlay’s expiry and the promotion rule are in
core/personal/src/overlay.ts; the boundary’s stages and the shared transmit
path for creation and revocation are in core/personal/src/portable.ts; the
wider Part III design is in PART-THREE-CONTRACT.md.
Observed: the run above. The overlay ended and invalidated three plans, the friction contract expired, the boundary expired, the three standing declarations were unchanged, and nothing was promoted. A fresh interaction the next day had no plans and no observations.
Not shown. That any personalisation helps anyone is not established, and nothing here shows that a person noticed, understood or used anything — there is no human evidence in this run at all. The services are fakes, and a setting read back is not proof of future behaviour. Physical erasure is not possible: the durable backend retracts and keeps a tombstone. Session entries are not tamper-proof; the checksum is an integrity marker, not protection against a hostile writer.
Understand this example
Copy this prompt into your AI tool. No code runs here.
Apply this example
Copy this prompt into your AI tool. No code runs here.