LIFEOS/TOOLS/GenerateTelosSummary.ts builds PRINCIPAL_TELOS.md, which CLAUDE.md loads at every session start. It cuts almost every item mid-sentence, and the cut removes exactly the part that carries state.
What it does today (v7.40.4):
truncate() cuts each item at 50-110 characters and appends ... (Missions 75, Goals 70, Problems 60, Strategies 60, Projects 60/90, Narratives 75/60, Challenges 90, Wisdom/Wrong 110, Models 65).
- Goals are first reduced to their first sentence (split on
— or . ), so a trailing status note such as *(Jul-2026: ...)* never survives.
- Problems in list form are split on the first
—, which can leave an unclosed *( in the output.
## Problems / ## Strategies headers are cut at 57 characters.
- Models: only the first 3 render, first sentence only.
- The header line
Sources: ... TRAUMAS ... is hardcoded, so it names sections that do not exist in the install.
Measured on one real install: 53 of 58 bullets ended in .... Some cuts invert the meaning (a project note reading "no longer IN..." with the rest cut off).
Why it matters: the file exists so the assistant knows the principal's goals and where each one stands. A goal without its status is the goal minus the useful half, and a sentence cut mid-word can be read as its opposite. The original ~60-line budget predates today's context limits: Claude Code warns at 150K characters of instruction files, and the untruncated summary here is ~14K.
Suggested fix: emit items whole (drop truncate, the first-sentence split, the header cuts and the Models slice(0, 3)), and build the Sources: line from the sections that actually produced content. If a size budget is still wanted, enforce it per section by dropping whole items with a visible "(+N more in TELOS.md)" line rather than cutting inside one.
LIFEOS/TOOLS/GenerateTelosSummary.tsbuildsPRINCIPAL_TELOS.md, whichCLAUDE.mdloads at every session start. It cuts almost every item mid-sentence, and the cut removes exactly the part that carries state.What it does today (v7.40.4):
truncate()cuts each item at 50-110 characters and appends...(Missions 75, Goals 70, Problems 60, Strategies 60, Projects 60/90, Narratives 75/60, Challenges 90, Wisdom/Wrong 110, Models 65).—or.), so a trailing status note such as*(Jul-2026: ...)*never survives.—, which can leave an unclosed*(in the output.## Problems/## Strategiesheaders are cut at 57 characters.Sources: ... TRAUMAS ...is hardcoded, so it names sections that do not exist in the install.Measured on one real install: 53 of 58 bullets ended in
.... Some cuts invert the meaning (a project note reading "no longer IN..." with the rest cut off).Why it matters: the file exists so the assistant knows the principal's goals and where each one stands. A goal without its status is the goal minus the useful half, and a sentence cut mid-word can be read as its opposite. The original ~60-line budget predates today's context limits: Claude Code warns at 150K characters of instruction files, and the untruncated summary here is ~14K.
Suggested fix: emit items whole (drop
truncate, the first-sentence split, the header cuts and the Modelsslice(0, 3)), and build theSources:line from the sections that actually produced content. If a size budget is still wanted, enforce it per section by dropping whole items with a visible "(+N more in TELOS.md)" line rather than cutting inside one.