Example

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 -- all

The 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 entries

The 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.

Canonical source and the Part III contract .

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.